JAVA 关键字

参考博客:https://www.cnblogs.com/yan-linxi/p/7977947.html

JAVA的关键字都是小写

(1)简述Java访问修饰符

private: 在同一类内可见,不能修饰类

default: 默认访问修饰符,在同一包内可见
protected : 对同一包内的类和所有子类可见,不能修饰类
public: 对所有类可见

(2)类成员变化修饰符

参考链接:https://skydai.github.io/2020/11/21/Java%E5%85%B3%E9%94%AE%E5%AD%97static%E5%92%8Cfinal/

static

通常情况下, 类成员需要通过它的类的对象访问,如果一个成员被声明为static,它能够在它的类的任何对象创建之前被访问, 而不用引用任何对象。
声明为static的一个类变量或方法,所有的该类的实例都会共享这个static变量或方法。

static修饰变量

静态变量在内存中只有一份, jvm只为静态变量分配一次内存,随着类的加载而加载到静态方法区内存中。由于静态变量属于类,和类的实例无关, 所以可以直接通过类名进行访问。

static修饰方法

  • 只能调用其他的static方法
  • 只能访问static数据
  • 不能以任何方式引用this 和super
  • static 方法独立于任何实例, 所以static方法必须被实现,不能是抽象的absract,在static方法里引用任何的实例变量都是违法的。

static修饰代码块。

JVM在加载类的时候会执行static代码块。static代码块常用于初始化静态变量。static代码块只会被执行一次。

2 final

final可以修饰非抽象类, 非抽象类成员方法和变量。使用final关键字可以声明类、成员变量和成员方法,一经声明,便不可继承、不可修改和不能覆盖。

final修饰变量

修饰的变量是基本数据类型则值不能改变,修饰的变量是引用类型则不能再指向其他对象。一个变量可以声明为final, 目的是阻止它的内容被修改, 这意味着声明final变量的时候, 必须对其进行初始化,这种用法有点类似于c++的const

按照编码约定, final变量的所有字符选择大写,final修饰的变量实际中不占用内存, 它实质上是一个常数。

final修饰方法

被final修饰的方法可以被子类继承, 但不能被子类的方法覆盖。 如果一个类不想让其子类覆盖它的某个成员方法, 就可以用 final关键字修饰该方法。

使用final修饰成员方法除了不想让子类覆盖外, 还有一个原因就是高效,Java编译器在遇到final修饰的方法的时候会转入内嵌机制, 提高执行效率。

内嵌机制 ,类似于c++ inline, 调用方法的时候直接将方法的主题插入到调用处, 而不用去访问类或者对象, 这样会提高50%左右效率。然而,如果方法主体比较庞大, 
且多处被调用将导致主体代码膨胀, 同时也产生效率问题, 所以需要慎用。
class Base {
    private final void method() {
        System.out.println("In Base...");
    }
}
class Sub extends Base {
    public void method() {
        System.out.println("In Sub...");
    }
}

本例中,基类方法 是private ,他在子类中是不可见的,故子类中的 同名方法 不再是覆盖,相当于一个新的方法名。

final修饰类

final修饰的类不能被继承。

(3) final、finally和finalize的区别是什么?

  1. final用于声明属性、方法和类,分别表示属性不可变、方法不可覆盖、类不可继承。
  2. finally作为异常处理的一部分,只能在try/catch语句中使用,finally附带一个语句块用来表示这个语句最终一定被执行,经常被用在需要释放资源的情况下。
  3. finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的finalize()方法。当垃圾回收器准备好释放对象占用空间时,首先会调用finalize()方法,并在下一次垃圾回收动作发生时真正回收对象占用的内存。

 

原文地址:https://www.cnblogs.com/tingtin/p/15686218.html