this与super关键字static

2020/1/1

点击勘误issues (opens new window),哪吒感谢大家的阅读

# this与super关键字static

调用当前类的方法;

this() 可以调用当前类的构造方法;

this 可以作为参数在方法中传递;

this 可以作为参数在构造方法中传递;

this 可以作为方法的返回值,返回当前类的对象。

“super 关键字的用法主要有三种。”

指向父类对象;

调用父类的方法;

super() 可以调用父类的构造方法。

# static

如果在声明变量的时候使用了 static 关键字,那么这个变量就被称为静态变量。静态变量只在类加载的时候获取一次内存空间,这使得静态变量很节省内存空间。

“静态方法有以下这些特征。”

静态方法属于这个类而不是这个类的对象;

调用静态方法的时候不需要创建这个类的对象;

静态方法可以访问静态变量。

public class StaticBlock {
	static {
		System.out.println("静态代码块");
	}

	public static void main(String[] args) {
		System.out.println("main 方法");
	}
}

“静态代码块通常用来初始化一些静态变量,它会优先于 main() 方法执行。”

既然静态代码块先于 main() 方法执行,那没有 main() 方法的 Java 类能执行成功吗?

“Java 1.6 是可以的,但 Java 7 开始就无法执行了。”

“静态代码块在初始集合的时候,真的非常有用。在实际的项目开发中,通常使用静态代码块来加载配置文件到内存当中。”

public class Singleton {
	private Singleton() {}

	private static class SingletonHolder {
		public static final Singleton instance = new Singleton();
	}

	public static Singleton getInstance() {
		return SingletonHolder.instance;
	}
}

“需要注意的是。第一,静态内部类不能访问外部类的所有成员变量;第二,静态内部类可以访问外部类的所有静态变量,包括私有静态变量。第三,外部类不能声明为 static。”

# final 关键字

“被 final 修饰的变量无法重新赋值。换句话说,final 变量一旦初始化,就无法更改。”

“被 final 修饰的方法不能被重写。如果我们在设计一个类的时候,认为某些方法不应该被重写,就应该把它设计成 final 的。”

# 为什么 String 类要设计成 final 吗?

为了实现字符串常量池

为了线程安全

为了 HashCode 的不可变性

# instanceof关键字

用意也非常简单,判断对象是否符合指定的类型,结果要么是 true,要么是 false。在反序列化的时候,instanceof 操作符还是蛮常用的,因为这时候我们不太确定对象属不属于指定的类型,如果不进行判断的话,就容易抛出 ClassCastException 异常。

先用 instanceof 进行类型判断,然后再把 obj 强制转换成我们期望的类型再进行使用。

上次更新: 2024/12/10 06:46:48