对象的创建和存在时间

从技术角度说,OOP(面向对象程序设计)只是涉及抽象的数据类型、继承以及多形性,但另一些问题也可能 显得非常重要。本节将就这些问题进行探讨。 最重要的问题之一是对象的创建及破坏方式。对象需要的数据位于哪儿,如何控制对象的“存在时间”呢? 针对这个问题,解决的方案是各异其趣的。C++认为程序的执行效率是最重要的一个问题,所以它允许程序员 作出选择。为获得最快的运行速度,存储以及存在时间可在编写程序时决定,只需将对象放置在堆栈(有时 也叫作自动或定域变量)或者静态存储区域即可。这样便为存储空间的分配和释放提供了一个优先级。某些 情况下,这种优先级的控制是非常有价值的。然而,我们同时也牺牲了灵活性,因为在编写程序时,必须知 道对象的准确的数量、存在时间、以及类型。如果要解决的是一个较常规的问题,如计算机辅助设计、仓储 管理或者空中交通控制,这一方法就显得太局限了。 第二个方法是在一个内存池中动态创建对象,该内存池亦叫“堆”或者“内存堆”。若采用这种方式,除非 进入运行期,否则根本不知道到底需要多少个对象,也不知道它们的存在时间有多长,以及准确的类型是什 么。这些参数都在程序正式运行时才决定的。若需一个新对象,只需在需要它的时候在内存堆里简单地创建 它即可。由于存储空间的管理是运行期间动态进行的,所以在内存堆里分配存储空间的时间比在堆栈里创建 的时间长得多(在堆栈里创建存储空间一般只需要一个简单的指令,将堆栈指针向下或向下移动即可)。由 于动态创建方法使对象本来就倾向于复杂,所以查找存储空间以及释放它所需的额外开销不会为对象的创建 造成明显的影响。除此以外,更大的灵活性对于常规编程问题的解决是至关重要的。 C++允许我们决定是在写程序时创建对象,还是在运行期间创建,这种控制方法更加灵活。大家或许认为既然 它如此灵活,那么无论如何都应在内存堆里创建对象,而不是在堆栈中创建。但还要考虑另外一个问题,亦 即对象的“存在时间”或者“生存时间”(Lifetime)。若在堆栈或者静态存储空间里创建一个对象,编译 器会判断对象的持续时间有多长,到时会自动“破坏”或者“清除”它。程序员可用两种方法来破坏一个对 象:用程序化的方式决定何时破坏对象,或者利用由运行环境提供的一种“垃圾收集器”特性,自动寻找那 些不再使用的对象,并将其清除。当然,垃圾收集器显得方便得多,但要求所有应用程序都必须容忍垃圾收 集器的存在,并能默许随垃圾收集带来的额外开销。但这并不符合C++语言的设计宗旨,所以未能包括到 C++ 里。但 Java 确实提供了一个垃圾收集器(Smalltalk 也有这样的设计;尽管 Delphi 默认为没有垃圾收集 器,但可选择安装;而 C++亦可使用一些由其他公司开发的垃圾收集产品)。 本节剩下的部分将讨论操纵对象时要考虑的另一些因素。

 1 package Com.TomTest;
 2
 3
 4 class Area {
 5       float f(float r ) {
 6           return 3.14159f*r*r;
 7        }
 8        float g(float x,float y) {
 9           return x+y;
10        }
11     }
12     class Circle extends Area {
13         float f(float r) {
14           return 3.14159f*2.0f*r;
15         }
16     }
17     public class TomTest_26 {
18        public static void main(String args[]){
19           Circle yuan;
20           yuan=new Circle();
21           float length=yuan.f(5.0f);
22           float sum=yuan.g(232.645f,418.567f);
23           System.out.println(length);
24           System.out.println(sum);
25        }
26     }

原文地址:https://www.cnblogs.com/borter/p/9438483.html

时间: 2024-10-03 10:05:00

对象的创建和存在时间的相关文章

对象的创建和存在时间(持续更新)

 摘自:Think In Java 从技术角度说.OOP(面向对象程序设计)仅仅是涉及抽象的数据类型.继承以及多形性.但还有一些问题也可能显得很重要.本节将就这些问题进行探讨.最重要的问题之中的一个是对象的创建及破坏方式.对象须要的数据位于哪儿,怎样控制对象的"存在时间"呢?针对这个问题.解决的方案是各异其趣的. C++觉得程序的执行效率是最重要的一个问题,所以它同意程序猿作出选择.为获得最快的执行速度.存储以及存在时间可在编敲代码时决定.仅仅需将对象放置在堆栈(有时也叫作自己主动或定

JavaScript日期时间对象的创建与使用(三)

时钟效果一: 代码: <html> <head> <meta charset="utf-8"/> <title>JavaScript日期时间对象的创建与使用</title> </head> <body> <h2 id="time"></h2> <script type="text/javascript"> function Cl

对象的创建和存在的时间

从技术角度说,OOP(面向对象程序设计)只是涉及抽象的数据类型.继承以及多形性,但另一些问题也可能显得非常重要.本节将就这些问题进行探讨.最重要的问题之一是对象的创建及破坏方式.对象需要的数据位于哪儿,如何控制对象的“存在时间”呢?针对这个问题,解决的方案是各异其趣的.C++认为程序的执行效率是最重要的一个问题,所以它允许程序员作出选择.为获得最快的运行速度,存储以及存在时间可在编写程序时决定,只需将对象放置在堆栈(有时也叫作自动或定域变量)或者静态存储区域即可.这样便为存储空间的分配和释放提供

ajax之请求对象的创建以及它与服务器之间的4次“握手”(好吧其实只有3次)

request对象的创建 对于request对象的创建,我们总会第一时间反映到下列语句 var request=new XMLHttpRequest(); 不过因为各大浏览器之间的相互斗殴行为,事情是不会这么简单的. 比如非常经典的:IE浏览器没有XMLHttpRequest函数. 但这难不倒我们聪明机智的程序员,我们也有经典的应对措施: function createRequest(){     try{         request=new XMLHttpRequest();     }c

图解java对象的创建过程

前面几篇博文分别介绍了JAVA的Class文件格式.JVM的类加载机制和JVM的内存模型,这里就索性把java对象的创建过程一并说完,这样java对象的整个创建过程就基本上说明白了(当然你要有基础才能真正看明白).经常有人问我为什么这么喜欢钻研底层的东西,首先,因为我以前的做硬件的和嵌入式的,兴趣使然:其次,我个人感觉,如果不把上下打通,心里老是有一堵墙过不去,说白了,这是个人因素,与好坏无关(当然,经常有人说,懂底层原理是成为高手的必经之路). 现在来说一下我当初学习JVM的原因,在学习JAV

JVM中对象的创建

对象的创建 加载class 虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载.解析和初始化过.如果没有,那必须先执行相应的类加载过程, 分配内存 在类加载检查通过后,接下来虚拟机将为新生对象分配内存.对象所需内存的大小在类加载完成后便可完全确定,为对象分配空间的任务等同于把一块确定大小的内存从Java堆中划分出来,有两种分法(选择哪种分配方式由Java堆是否规整决定,而Java堆是否规整又由所采用的垃圾收集器是

深入理解final 类String 对象的创建以及内部方法

学习过程中的笔记 : int indexOf(int ch) :获取字符在字符串中第一次出现的位置,如果不存在,则返回-1 int indexOf(int ch,int fromIndex): 从fromIndex位置开始查找,查找ch第一次出现的位置 获取位置 int indexOf(int ch) :获取字符在字符串中第一次出现的位置,如果不存在,则返回-1 int indexOf(int ch,int fromIndex): 从fromIndex位置开始查找,查找ch第一次出现的位置 in

数据库对象的创建和管理

--数据库对象的创建和管理 DDL(数据定义语言) --表(table): 数据库存储的基本单元; --约束条件(constraint):用来确保数据库中数据的完整性,确保数据满足某些特定的商业规则 --视图(view):一个或多个表的逻辑表示或虚拟表示,主要用于简化查询操作 --索引(index):用于加速数据访问数据库对象,提高访问效率 --序列(sequence):用于生成唯一数字值的数据库对象,序列的生成机制会自动生成顺序递增的数字,可以用来作为数据表的主键值 --同义词(synonym

Java对象的创建

学了很久的java,是时候来一波深入思考了.比如:对象是如何在JVM中创建,并且被使用的.本文主要讲解下new对象的创建过程.要想更深入的了解建议去认认真真的看几遍<深入理解Java虚拟机>周志明写的. 首先自己想想:Person p = new Person() 这句话是干嘛的?废话,肯定是创建一个新对象的,那么JVM是怎么帮你创建的呢?在哪创建的?怎么在堆上分配内存的?你又是如何去根据变量找到对应的对象的?带着这些问题,继续往下看: 一.找到能生成对象的Class类 对象又不是孙猴子,石头