final 关键字

    java提供了以关键字给我们使用,可以修饰父类成员方法,让其只能被子类使用,不能重写。
    final: 最终的,不可改变的
点击查看代码
class Fu7 {
    public final void fun1(){
        System.out.println("江川是世界上最帅且有钱的男人! ");
    }
}

class Zi7 extends Fu7 {
//    @Override
//    public void fun1(){
//        System.out.println("李刚是下一任最帅且有钱的男人!");
//    }
}

public class FinalDemo1 {
    public static void main(String[] args) {
        Zi7 zi7 = new Zi7();
        zi7.fun1();
    }
}
    final的用法:可以修饰类,变量,方法
        类:若修饰类,该类不能被继承
        变量:修饰变量,变量变常量,不能修改被final变量的值,自定义常量
        方法:若修饰方法,方法不能被子类重写
点击查看代码
class Fu8 {
    final int a = 10;
    int b = 10;

}
class Zi8 extends Fu8 {
    public void fun1(){
//        a = 20;
        System.out.println(a);
    }
}
public class FinalDemo2 {
    public static void main(String[] args) {
//        Zi8 zi8 = new Zi8();
//        zi8.fun1();

        final Fu8 f = new Fu8(); // 指的是地址值不能被修改
        System.out.println(f.a);
        System.out.println(f.b);
//        f.a = 100;
        f.b = 100;
        System.out.println(f.b);

//        f = new Fu8();
    }
}

被final所修饰的成员变量,必须要在构造方法结束之前给值

点击查看代码
class Fu9 {
        {
        final int a;//1             叫构造代码块
    }
    final int a = 10;//1
    //final int A;   2
    Fu9(){
        //A = 100;    2
    }

}

public class FinalDemo2 {
    public static void main(String[] args) {

    }
}
    代码块:在java程序中,使用{}括起来的代码,代码块

    在不同的位置,以及使用不同的修饰词写的代码块,分为不同种类的代码块。
    局部代码块:在方法中使用带括号括起来的代码段,整体称之为叫做局部代码块,主要作用是限定变量的作用域
    构造代码块:写法和局部代码块的写法是一样的,但是构造代码块是写在  类中 方法外 的位置
        随着构造方法的调用而执行,执行顺序是 构造代码块->构造方法
    静态代码块:写法上在前两种代码块的写法上,前面是使用static进行修饰,在类中方法外编写
        是在程序运行之前,加载的时候执行,只会加载一次,静态代码块只会在程序运行之前有且仅执行一次!
        同一个类中静态代码块之间的执行顺序是自上而下
        静态代码块 -> 构造代码块 -> 构造方法
    同步代码块 :

点击查看代码
public class CodeDemo1 {

    CodeDemo1(){
        System.out.println("这是无参的构造方法。。。。");
    }

    //静态代码块
    static {
        System.out.println("这是静态代码块1。。");
    }

    //构造代码块
    {
        System.out.println("这是构造代码块。。。");
    }

    //静态代码块
    static {
        System.out.println("这是静态代码块2。。。");
    }

    public static void main(String[] args) {
//        {
//            //局部代码块
//            int a = 10;
//            System.out.println(a);     执行完静态代码块执行(1)main方法里的局部代码块(1),再执行main方法外的局部代码快
//        }
//
//        {
//            //局部代码块
//            int a = 20;
//            System.out.println(a);
//        }

        CodeDemo1 codeDemo1 = new CodeDemo1();
        CodeDemo1 codeDemo2 = new CodeDemo1();


    }
}

posted @ 2024-09-25 16:24  wang_jun  阅读(21)  评论(0)    收藏  举报