美文网首页
第五章 初始化与清理

第五章 初始化与清理

作者: 老茂在北京 | 来源:发表于2016-12-09 14:53 被阅读13次

用构造器确保初始化

类里的数据成员,有三个途径初始化:

  • 默认初始化,一般都为0。即使没有默认构造器,也会初始化
  • 直接初始化,就是直接赋值
  • 构造器(构造函数)初始化

重载

涉及基本类型的重载需要注意一下

  • 常数被当做int
  • 如果传入的数据类型小于方法中声明的形式参数,自动提升
  • char略有不同,如果无法找到恰好接受char参数的方法,就会把char提升为int
    注意不要通过返回值区分重载方法

默认构造器

默认构造器就是无参数构造函数,可以更改默认构造器。
如果定义了构造器,编译器就不会自动创建默认构造器

class Bird{
       Bird(int i){}
       Bird(double i) {}
 }
new Bird();//这样就会找不到构造器

this关键字

  • this关键字只能在方法内部使用,表示对“调用方法的那个对象”的引用。但要注意在方法内部调用同一个类的另一个方法,就不比使用this,直接调用即可。
    当需要返回对当前对象的引用时,常常用return this
public class leaf{
int i=0;
leaf incres(){
        i++;
        return this;
}}
leaf x=new leaf();
x.incres().incres().i;//i=2
  • 将自身传递给外部方法时,必须使用this关键字。
  • 在构造器中调用构造器可以用this,必须放在构造器的开头,一个构造器内只能有一个this。除了构造器可以调用构造器,其他任何地方都不可以调用

static的含义

  • static是没有this的方法。(还不理解)
  • static方法不能调用非静态方法。可以直接通过类调用(主要用途)
  • 在类中置入static方法就可以访问其他static方法和static域

清理:终结处理和垃圾回收

finalize()函数后面再深入学习

成员初始化

默认初始化是类的数据成员。而方法的数据成员需要手动。
自动初始化在构造器被调用前执行。

初始化顺序

变量定义的先后顺序决定了初始化的顺序。即使变量定义散布于方法定义之间,他们仍旧会在任何地方(包括构造器)被调用之前得到初始化。

静态数据的初始化

静态初始化只有在必要时刻才会进行。只有第一次访问静态数据是被初始化,此后,静态对象不会再次被出书画。

总结对象的创建过程:

  1. 即使没有显示使用static关键字,构造器实际上也是静态方法。当首次创建类型为Dog的对象时,或者Dog类的静态方法/静态域首次被访问时,Java解释器必须查找类途径,以定位Dog.class.
  2. 然后载入Dog.class, 有关所有静态初始化的动作都会执行。因此,静态初始化只在class对象首次加载的时候进行一次
  3. 当用new Dog()创建对象的时候, 首先将在堆上为Dog对象分配足够的存储空间、
  4. 这块存储空间被清零。设置为默认值0 or null
  5. 执行所有出现于字段定义处的初始化动作
  6. 执行构造器

数组的初始化

  • 数组特殊的初始化是由一对花括号完成的,等价于new
int[] a1={1,2,3,4,5};
int[] a2=a1;//两者指向同一片内存空间
a1.length;//length是数组的固有成员
  • 直接用new在数组里创建元素
int[] a=new int[num];
int[] b;
b=new int[num];
  • 可以用花括号括起来的列表初始化对象数组
Integer[] a= {new Integer(1), new Integer(2), 3,};
Integer[] b=new Integer[]{new Integer(1), new Integer(2), 3,};
System.out.println(Arrays.toString(a));

相关文章

网友评论

      本文标题:第五章 初始化与清理

      本文链接:https://www.haomeiwen.com/subject/norsmttx.html