【编者按】网学网JAVA频道为大家收集整理了“java基础之static关键字和final关键字“提供大家参考,希望对大家有所帮助!
1、 Static关键字:可以用于修饰属性,也可以用于修饰方法,还可以用于修饰类2、 Static用来修饰属性:无论一个类生成了多少个对象,所有这些对象共同使用唯一一份静态的成员变量;一个对象对该静态成员变量进行了修改,其他对象的该静态成员变量的值也会随之发生变化。如果一个成员变量是static的,那么我们可以通过类名.成员变量名的方式来使用它(java推荐使用这种方式)3、 Static修饰方法:static修饰的方法叫做静态方法。对于静态方法来说,可以使用类名.方法名的方式来访问4、 静态方法只能继承,不能重写(Override)public StaticTest2{public static void main(String[] args){M m = new N();m.output();//输出M子类无法重写父类的静态方法}}class M{public static void output(){System.out.println(“M”);}}class N{public static void output(){ System.out.println(“N”);}}1、 final关键字:final可以修饰属性、方法、类。2、 final修饰类:当一个类被final所修饰时,表示该类是一个终态,即不能被继承。3、 final修饰:当一个方法被final所修饰时,表示该方法是一个终态方法,即不能被重写(Override)4、 final修饰属性:当一个属性被fianl所修饰时,表示该属性不能被改写。5、 当final修饰一个原生数据类型时,表示该原生数据类型的值不能发生变化(比如说不能从10变为20);如果final修饰一个引用类型时,表示该引用类型不能再指向其他对象了,但该引用所指向的对象的内容是可以发生变化的。6、 先给属性赋值再去调用构造方法,对于final类型成员变量,一般来说有两种赋初值方式:A) 在声明final类型的成员变量时就赋上初值b)在声明final类型的成员变量时不赋初值,但在类的所有构造方法中都为其赋上初值1、 static代码块:静态代码块。静态代码块的作用也是完成一些初始化工作。首先执行静态代码块,然后执行构造方法。静态代码块在类被加载的时候执行,而构造方法是在生成对象的时候执行;要想调用某个类来生成对象,首先需要将类加载到java虚拟机上(JVM),然后由JVM加载这个类来生成对象2、 类的静态代码块只会执行一次,是在类被加载的时候执行的,因为每个类只会被加载一次,所以静态代码块也只会被执行一次;而构造方法则不然,每次生成一个对象的时候都会调用类的构造方法,所以new一次就会调用构造方法一次。3、 如果继承体系中既有构造方法,又有静态代码块,那么首先执行最顶层的类的静态代码块,一直执行到最底层类的静态代码块,然后再去执行最顶层类的构造方法,一直执行到最底层类的构造方法。注意:静态代码块只会执行一次。public class StaticTest1{public static void main(String[] args){/*P p = new P();P p2 = new P();*/new S();new S();} }class P{static{System.out.println(“static block”);}public P(){System.out.println(“p comstructor”);//静态代码块先于构造方法执行静态代码块当一个类的class文件加载到虚拟机上时static方法就已经执行了,构造方法是在生成对象的时候才执行}}class Q extends P{static{System.out.println(“Q static block”);}public Q(){System.out.println(“Q constructor”);}}class S extends Q{static{System.out.println(“S static block”);}public S(){System.out.println(“s constructor”);}}结果:static blockQ static blockS static blockp comstructorQ constructors constructorp comstructorQ constructors constructor 1、 不能在静态方法中访问非静态成员变量;可以在静态方法中访问静态的成员变量。可以在非静态方法中访问静态的成员变量。2、 总结:静态的只能访问静态的;非静态的可以访问一切。3、 不能再静态方法中使用this关键字4、 接口中所声明的方法都是抽象方法。接口中的方法都是public的。5、 接口中也可以定义成员变量(接口中的成员变量都是静态的static,接口中的成员变量都是final的)接口中的成员变量都是public,final,static的。6、 一个类不能既是final,又是abstract的。因为abstract主要目的是定义一种约定,让子类去实现这种约定,而final表示该类不能被继承,这样abstract希望该类可以被继承而final明确说明该类不能被继承,两者矛盾。因此一个类不能既是final的,又是abstract的。