Java关键字
final、finally与finalize区别?
final
可以修饰类、变量、方法
- 修饰类表示该类不能被继承
- 修饰方法表示该方法不能被重写
- 修饰变量表示该变量是一个常量,不可变,在编译阶段会存入常量池中
finally
一般作用在try-catch代码块中,在处理异常的时候,通常我们将一定要执行的代码方法finally代码块
中,表示不管是否出现异常,该代码块都会执行,一般用来存放一些关闭资源的代码。
finalize
是一个方法,属于Object类
的一个方法,而Object类
是所有类的父类,该方法一般由垃圾回收器来调用,当我们调用System.gc()
方法的时候,由垃圾回收器调用finalize()
,回收垃圾,一个对象是否可回收的最后判断。
聊聊this、super和static关键字
- this关键字,表示当前对象的引用
public class Member {
String name;
public void setName(String name) {
this.name = name;
}
}
需要注意,this关键字只能出现在非static修饰的代码
- 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
- static关键字,其主要意义是在于创建独立于具体对象的域变量或者方法。以致于即使没有创建对象,也能使用属性和调用方法!被static修饰的变量或者方法是独立于该类的任何对象,即这些变量和方法不属于任何一个实例对象,而是被类的实例对象所共享。
被static修饰的变量或者方法是优先于对象存在的,也就是说当一个类加载完毕之后,即便没有创建对象,也可以去访问
- 能否在static环境中访问非static变量?
不能, static方法中不能使用this和super关键字,不能调用非static方法,只能访问所属类的静态成员和静态方法,因为当static方法被调用时,这个类的对象可能还没被创建,即使已经被创建了,也无法确定调用哪个对象的方法。同理,static方法也不能访问非static类型的变量
- this与super关键字的区别
- this 表示当前对象的引用,可以理解为指向对象本身的一个"指针",但是JAVA中是没有指针这个概念的。
- super 表示自己
超(父)类
对象的引用,可以理解为是指向自己超(父)类
对象的一个指针,而这个超类指的是离自己最近的一个父类 - super()在子类中调用父类的构造方法,this()在本类内调用本类的其它构造方法。
- this和super不能同时出现在一个构造函数里面,因为this必然会调用其它的构造函数,其它的构造函数必然也会有super语句的存在,所以在同一个构造函数里面有相同的语句,就失去了语句的意义,编译器也不会通过。
- this与super关键字的相同点
- super()和this()均需放在构造方法内第一行
- this()和super()都指的是对象,所以,均不可以在static环境中使用。包括:static变量,static方法,static语句块
拓展可见:谈谈JAVA中对象和类、this、super和static关键字
Java 有没有 goto
Java 中确实有 goto
, 但却是保留的关键字, 所以并不能实际使用