加我微信拉你进高质量java群
Java面试(1)
$.初始化块,静态初始化块(减少多个构造器内的重用代码)
代码初始化块是类的成员之一,每次类的创建都会调用它。(本质上是一个代码块或者方法体)
{
System.out.println(“普通初始化块”);
}
static{
System.out.println(“静态初始化块”);
}
普通初始化快:创建对象时隐式调用 (只能初始化普通的变量)
静态初始化块:类加载时隐式调用 (只能初始化静态变量)
静态初始化块只调用一次,而普通初始化块可以调用多次,随着对象的创建而加载
一个类中可以有多个初始化块,静态初始化块的执行早于普通初始化代码块,同类型按照定义的先后顺序
初始化块的执行早于构造器的执行。
$.finalize
Finalize是Object类的一个方法,在垃圾回收器执行的时候,会调用被回收对象的finalize方法,可以覆盖此方法来实现对其他资源的回收。一旦垃圾回收器准备好释放对象占用的空间,将首先调用finalize()方法,并且在下一次垃圾回收时,才会真正回收对象占用的内存。
$.不能继承的类
final修饰的类,(在JDK中,String,StringBuffer等都是基本类型,所以String,StringBuffer等类是不能继承的。)
$.assert的作用
断言作为一种软件调试的方法,提供了一种在代码中进行正确性检查的机制,主要的作用是对一个boolean进行检查。
Assert检查默认关闭
assert 有两种表达式,分别为assert experssional1 和 assert expression1:expression2
其中expression1 表示的是一个布尔表达式,expression2表示一个基本类型或者是一个对象。
使用assert需要启用,在命令行进行调试。
assert的应用范围,检查程序的不变量,检查输入参数时都有效,检查函数结果是否有效,检查程序不变量,虽然assert的功能与if类似。但是二者存在着本质的区别。
Assert是用来调试程序的,如果用assert控制了程序的业务流程,调试结束后,去掉assert就相当于修改了代码原有的逻辑。
(java中使用的是关键字实现的assert,而c语言中时使用的库函数,c语言中的assert是在编译时开启,为java中是在运行时开启。)
$.static 变量
Static 变量不能在方法体中定义,因为,方法体中的变量为局部变量,局部变量存储在动态存储区,静态变量存储在静态存储区,可以认为规定静态变量不能定义在方法体内部。
Static方法中不能使用this和super关键字,不能调用非static方法,只能访问所属类的静态成员变量和成员方法,因为当static方法被调用的时候这个类的对象可能还没有被创建,即使已经被创建了,也无法确定调用那个对象的方法,同理static方法也不能访问非static类型的变量。
(static) 方法是一个很重要的用途是实现单例模式。为了实现这一功能,必须隐藏构造函数,由于构造函数被声明为private,外界无法直接创建这个类型的对象,只能通过该类提供的方法来获取类的对象。要达到这样的目的只能把创建对象的方法上名为static.