Java 非静态初始化的例子
更新时间:2020年09月12日 16:27:36 作者:laosun
非静态初始化和静态初始化一模一样,只不过少了static关键字。但是如果两者共存的话,非静态初始化是比静态初始化慢一拍的。下边我们举两个例子来看一下。
在继承关系中,静态初始化、非静态初始化和构造函数的执行顺序
public class ExA {
static {
System.out.println("父类--静态代码块");
}
public ExA() {
System.out.println("父类--构造函数");
}
{
//非静态代码块
System.out.println("父类--非静态代码块");
}
public static void main(String[] args) {
new ExB();
}
}
class ExB extends ExA {
static {
System.out.println("子类--静态代码块");
}
{
//非静态代码块
System.out.println("子类--非静态代码块");
}
public ExB() {
System.out.println("子类--构造函数");
}
}
执行结果:
父类--静态代码块
子类--静态代码块
父类--非静态代码块
父类--构造函数
子类--非静态代码块
子类--构造函数
从上边的例子我们可以得出非静态代码块的初始化顺序是在静态代码块的初始化之后。
下边我们再来看另一个例子:
class Mug{
public Mug(int marker) {
System.out.println("Mug("+marker+")");
}
void f(int marker){
System.out.println("f("+marker+")");
}
}
public class Mugs {
Mug mug1;
Mug mug2;
{
//非静态代码块
mug1 = new Mug(1);
mug2 = new Mug(2);
System.out.println("mug1 & mug2 initialized");
}
Mugs(){
System.out.println("Mugs()");
}
Mugs(int i){
System.out.println("Mugs(int i)");
}
public static void main(String[] args) {
System.out.println("Inside main()");
//首先执行Mugs类中非静态代码块,创建两个对象。然后执行无参构造函数
new Mugs();
System.out.println("new Mugs() completed");
//再执行Mugs类中非静态代码块,这也是和静态代码块只初始化一次的不同之后,其次调用有参构造函数
new Mugs(1);
System.out.println("new Mugs(1) completed");
}
}
以上就是Java 非静态初始化的例子的详细内容,更多关于Java 非静态初始化的资料请关注脚本之家其它相关文章!
相关文章
Spring声明式事务@Transactional注解实现元数据驱动的事务管理
这篇文章主要为大家介绍了Spring声明式事务@Transactional注解实现元数据驱动的事务管理示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2023-10-10
Springboot @Value注入boolean设置默认值方式
这篇文章主要介绍了Springboot @Value注入boolean设置默认值方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-03-03
Java并发编程之显示锁ReentrantLock和ReadWriteLock读写锁
这篇文章主要介绍了Java并发编程之显示锁ReentrantLock和ReadWriteLock读写锁,本文讲解了ReentrantLock概况、Lock接口、Lock使用、轮询锁的和定时锁、公平性、可中断获锁获取操作等内容,需要的朋友可以参考下2015-04-04


最新评论