您的位置:首页 > 编程语言 > Java开发

java编程思想读书笔记九(Final 关键字的用法&初始化与类的装载&继承情况下的初始化)

2007-02-15 17:29 489 查看
Final 关键字的用法&初始化与类的装载&继承情况下的初始化
1、Final的数据
   可以是“编译时的常量”
   也可以是运行时初始化的值,这个值你以后就再也别想改了。
   一个既是static 又是final的数据成员会只占一段内存,并且不可

修改
   当Final不是指primitive ,而是用于对象的引用时,意思是在初始

化的时候,一旦将这个引用链接到某个对象,那么这个引用进将永远

链接在这个对象上,不能改变。但是对象本身是可以改变的。

   Final参数:java允许将参数申明为Final的,这样参数也变成了  

final了,这样在方法里你不能让参数指向另一个对象了。
2、Final的方法
   为方法上锁
   效率问题(基本可以被忽略)
3、Final类
   数据可以是final的,也可以不是final的
 
初始化与类的装载
   java采用了一种新的装载模式,所有东西都是对象,因此很多事情都变得很简单,编译之后的每个类都保存在它自己的文件里,不到需要的时候,是不会装在的。可以这样说,类的代码总是在第一次实用的时候装载,类的装载通常都发生在第一次创建那个类的对象的时候,但是访问static 数据或static 方法的时候也会装载。
   第一次使用static 数据的时候也是进行初始化的时候,装载的时候static 对象和static代码段会按照他们字面的的顺序进行初始化。

* 继承情况下的初始化
  class Insect{
      protected static Test temp = new Test();
      private int i = 9;
      Insect(){
         System.out.println("ok");
         i = 20;
      }
   }
  
   public class Beetle extends Insect{
       public Beetle(){
         System.out.println("okok");
       }
       private static int x2 = 9;
       public static void main(String[] args){
          Beetle b = new Beetle();
       }
    }
    当你用java运行Beetle的时候,第一件事就是访问了mian()方法,于是装载器就会为你寻找经编译的Beetle类的代码(.class文件)在转载过程中,装载器就注意到它有一个基类,于是它在装载基类,不管你创不创建基类对象,这个过程总会发生。如果基类还有基类,那么这第二个基类也会被装载,以此类推。
     下一步,他会执行“根基类”的static 初始化,然后执行下个派生类的static初始化,以此类推,这个也非常重要,因为派生类的“静态初始化”可能依赖基类的成员正确初始化。
    现在所有必要的类都已经装载结束,可以创建对象了,首先对象类的所有primitive都会被设成为他们的缺省值,而references也会被设置为null,这个过程会在一瞬间完成。对象的内存会被统一的设置为“二进制的0”
    然后调用基类的构造函数,调用是自动发生的,但是你可以使用super来指定调用那个构造函数,基类的构造过程以及构造顺序,同派生类相同,基类构造函数运行完毕之后,会按照各个变量的字面顺序进行初始化,最后执行构造函数的其余各个部分。 

 

继承和合成
合成是把已有的类当作新类底层实现的一部分来复用,而继承则是复用其接口。由于派生类拥有基类的接口,因此它可以被上传到基类。
尽管面向对象的编程反复强调继承,但是当你着手设计的时候,通常情况下还是先考虑合成,只有在必要的时候才使用继承。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐