1.java静态方法(继承)
在java中,子类可以继承父类的静态方法。同时,如果N是M的子类,M m = new N();这样调用静态方法,是会调用父类的静态方法的,和调用非静态方法是不同的,这点是需要注意的。
2.final关键字
如果在类中没有初始化final属性,那么请在所有的构造方法中,初始化final属性。
如果是final属性,是原生类型时,不允许修改其值;如果是对象引用时,不允许指向其他的对象,但是可以修改对象中属性的值。
3.静态代码块
静态代码块只执行一次,因此类加载器只加载一次类信息。
如果存在三个类,P,Q extends P,S extends Q,那么执行的顺序为:P的静态代码块,Q的静态代码块,S的静态代码块,P的构造方法,Q的构造方法,S的构造方法。
静态代码块是在类加载完毕后进行执行,而不是定义对象时进行的,其最大的体现在于,我们执行“类.静态变量”,这个时候,会执行静态代码块,初始化,静态变量。
4.静态方法不能访问非静态变量
为什么呢?静态方法可以用"类.静态方法"来调用,那么我们这个静态方法访问的是哪个对象的变量呢?这个根本没法指定,所以是不能这么调用的。
记住:this也是非静态变量,代表对象本身。
5.接口中的成员变量
接口中的成员变量都是public,static,final的,因为接口和类的最大区别在于,接口是一个工具集合,工具集合不需要像类那样具有自己的属性值。类在自然界中可以看成是一个实体的抽象。
6.StringPool
看这句代码:String str = new String("aaa");如果字符串池中没有“aaa”,则在字符串池中进行创建(注:字符串池是存在在栈中得),同时在堆中创建“aaa”对象,将对象的引用赋值给str;如果字符串池中存在"aaa",那么就在堆中创建"aaa"这个对象,并将引用赋值给str。
7.String的intern方法
当一个字符串调用该方法时,如果在字符串池中没有该字符串,则添加该字符串到StringPool中,并返回StringPool中该字符串的引用;如果在StringPool有该字符串,则返回StringPool中该字符串的引用。