final与static

1.final修饰类

    final修饰类不可以被继承

2.final修饰方法

    子类继承父类,不可以重写父类final修饰方法

    如果父类的方法是public修饰的,子类可以继承到此方法,子类重写此方法,会导致编译报错

     如果父类的方法是private修饰的,子类不可以继承到此方法,子类可以写一个和父类final方法一样的方法,此方法属于子类,编译不会报错

3.final修饰变量

    final修饰的变量表示常量,值不可以改变

    final修饰一个基本类型的数据时,初始化之后,值不可以被改变

    final修饰一个引用类型时,初始化之后,不可以指向其他对象,但是对象的值可以改变



1.static变量

    静态变量,可以被所有对象共享,静态变量在类加载的时候被加载,分配内存,在内存中只有一个,static不可以修饰局部变量。

2.static方法

    静态方法中无法直接调用非静态方法和非静态变量,而非静态方法可以直接点用静态变量和静态方法

3.静态代码块

    加载类之前,需要进行的初始化操作,参数或对象的初始化

当一个类被主动使用时,Java虚拟就会对其初始化,如下六种情况为主动使用:

当创建某个类的新实例时(如通过new或者反射,克隆,反序列化等)

当调用某个类的静态方法时

当使用某个类或接口的静态字段时

当调用Java API中的某些反射方法时,比如类Class中的方法,或者java.lang.reflect中的类的方法时

当初始化某个子类时

当虚拟机启动某个被标明为启动类的类(即包含main方法的那个类)

4.静态导包

    当我们使用import static staticpkg.Man.*;时,在不与本类方法名冲突的前提下,我们可以在本类中直接使用Man类中的static方法,就像是本类自己的方法一样。但是相应的其他静态参数和一些非静态参数和非静态方法就无法直接调用了。

5.静态内部类

    静态内部类可以存在静态成员,非静态内部类不可以有静态成员。

    静态内部类可以访问外部类的静态成员,非静态内部类可以访问外部类的所有成员。

    

你可能感兴趣的:(final与static)