关键字(final finally finalize static)

关键字(final finally finalize static)

一、final
修饰类:表示该类不能被继承
修饰方法:表示该方法不能被重写
修饰变量:表示该变量只能被赋值一次
声明数据为常量,可以是编译时常量,也可以是在运行时被初始化后不能被改变的常量。
(1)对于基本类型,final 使数值不变;
(2)对于引用类型,final 使引用不变,表示该引用只有一次指向对象的机会,也就不能引用其它对象,但是被引用的对象本身是可以修改的。
二、finally
finally 是用于异常处理的场面,无论是否有异常抛出,都会执行
三、finalize
finalize是Object的方法,所有类都继承了该方法。 当一个对象满足垃圾回收的件,并且被回收的时候,其finalize()方法就会被调用 只被调用一次
四、static
1.静态变量
静态变量:又称为类变量,也就是说这个变量属于类的,类所有的实例都共享静态变量,可以直接通过类名来访问它;静态变量在内存中只存在一份。
实例变量:每创建一个实例就会产生一个实例变量,它与该实例同生共死。

public class A {
    private int x;         // 实例变量
    private static int y;  // 静态变量
    public static void main(String[] args) {
        // int x = A.x;  //不能直接访问非静态变量
        A a = new A();
        int x = a.x;
        int y = A.y;//可以直接通过类名访问静态成员和方法
    }
}

2.静态方法
静态方法在类加载的时候就存在了,它不依赖于任何实例。所以静态方法必须有实现,也就是说它不能是抽象方法(abstract)。
只能访问所属类的静态字段和静态方法,方法中不能有 this 和 super 关键字。

public class A {
    private static int x;
    private int y;
    public static void func1(){
        int a = x;
        // int b = y;  // Non-static field 'y' cannot be referenced from a static context
        // int b = this.y;     // 'A.this' cannot be referenced from a static context
    }
}

3.静态语句块
静态语句块在类初始化时运行一次。

public class A {
    static {
        System.out.println("123");
    }

    public static void main(String[] args) {
        A a1 = new A();
        A a2 = new A();
    }
}

4.静态内部类
非静态内部类依赖于外部类的实例,而静态内部类不需要。
当一个内部类没有使用static修饰的时候,是不能直接使用内部类创建对象,须要先使用外部类对象.new内部类对象及(外部类对象.new 内部类())
而静态内部类只需要new OuterClass.InnerClass();

public class OuterClass {
    class InnerClass {
    }

    static class StaticInnerClass {
    }

    public static void main(String[] args) {
        // InnerClass innerClass = new InnerClass(); // 'OuterClass.this' cannot be referenced from a static context
        OuterClass outerClass = new OuterClass();
        InnerClass innerClass = outerClass.new InnerClass();
        StaticInnerClass staticInnerClass = new StaticInnerClass();
    }
}

静态内部类不能访问外部类的非静态的变量和方法。
5. 静态导包
在使用静态变量和方法时不用再指明 ClassName,从而简化代码,但可读性大大降低。

import static com.xxx.ClassName.*;

6.初始化顺序
父类(静态变量、静态块)–》子类(静态变量、静态块)
父类(实例变量、实例块、构造方法)–》子类(实例变量、实例块、构造方法)

本人才疏学浅,如有错误,烦请指出,谢谢!

发布了68 篇原创文章 · 获赞 2 · 访问量 1677

猜你喜欢

转载自blog.csdn.net/weixin_45923633/article/details/105223591