- 浏览: 129216 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
feng_tai_jun:
sudo openconnect -b -u MyUserNa ...
ubuntu 下使用openconnect 连接vpn
java初始化属性 (转)
- 博客分类:
- java
转自:http://www.cnblogs.com/miniwiki/archive/2011/03/25/1995615.html
1 无继承情况下的Java初始化顺序:
class Sample
{
Sample(String s)
{
System.out.println(s);
}
Sample()
{
System.out.println("Sample默认构造函数被调用");
}
}
class Test{
static Sample sam=new Sample("静态成员sam初始化");
Sample sam1=new Sample("sam1成员初始化");
static{
System.out.println("static块执行");
if(sam==null)System.out.println("sam is null");
sam=new Sample("静态块内初始化sam成员变量");
}
Test()
{
System.out.println("Test默认构造函数被调用");
}
}
public static void main(String str[])
{
Test a=new Test();
}
输出结果为:
静态成员sam初始化 -----静态成员初始化
static块执行 -----静态块被执行
静态块内初始化sam成员变量 ----静态块执行
sam1成员初始化 -----普通成员初始化
Test默认构造函数被调用 -----构造函数执行
由此可以得出结论:
a 静态成员变量首先初始化(注意,Static可以看做一个静态成员,其执行顺序和其在类中申明的顺序有关)
b 普通成员初始化
c 执行构造函数。
对于静态成员(static块可以看成普通的一个静态成员,其并不一定在类初始化时首先执行)和普通成员,其初始化顺序只与其在类定义中的顺序有关,和其他因素无关。
例如下面的例子:
class Test{
static{
System.out.println("static 块 1 执行");
}
static Sample staticSam1=new Sample("静态成员staticSam1初始化");
Sample sam1=new Sample("sam1成员初始化");
static Sample staticSam2=new Sample("静态成员staticSam2初始化");
static{
System.out.println("static 块 2 执行");
}
Test()
{
System.out.println("Test默认构造函数被调用");
}
Sample sam2=new Sample("sam2成员初始化");
}
则结果为:
static 块 1 执行
静态成员staticSam1初始化
静态成员staticSam2初始化
static 块 2 执行
--------静态成员
sam1成员初始化
sam2成员初始化
--------普通成员
Test默认构造函数被调用
--------构造函数
2 Java继承情况下的初始化顺序:
class Test{
static{
System.out.println("父类static 块 1 执行");
}
static Sample staticSam1=new Sample("父类 静态成员staticSam1初始化");
Sample sam1=new Sample("父类 sam1成员初始化");
static Sample staticSam2=new Sample("父类 静态成员staticSam2初始化");
static{
System.out.println("父类 static 块 2 执行");
}
Test()
{
System.out.println("父类 Test默认构造函数被调用");
}
Sample sam2=new Sample("父类 sam2成员初始化");
}
class TestSub extends Test
{
static Sample staticSamSub=new Sample("子类 静态成员staticSamSub初始化");
TestSub()
{
System.out.println("子类 TestSub 默认构造函数被调用");
}
Sample sam1=new Sample("子类 sam1成员初始化");
static Sample staticSamSub1=new Sample("子类 静态成员staticSamSub1初始化");
static{System.out.println("子类 static 块 执行");}
Sample sam2=new Sample("子类 sam2成员初始化");
}
执行结果:
父类 static 块 1 执行
父类 静态成员staticSam1初始化
父类 静态成员staticSam2初始化
父类 static 块 2 执行
--------父类静态成员初始化
子类 静态成员staticSamSub初始化
子类 静态成员staticSamSub1初始化
子类 static 块 执行
-------子类静态成员初始化
父类 sam1成员初始化
父类 sam2成员初始化
父类 Test默认构造函数被调用
-------父类普通成员初始化和构造函数执行
子类 sam1成员初始化
子类 sam2成员初始化
子类 TestSub 默认构造函数被调用
-------父类普通成员初始化和构造函数执行
由此得出Java初始化顺序结论:
1 继承体系的所有静态成员初始化(先父类,后子类)
2 父类初始化完成(普通成员的初始化-->构造函数的调用)
3 子类初始化(普通成员-->构造函数)
发表评论
-
java 自定义Annotation
2012-01-19 14:14 1643Annotation 注解,个人简单的理解就是加在方法,类,变 ... -
HashSet hashCode equals
2011-10-09 09:52 1071在使用HashSet 的时候往往需要重写他的equals和ha ... -
(转)修改eclipse中的默认maven2资源仓库保存地址(很有用的)
2011-07-11 16:52 1056转:http://blog.csdn.net/doublel/ ... -
HTTP请求头与应答头参数(转)
2011-03-19 15:50 3750HTTP请求头 Accept:浏览器 ... -
使用json必须的包
2011-02-17 15:25 1217commons-logging-1.0.4.jar ... -
搞懂java中的synchronized关键字(转)
2011-01-29 17:16 835转载:http://www.learndiary. ... -
JAVA中的指针,引用及对象的clone(转)
2011-01-29 17:04 803http://www.ibm.com/developerwor ... -
Java中static、this、super、final用法(转载)
2011-01-22 18:35 698http://developer.51cto.com/art/ ... -
JAVA对象的初始化过程
2011-01-22 17:58 763http://blog.mcuol.com/User/mcuo ... -
(转载)Java Exception处理之最佳实践
2011-01-05 18:36 672关键字: java/java编程 本文是Exception ... -
(转)异常设计----何使用异常的原则
2011-01-05 18:32 712(转)异常设计----何使用 ... -
java GC 理解(转载)
2010-12-30 08:34 909转载地址:http://hannoi200 ... -
使用JDK的javap工具,反汇编由javac编译器生成的.class文件
2010-12-16 09:15 1582用javap -c Test > Test.bc ... -
java 进行类初始化的情况
2010-12-16 09:01 827java类通过装载,连接,解析使一个类型可以被使用,如果遇到以 ... -
字符串 字符指针(1)
2010-12-14 11:42 707char *p1="abcd",*p ... -
jar命令设置jar 主类
2010-12-12 17:49 1432在类文件目录下 jar -cvfe textDeal. ... -
Java向文件中写入换行符(回车符)
2010-12-12 16:06 2057linux和unix系统的换行是"\n", ...
相关推荐
static所声明的变量在Java中有一个初始化的先后顺序,带着这个问题接下来我们就来进行Java中static静态变量的初始化完全解析:
(1) 定义一个Animal类,其中包括昵称、性别、体重属性,构造函数初始化各属性,显示各属性的成员函数、修改属性的成员函数。实现并测试这个类。 (2) 从上题的类中派生出Dog类,添加年龄属性。重载相应的成员方法...
1.static修饰一个属性字段,那么这个属性字段将成为类本身的资源,public修饰为共有的,可以在类的外部通过test.a来访问此属性;在类内部任何地方可以使用.如果被修饰为private私有,那么只能在类内部使用.
一维数组初始化 目录 课程导入 掌握一维数组元素的访问方法 掌握一维数组的初始化方法 熟知一维数组的长度属性 掌握输出一维数组所有元素值的方法 访问数组元素 0.0 0.0 0.0 0.0 0.0 [0] [1] [2] [3] [4] myList 首...
6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用...
在对象的创建阶段,Java对象实体类会根据预设的属性字段和初始值进行初始化。这些属性字段通常定义在类的声明中,并使用关键字进行描述。在实例化一个对象时,Java虚拟机会根据类的定义分配相应的内存空间,并将属性...
《Java核心技术系列:Java虚拟机规范(Java SE 8版)》完整而准确地阐释了Java虚拟机各方面的细节,围绕Java虚拟机整体架构、编译器、class文件格式、加载、链接与初始化、指令集等核心主题对Java虚拟机进行全面而...
实验二Java面向对象程序设计 (1)定义表示课程的类Course,课程的属性包括课程名、编号、先修课号;方法包括设置课程名、设置编号、设置先修课号,以及打印课程名、课程号、先修课号。编写主程序,创建Course类的对象...
6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用...
6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用...
内容概要: 本文详细介绍了Java中的构造方法...建议通过编写简单的Java程序,并使用构造方法来创建对象和初始化属性,加深理解和掌握构造方法的使用。 如有疑问,可以参考Java官方文档或搜索相关资料,进一步扩展学习。
6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用...
6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用...
6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用...
static称为静态修饰符,它可以修饰类中的属性和方法。 1.静态属性 被static修饰的属性称为静态属性,这类属性一个本质的特点是:它们是类的属性,而不属于任何一个类的具体对象。换句话说,对于该类的任何一...
《Java虚拟机规范(Java SE 7版)》是Java领域最...第5章定义了Java虚拟机启动以及类和接口的加载、链接和初始化过程。第6章阐释并列举了Java虚拟机指令集。第7章提供了一张以操作码值为索引的Java虚拟机操作码助记符表。
Animal类提供了一个构造方法,用于初始化这两个属性,并提供了相应的getter和setter方法,用于访问和修改这两个属性。Animal类还定义了一个抽象方法showInfo,用于展示动物的信息,这个方法将由子类实现。 Lion类...
类的初始化 成员初始化 构造器初始化初始化顺序 数组初始化 对象的销毁 对象作用域 this 和 super 访问控制权限继承 多态组合代理 向上转型static final 接口和抽象类接口 抽象类异常 认 识 Exception 什么是 ...
《Java虚拟机规范(Java SE 7版)》是Java领域最...第5章定义了Java虚拟机启动以及类和接口的加载、链接和初始化过程。第6章阐释并列举了Java虚拟机指令集。第7章提供了一张以操作码值为索引的Java虚拟机操作码助记符表。