java面试(1)static、finalize、assert。。。

 加我微信拉你进高质量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.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值