一、final关键字

1.final类是不能被继承的,所以也就没有子类了。例子如下:会报错Java关键字 final和static_final

2.final 方法 顺便复习下重载和重写

2.1 重载例子:

public  class TestFinalClass {

    public static void main(String args[]){

       

    }

    public void add(int i){

        System.out.print("parents..add...");

    }

}

class TestChildrenClass extends TestFinalClass{

     public void add(int i,int j){

          System.out.print("children...add");

          System.out.print("33333");

     }

}

2.2 重写 override

public  class TestFinalClass {

//    private String name;

    public static void main(String args[]){

       new TestChildrenClass().add(0);

    }

    public void add(int i){

        System.out.print("parents..add...");

    }

}

class TestChildrenClass extends TestFinalClass{

     public void add(int i){

          System.out.print("children...add");

          System.out.print("33333");

     }

}

2.3 如果父类不想子类重写它的某个方法就可以用final来定义该方法,例子如下

public  class TestFinalClass {

//    private String name;

    public static void main(String args[]){

       new TestChildrenClass().add(0);

    }

    public final void add(int i){

        System.out.print("parents..add...");

    }

}

class TestChildrenClass extends TestFinalClass{

     public void add(int i){//这样写会报错,无法重写

          System.out.print("children...add");

          System.out.print("33333");

     }

}

除了上面这个用处,还有个用处就是高效。编译器在遇到调用final方法时候会转入内嵌机制,大大提高执行效率。

3.final变量

public class TestFinalClass {

    public final static String s = ".......final s";

    public final int E =1; //final成员变量必须付初值

//    private String name;

    public static void main(String args[]){


    }

    public static void add(int i){

        final String m; //final非成员变量可以不用初值

        m = "...m"; //  给予初值

        m = "..sdjf";//出错  不能再给予值

    }

}

4.final参数

public class TestFinalClass {

    public static void main(String args[]){

    }

    public static void add(final int i){

        System.out.print(""+i);   //  只能使用该参数

        i = 0;//不能给予值

    }

}

二、static 关键字

1.static方法

public class TestFinalClass {

    public static void main(String args[]){

         TestChildrenClass.add(0); //可以在类创建之前引用这个static方法

    }

}

class TestChildrenClass {

     public static void add(int i){//然而是不能通过类的实例来引用的

          System.out.print("children...add");

     }

}

2.static 成员变量

public class TestFinalClass {

    public static void main(String args[]){

         String name = TestChildrenClass.name;//静态成员

    }

}

class TestChildrenClass {

     public static String name = "user";//不能通过类的实例来引用的,当用private修饰时就不可以用了

}

3.当static与final一起使用来修饰成员变量和成员方法,可简单理解为“全局常量”!
3.1 对于变量,表示一旦给值就不可修改,并且通过类名可以访问。
3.2 对于方法,表示不可覆盖,并且可以通过类名直接访问。