Java中初始化和清理

来源:互联网 发布:java项目有红色感叹号 编辑:程序博客网 时间:2024/06/06 08:50

Java中初始化和清理

1. 每个类都有一个默认的构造器,但自己定义一个构造器(无论是否含有参数),编译器都不会自动创建默认构造器。

Class Test(){ Test(int a){} Test(double b){} } //调用new Test()会出现编译错误,因为重写了构造器,对象的默认构造器不会再创建。

2. static方法内部不能调用非静态方法,且static方法是没有this方法的。
3. 构造器的自动初始化
*在Java中“初始化“和”创建 “是捆绑在一起,两者不能分离。
构造器是一种特殊类型方法,它是没有返回方法。它和返回类型为void是不同的。new表达式中返回了对新建对象的引用,但是引构造器本身是没有任何返回值的。*

4. 成员初始化
一个类的所有基本类型数据成员都会保证获得一个初始值。
在一个类中可以中的变量甚至可以通过调用一个方法来提供初始化值。

class A{ int i = f();}但是那些自变量不可以是未初始化的其他类成员,下面的是合法的:calss A{int  i = f();int j= g(i);}

下面的是非法的:

class A{
int j=g(i);
int i=f();
}//很明显是在i初始化之前调用了i

*5. 静态变量的初始化*
静态变量的初始化只执行一次

*6. 垃圾收集*

垃圾回收只和内存有关。
垃圾回收机制中判断对象是否被回收的方法:

  1. 引用计数。每个对象都有一个引用计数器,当其被引用连接到对象,引用计数加1,当引用离开作用域或者被置为null时,引用计数减1。引用计数为0时,就回收该对象。缺点:对象之间存在循环引用,则会出现引用计数始终不为0。
  2. 停止-复制。先暂停程序的运行,将所有存活的对象从当前堆复制到另一个堆,没有被复制的全部当做垃圾。复制到新堆时,它们是一个挨着一个的,新堆保持紧凑排列。缺点:当程序运行产生很少或不产生垃圾,也会复制,资源是一种浪费。会有一种“标记-清扫”模式(自适应模式),没有垃圾产生时,java虚拟机就进入到这种工作模式。“
  3. 标记-清理”模式依据的思想将堆栈和静态存储区,遍及所有的应用,找出存活的对象,找到一个存活的对象就进行标记,全部标记以后一次性将没有标记的对象进行释放。
1 1
原创粉丝点击