logo

Java关键字

final、finally与finalize区别?

  1. final可以修饰类、变量、方法
  • 修饰类表示该类不能被继承
  • 修饰方法表示该方法不能被重写
  • 修饰变量表示该变量是一个常量,不可变,在编译阶段会存入常量池中
  1. finally一般作用在try-catch代码块中,在处理异常的时候,通常我们将一定要执行的代码方法finally代码块

中,表示不管是否出现异常,该代码块都会执行,一般用来存放一些关闭资源的代码。

  1. finalize是一个方法,属于Object类的一个方法,而Object类是所有类的父类,该方法一般由垃圾回收器来调用,当我们调用System.gc()方法的时候,由垃圾回收器调用finalize(),回收垃圾,一个对象是否可回收的最后判断。

聊聊this、super和static关键字

  1. this关键字,表示当前对象的引用
public class Member {
    String name;
    public void setName(String name) {
        this.name = name;
    }
}

需要注意,this关键字只能出现在非static修饰的代码

  1. super关键字,是父类对象的一个引用,只有在继承关系中,才会使用这个关键字。super可以理解为是指向自己超(父)类对象的一个"指针",而这个超类指的是离自己最近的一个父类
class Father {

    void message() {
        System.out.println("This is Father");
    }

}

class Son extends Father {
    void message() {
        System.out.println("This is son");
    }

    void display() {
        message();
        super.message();
    }

}

class Main {
    public static void main(String args[]) {
        Son s = new Son();
        s.display();
    }

}

结果:

This is son

This is father

  1. static关键字,其主要意义是在于创建独立于具体对象的域变量或者方法。以致于即使没有创建对象,也能使用属性和调用方法!被static修饰的变量或者方法是独立于该类的任何对象,即这些变量和方法不属于任何一个实例对象,而是被类的实例对象所共享。

被static修饰的变量或者方法是优先于对象存在的,也就是说当一个类加载完毕之后,即便没有创建对象,也可以去访问

  1. 能否在static环境中访问非static变量?

不能, static方法中不能使用this和super关键字,不能调用非static方法,只能访问所属类的静态成员和静态方法,因为当static方法被调用时,这个类的对象可能还没被创建,即使已经被创建了,也无法确定调用哪个对象的方法。同理,static方法也不能访问非static类型的变量

  1. this与super关键字的区别
  • this 表示当前对象的引用,可以理解为指向对象本身的一个"指针",但是JAVA中是没有指针这个概念的。
  • super 表示自己超(父)类对象的引用,可以理解为是指向自己超(父)类对象的一个指针,而这个超类指的是离自己最近的一个父类
  • super()在子类中调用父类的构造方法,this()在本类内调用本类的其它构造方法。
  • this和super不能同时出现在一个构造函数里面,因为this必然会调用其它的构造函数,其它的构造函数必然也会有super语句的存在,所以在同一个构造函数里面有相同的语句,就失去了语句的意义,编译器也不会通过。
  1. this与super关键字的相同点
  • super()和this()均需放在构造方法内第一行
  • this()和super()都指的是对象,所以,均不可以在static环境中使用。包括:static变量,static方法,static语句块

拓展可见:谈谈JAVA中对象和类、this、super和static关键字

Java 有没有 goto

Java 中确实有 goto, 但却是保留的关键字, 所以并不能实际使用