首页 > 代码库 > java 编程思想笔记(二)——初始化

java 编程思想笔记(二)——初始化

一.问题

  随着计算机革命的发展,“不安全”的编程方式已逐渐成为编程代价高昂的主因之一。

  初始化清理正是涉及安全的两个问题。

二.java 解决方案

  构造器:一种特殊的方法。java 中”初始化“和”创建“捆绑在一起,两者不能分离。

  垃圾回收器:释放无用的对象。

三.方法重载

  为什么要在这里讲方法重载?我觉得首先:构造器是一种特殊的方法,再一个,构造器除了默认构造器还有有参构造器。为了让方法名称相同而形式参数不同的构造器同时存在,就必须用到方法重载。

  区分方法重载的判决条件

  1.参数的数量是否相同

  2.参数的类型是否相同

  只要其中一条为否,则就是方法重载,必须记住重载的前提:方法名称必须相同。

四.构造器中调用构造器

  1.尽管可以用this调用一个构造器,但却不能调用两个。此外,必须将构造器调用置于最起始处,否则编译错误。

  2.除构造器之外,编译器禁止在其他任何方法中调用构造器。

五.成员初始化途径

  1.所有变量在使用前都能得到恰当的初始化,类的基本类型默认为基本类型的默认值,局部变量必须由编程者指定初始值,在类中,一个对象引用不将其初始化,就会获得特殊的null值。

  2.编程者指定变量初始化值

  3.通过构造器初始化变量值,但是自动初始化在构造器初始化之前完成。

六.变量初始化顺序

 变量定义的顺序决定了初始化的顺序,即使变量定义散步于方法定义之间。

七.静态数据初始化

  无论创建多少个对象,静态数据都只占用一份存储区域,static 关键字不能用于局部变量,因此只能作用于域。

八.非静态实例初始化

  代码如下:

Class Mug{

   Mug(int maker){
          print("Mug("+maker+")");    

    }               
   void f(int maker){
          print("f("+maker+")");          
    }
}
public  Class Mugs{

    Mug mug1;
    Mug mug2;
   {
       mug1= new Mug(1);
       mug2= new Mug(2);
       print("mug1&mug2 initial");
    }
   
   Mugs()
    {
          print("Mugs(int)");
    }

   public static void main(String[] args)
    {
          print("Inside main()");
          new Mugs();
          print("new Mugs()  completed");
          new Mugs(1);
          print("new Mugs(1)  completed");
    }


}                  

从输出结果可以看出,实例初始化子句是在两个构造器之前执行的。

九,对六七八的总结

  1.首先初始化静态的变量(第一次访问.class文件时初始化,只初始化一次),然后初始化非静态变量

  2.非静态变量会被创建对象时复制给默认值。

  3.执行编程值为变量指定的初始值。

  4.执行构造器。

 

java 编程思想笔记(二)——初始化