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

    技术2022-05-11  65

    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来指定调用那个构造函数,基类的构造过程以及构造顺序,同派生类相同,基类构造函数运行完毕之后,会按照各个变量的字面顺序进行初始化,最后执行构造函数的其余各个部分。 

     

    继承和合成合成是把已有的类当作新类底层实现的一部分来复用,而继承则是复用其接口。由于派生类拥有基类的接口,因此它可以被上传到基类。尽管面向对象的编程反复强调继承,但是当你着手设计的时候,通常情况下还是先考虑合成,只有在必要的时候才使用继承。


    最新回复(0)