此两段代码的区别本人甚是不解,求高人解答!

逸花城 2016-08-24 12:07:30

class A
{
private static A a = new A();
private A(){
System.out.println("Hello World!!!");
}
};
public class Demo
{
public static void main(String[] args) throws Exception{
System.out.println("**************");
Class<?> c = A.class;
}
};

运行结果:

class A
{
private static A a = new A();
private A(){
System.out.println("Hello World!!!");
}
};
public class Demo
{
public static void main(String[] args) throws Exception{
System.out.println("**************");
Class<?> c = Class.forName("A");
}
};

运行结果:


主要分析下为什么两者的运行结果不同!
...全文
601 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ianok 2016-08-25
  • 打赏
  • 举报
回复
一个做了初始化,一个没做
sky_08_06_02 2016-08-25
  • 打赏
  • 举报
回复
逸花城 2016-08-24
  • 打赏
  • 举报
回复
引用 1 楼 NewMoons 的回复:
第一段代码只是执行了类的静态方法,没有new,所以不会执行除你调用的那个静态方法(无调用联系的)之外的所有方法。 第二段Class.forName实际是new了一个对象A,所以会完整的执行一个类所有初始化的方法,静态代码-->构造函数-->初始化成员变量.....
http://www.cnblogs.com/cunlau/p/3624878.html 感觉这个总结的很好,不知是否正确?
XxiaoxiaoL 2016-08-24
  • 打赏
  • 举报
回复
引用 1 楼 NewMoons 的回复:
第一段代码只是执行了类的静态方法,没有new,所以不会执行除你调用的那个静态方法(无调用联系的)之外的所有方法。 第二段Class.forName实际是new了一个对象A,所以会完整的执行一个类所有初始化的方法,静态代码-->构造函数-->初始化成员变量.....
+1
NewMoons 2016-08-24
  • 打赏
  • 举报
回复
第一段代码只是执行了类的静态方法,没有new,所以不会执行除你调用的那个静态方法(无调用联系的)之外的所有方法。 第二段Class.forName实际是new了一个对象A,所以会完整的执行一个类所有初始化的方法,静态代码-->构造函数-->初始化成员变量.....

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧