5.初始化和清理

这章重点讲了构造器

1.构造器的名字和类名完全相同

2.构造器本身不返回任何东西,没有void,而返回值为空(void)是方法本身不返回什么,但是可以选择返回别的东西。

3.构造器可以重载,且靠参数列表识别,参数是可以提升的,比如
Constructor(int i),那么传入char j时  j就被提升到int

4.用返回值区别重载方法行不通
  void f()
  String f()
如果调用String s = f();这是没问题,如果调用f();将无法区分混乱。避免之。

5.默认构造器
这个也总是在面试题里出现。
不写构造器,则java自动给个无参构造器。如果写了构造器,不管有参还是无参,默认的无参构造器都会消失。

6.this
返回当前对象引用,这是普通用法。
如果在构造器中调用构造器,this(参数列表),这时它就是有不同含义了,这是对符合此格式的某个构造器的明确调用。而且得写在第一句。 除构造器除外,编译器禁止在其他方法里调用它。
static 方法里是没有 this的方法。

7.清理
  如果一个对象没有引用变量指向它,这个对象就被应用抛弃了。随时可能被回收。
 丢弃并不代表被回收,因为回收也会有较大开销,影响效率,所有只有在有对象要回收且系统需要回收时才进行。
  干预垃圾回收的两种方式一个对象的引用都移走。
 调用System.gc(),向jvm发出请求,然后对几个垃圾回收算法做了加权,使垃圾回收操作更易发生。相反,还有在某段时间内不要回收垃圾,要求速度的实时系统和嵌入式系统,因为垃圾回收影响效率。
  垃圾回收时做的善后工作写在
protected void finalize()  
 
{  
 
// finalization code here  
 


回收机制:
引用计数,对对象上的引用计数,如果为零,则应该被回收。缺陷是循环引用,引用不为零,但应当被回收。
停止复制,没有的引用的对象将不被复制,缺点,程序要挂起,所以有了
标记-清扫,当程序达到稳态时,对程序进行检查,如果没有垃圾产生,则换到另一种工作模式,标记过程中活对象将被加上标记,加标记的将被复制。思路是从堆栈和静态存储区遍历所有引用。

内存泄露,c++中对象被分配空间,但不可达,无法释放。java中对象无用,但仍有引用相连。

8.成员初始化
java尽力保证:所有变量在使用之前都能得到恰当的初始化。对于方法的局部变量,java以编译错误的形式保证。
9.初始话顺序
静态->成员变量->构造器

10.静态块
static int i;
static{
i = 47;
}
首次生成一个对象,或首次访问类的静态数据成员,静态块将被首先执行。
同样非静态成员变量也可以这样
 int i;
{
i = 47;
}
只不过来了static。  目的都是在构造器之前执行这些。
11.数组初始化
基本类型的数组自动初始化为 0 ,布尔型为false;
而对象数组需要明确初始化。
这里有个打印数组的方法 java.util.Array.toString(a)

12.可变参数列表
method(String ... args) 相当于method(String [] args)大小未知。
目的是不用显式编写数组然后传参,method("a","b","c")可以自动填充数组args

13.java 参数传递
值传递--当基本类型作为参数时
实参不会被改变,传递的是值。
引用传递--当对象作为参数时
形参的改变会引起实参的改变,它们引用的是同一对象。
14.enum 不多说了 到后面专门有枚举这章,在这提主要是想和switch 组合。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章