类初始化和非静态块 每次创建对象时都会执行非静态初始化块,这不是完全可以由构造函数来完成吗?非静态初始化有什么其他用途吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 一:初始化块——非静态初始化块 变量的赋值,有两种常用的方式。 1:变量声明中赋值。 2:构造函数中赋值。 事实上,java提供了第三种机制——初始化块。 例如:class InitBlock { //构造函数赋值 public InitBlock() { //对另一构造函数的调用,且必须为第一行 this("fff",300); bi = 200; str1 = "abc"; System.out.println("constructor method A"); } //构造函数赋值 public InitBlock(String str,int b) { this.bi = b; this.str1 = str; System.out.println("constructor method B"); } //初始化块 //初始化块赋值 { bi = 100; str1 = "string"; b = 180; System.out.println("init block~~~~"); } //初始化块 { System.out.println("second"); } private int bi; private String str1; private int ab = 10;//声明中赋值 private static int b; public static void main(String[] args) { InitBlock ib = new InitBlock(); System.out.println("bi = "+ib.bi); System.out.println(InitBlock.b); }} 关于初始化块: a.一个类可以有多个非静态初始化块初始化块,按照初始化块的顺序执行。 b.非静态初始化块是在构造类对象时执行,先执行初始化块,再执行构造主体部分。 c:非静态初始化块能对静态变量,实例变量进行初始化 构造器的具体处理步骤: 1)所有数据域被初始化为默认值(0、false或null)。2)按照在类声明中出现的次序,依次执行所有域初始化语句和初始化块。3)如果构造器第一行调用了第二个构造器,则执行第二个构造器主体。4)执行这个构造器的主体。 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/winer2008/archive/2009/07/12/4341568.aspx GUI小程序中的奇怪现象 求高手解答 在Eclipse中可以执行 但在dos下不能编译! Ext 动态显示时间 JTAble与JScrollpane滚动条显示问题 如何交换一个数两位 JAVA如何动态从LINUX下获取文件! 如何改变默认观感? 我是新手,关于inner class的问题 一个关于线程的简单问题~``帮忙看看~`谢谢(在线) 关于java JTextPane 字体改变颜色算法问题 java 动态代理出错,求指教 下面的程序有点不懂~请帮忙解释下,另外wait() ,nofity(),sleep()的区别 jbuilder导包的快捷键是什么
变量的赋值,有两种常用的方式。
1:变量声明中赋值。
2:构造函数中赋值。
事实上,java提供了第三种机制——初始化块。
例如:
class InitBlock {
//构造函数赋值
public InitBlock() {
//对另一构造函数的调用,且必须为第一行
this("fff",300);
bi = 200;
str1 = "abc";
System.out.println("constructor method A");
}
//构造函数赋值
public InitBlock(String str,int b) {
this.bi = b;
this.str1 = str;
System.out.println("constructor method B");
}
//初始化块
//初始化块赋值
{
bi = 100;
str1 = "string";
b = 180;
System.out.println("init block~~~~");
}
//初始化块
{
System.out.println("second");
}
private int bi;
private String str1;
private int ab = 10;//声明中赋值
private static int b;
public static void main(String[] args) {
InitBlock ib = new InitBlock();
System.out.println("bi = "+ib.bi);
System.out.println(InitBlock.b);
}
}
关于初始化块:
a.一个类可以有多个非静态初始化块初始化块,按照初始化块的顺序执行。
b.非静态初始化块是在构造类对象时执行,先执行初始化块,再执行构造主体部分。
c:非静态初始化块能对静态变量,实例变量进行初始化
构造器的具体处理步骤:
1)所有数据域被初始化为默认值(0、false或null)。2)按照在类声明中出现的次序,依次执行所有域初始化语句和初始化块。3)如果构造器第一行调用了第二个构造器,则执行第二个构造器主体。4)执行这个构造器的主体。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/winer2008/archive/2009/07/12/4341568.aspx