【Java 面向对象,2021最后一次Java面试

  • 使用了静态导入后,就可以省略类名来访问静态成员(成员变量、方法、嵌套类)

静态导入的经典使用场景:


import static java.lang.Math.PI;



public class Main {

	public static void main(String[] args) {

		System.out.println(2 * PI * 10);

		System.out.println(2 * PI * 20);

	}

} 

正确使用静态导入,可以消除一些重复的类名,提高代码可读性;

过度使用静态导入,会让读者分不清静态成员是在哪个类中定义的;

建议:谨慎使用静态导入

成员变量的初始化

===========================================================================

编译器会自动为未初始化的成员变量设置初始值;

如何手动给实例变量提供初始值?

  • 在声明中

  • 在构造方法中

  • 在初始化块中

    编译器会将初始化块复制到每个构造方法的头部(每创建一个实例对象,就会执行一次初始化块)

如何手动给类变量提供初始值?

  • 在声明中

  • 在静态初始化块中

    当一个类被初始化的时候执行静态初始化块;

    当一个类第一次被主动使用时,JVM 会对类进行初始化;

初始化块、静态初始化块



public class Person {



	static { // 静态初始化块

		System.out.println("static block");

	}

	{ // 初始化块

		System.out.println("block");

	}

	

	public Person() {}

	public Person(int age) {}

	

	public static void main(String[] args) {

		new Person();

		// static block

		// block

		new Person(20);

		// block

	}

} 

一个更复杂的示例:


public class Person {

	static {

		System.out.println("Person static block");

	}

	{

		System.out.println("Person block");

	}

	public Person() {

		System.out.println("Person constructor");

	} 

public class Student extends Person {

static {

	System.out.println("Student static block");

}

{

	System.out.println("Student block");

}

public Student() {

	System.out.println("Student constructor");

}

}




**执行顺序**:父类静态块 -> 子类静态块 -> 父类代码块 -> 父类构造器 -> 子类代码块 -> 子类构造器



public static void main(String[] args) {

new Student();

// Person static block

// Student static block

// Person block

// Person constructor

// Student block

// Student constructor

}




[](https://gitee.com/vip204888/java-p7)单例模式(Singleton Pattern)

==========================================================================================



如果一个类设计成单例模式,那么在程序运行过程中,这个类只能创建一个实例。



**饿汉式单例模式**:像饿汉一样,上来就直接创建了唯一的那个实例。(线程安全)



/*

  • 饿汉式单例模式

*/

public class Rocket {

private static Rocket instance = new Rocket();

private Rocket(){}

public static Rocket getInstance() {

	return instance;

}

}




**懒汉式单例模式**:像懒汉一样,只有用到的时候采取创建实例。(线程不安全)



/*

  • 懒汉式单例模式

*/

public class Rocket {

private static Rocket instance = null;

private Rocket(){}

public static Rocket getInstance() {

	if (instance == null) {

		instance =  new Rocket();

	} 

	return instance;

}

}




[](https://gitee.com/vip204888/java-p7)final、常量(Constant)

=====================================================================================



被 `final` 修饰的类:**不能被子类化,不能被继承**



被 `final` 修饰的方法:**不能被重写**



被 `final` 修饰的变量:**只能进行1次赋值**



常量的写法:



*   `public static final double PI = 3.14159265358979323846;`

*   `private static final int NOT_FOUND =
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值