这里写目录标题
一.final关键字
final关键字用来修饰引用、方法、类。
如果引用为基本数据类型,则该引用为常量,该值无法修改。
如果引用为引用数据类型,比如对象、数组,则该对象、数组本身可以修改,但指向该对象或数组的地址的引用不能修改。
如果引用时类的成员变量,则必须当场赋值,否则编译会报错。
final修饰方法和类时,都是无法继承的。
二.static关键字
static修饰的成员变量和方法,从属于类;
普通变量和方法从属于对象。
在静态方法中不能访问非静态成员方法和非静态成员变量,但是在非静态成员方法中是可以访问静态成员方法和静态成员变量。
2.1、static变量
static变量也称为静态变量,静态变量和非静态变量的区别:
静态变量被所有对象共享,在内存中只有一个副本,在类初次加载的时候才会初始化。
非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。
2.2、static块
static块可以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次。
2.3、static方法
2.4、static内部类
静态内部类也是定义在另一个类里面的类,只不过在类的前面多了一个关键字static。
静态内部类是不需要依赖于外部类的,这点和类的静态成员属性有点类似,并且它不能使用外部类的非static成员变量或者方法。这点很好理解,因为在没有外部类的对象的情况下,可以创建静态内部类的对象,如果允许访问外部类的非static成员就会产生矛盾,因为外部类的非static成员必须依附于具体的对象。
三.Transient关键字
将不需要序列化的属性前添加关键字transient,序列化对象的时候,这个属性就不会被序列化。
transient的作用就是把这个字段的生命周期仅存于调用者的内存中而不会写到磁盘里持久化。
四.Collection接口
接口中有两个特殊的方法。default和static方法。
public interface CollectionInf {
public abstract void test1();
public default void test2(){
System.out.println("CollectionInf_test2");
};
public static void test3(){
System.out.println("CollectionInf_static_test3");
}
}
1、default方法
当一个接口添加新方法时,需要所有的实现类都重写新方法,影响到了已有的实现类,可能导致应用崩溃。default默认方法可以不强制重写,也不会影响到已有的实现类。
当一个实现类实现了多个接口,多个接口里都有相同的default默认方法时,实现类必须重写该默认方法,否则编译错误。
当一个实现类实现了一个接口,实现类没必要重写该默认方法,可以直接现有的接口中方法。
2、static方法
不需要实例化,直接使用,节省内存空间。
在Java中,如果父类中含有一个static静态方法,且在子类中也含有一个返回类型、方法名、参数列表均与之相同的静态方法,那么该子类实际上只是将父类中的该同名方法进行了隐藏,而非重写。换句话说,父类和子类中含有的其实是两个没有关系的方法,它们的行为也并不具有多态性。