现在的位置: 首页 > 综合 > 正文

java中类在初始化时发生的事情

2018年05月11日 ⁄ 综合 ⁄ 共 1347字 ⁄ 字号 评论关闭

 /*

 * 2011年3月17日
* Hacked by Younger.shen
* http://www.hack2me.com
* younger.x.shen@gmail.com
*/
 
今天在火车上看的一页左右的<Think in java>,到教室以后做了做实验,通过过程和结果可以看出来
java的严谨性还是很高的,特别是在基本数据类型以及基本数据类型与其相应的包装类方面,在设计
上确实严谨,其次就是在自定义类的初始化方面,这里要说的初始化并非在显示定义一个已经被设计
好的类的时候,而是在文件通过编写好以后进行 javac -d . test.java在进行编译的时候所进行的初始化
工作。
我们假定在一个文件中设计了2个类,分别是test1和test2,这两个类分别有自己的构造方法以及一般方法
还有我们所说的静态块,设计到的除了自定义的这2个类之外,其余都是基本数据类型;在类被编译的时候会
涉及到一些细微之处,如果新手不注意的话往往会在编写测试程序的时候调试很长时间。
其实我想说的就是基本数据类型以及其他的类在被引用初始化的时候的类内部数据的初始化顺序问题,现在来
看我们做实验的例子好了啊
class test1{
{
System.out.println("test1静态块被初始化");
}
private int testt;
public test1()
{
 
System.out.println("test1无参构造方法"+testt);
System.out.println("test1无参构造方法"+(int)testt+10);
}
public test1(int i)
{
System.out.println("test1有参构造方法 "+i);
}
   public void mark()
   {
   System.out.println("test1的mark方法被调用");
   }
}
class test2{
public test2(){System.out.println("test2无参构造器被执行");}
{
System.out.println("test2的静态块被执行");
}
test1 tt1=new test1();
}
public class testclass{
public static void main(String[] args)
{
test1 t1=new test1();
test1 t2=new test1(100);
   t2.mark();
test2 tt1=new test2();
}
}
 
是的确实这是一个很简单的例子,我喜欢设计而不是喜欢埋头钻研算法,我喜欢<big bang theory>
而不是十分经常读科幻小说,所以我很长时间都在写类似 int a; double b;之类的简单程序;
现在你可以先推理一下,到底他的输出到是是什么样子的,注意了不要只盯着2个自定义类的构造器,
同时也要看准静态初始块是怎么回事,你看出来了吗。
其实java在类中的初始化工作已经做的十分到位了,基于在类中的数据域的先后顺序,在类进行初始化
操作的时候进行自动的初始化,基本数据类型被初始化成0 ,/u000,以及 false,而且也包括初始化块中的
数据同时也会被初始化,最重要的是,这些初始化操作都是在改类的构造器被调用之前发生的,这是一
点特殊的情况,在这里做一下笔记!

抱歉!评论已关闭.