- 浏览: 132265 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
feng_tai_jun:
sudo openconnect -b -u MyUserNa ...
ubuntu 下使用openconnect 连接vpn
转自: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 1706Annotation 注解,个人简单的理解就是加在方法,类,变 ... -
HashSet hashCode equals
2011-10-09 09:52 1138在使用HashSet 的时候往往需要重写他的equals和ha ... -
(转)修改eclipse中的默认maven2资源仓库保存地址(很有用的)
2011-07-11 16:52 1092转:http://blog.csdn.net/doublel/ ... -
HTTP请求头与应答头参数(转)
2011-03-19 15:50 3789HTTP请求头 Accept:浏览器 ... -
使用json必须的包
2011-02-17 15:25 1259commons-logging-1.0.4.jar ... -
搞懂java中的synchronized关键字(转)
2011-01-29 17:16 880转载:http://www.learndiary. ... -
JAVA中的指针,引用及对象的clone(转)
2011-01-29 17:04 850http://www.ibm.com/developerwor ... -
Java中static、this、super、final用法(转载)
2011-01-22 18:35 744http://developer.51cto.com/art/ ... -
JAVA对象的初始化过程
2011-01-22 17:58 822http://blog.mcuol.com/User/mcuo ... -
(转载)Java Exception处理之最佳实践
2011-01-05 18:36 708关键字: java/java编程 本文是Exception ... -
(转)异常设计----何使用异常的原则
2011-01-05 18:32 744(转)异常设计----何使用 ... -
java GC 理解(转载)
2010-12-30 08:34 934转载地址:http://hannoi200 ... -
使用JDK的javap工具,反汇编由javac编译器生成的.class文件
2010-12-16 09:15 1613用javap -c Test > Test.bc ... -
java 进行类初始化的情况
2010-12-16 09:01 856java类通过装载,连接,解析使一个类型可以被使用,如果遇到以 ... -
字符串 字符指针(1)
2010-12-14 11:42 752char *p1="abcd",*p ... -
jar命令设置jar 主类
2010-12-12 17:49 1512在类文件目录下 jar -cvfe textDeal. ... -
Java向文件中写入换行符(回车符)
2010-12-12 16:06 2133linux和unix系统的换行是"\n", ...
相关推荐
总结起来,Java初始化块是Java中用于对象和类初始化的重要工具,它们在不同场景下提供了一种灵活的方式来控制对象和类的状态。理解初始化块的工作原理对于编写高效且无错误的Java代码至关重要。在编写代码时,应谨慎...
例如,静态初始化块可以用来设置全局配置,而对象初始化块则用于设置每个对象实例的特有属性。 **文件名InitFiledBlockStatic.java** 这个文件名称表明它包含一个Java源代码文件,该文件可能用于演示静态和对象初始...
### Java中对象创建、初始化与引用详解 #### 一、Java对象、引用及创建过程 在Java中,对象是程序的基本单位,它包含了属性(成员变量)和行为(方法)。对象是由类创建出来的实例,而类则是一组具有相同属性和...
### Java 类中静态域、块,非静态域、块,构造函数的初始化顺序 #### 一、概述 在 Java 编程语言中,类的初始化顺序对于理解程序的行为至关重要。特别是当涉及到静态域(静态变量)、非静态域(实例变量)、静态块...
需要注意的是,bean 属性的注入是在初始化方法调用之前。因此,在使用 DependsOn 注解时,需要了解 Spring 中 bean 的加载过程,以免出现错误。 其他实现方式 除了上述两种方式外,还有其他方式可以控制 2 个 bean...
Java中的对象初始化流程是编程实践中一个非常重要的概念,它涉及到类加载、静态初始化块、实例初始化块、构造器等多个方面。下面将详细解释这个过程。 首先,对象初始化流程的起点是程序的入口点,即`main`方法。当...
"Java初始化块详解及实例代码" Java中初始化块是Java语言中的一种特殊的代码块,它可以在类加载或对象创建时执行某些操作。本文将详细介绍Java中初始化块的概念、种类、特点和应用场景。 什么是初始化块 初始化块...
在面向对象语言中(如Java、C#等),当创建一个继承自某个基类的子类对象时,会有一个特定的初始化顺序。这个顺序通常遵循以下步骤: 1. **基类静态成员初始化**:如果基类中有任何静态成员,则会在程序启动时按照...
在DEMO中,`multDb-init.sql`可能包含了初始化多个数据库的数据脚本,用于设置各个数据源的基础数据环境。这些脚本通常包含了创建表、插入初始数据等操作,以便于测试和演示。 `说明.txt`文件很可能是对DEMO的详细...
在IT行业中,数据库初始化脚本是项目启动前的关键步骤,特别是在使用像Spring MVC这样的MVC框架构建应用时。本文将详细解析标题“框架使用到的初始化脚本”以及描述中涉及的知识点,主要关注与MySQL数据库相关的初始...
Java中的静态变量(static变量)是在类加载时初始化的,而不是在对象创建时。静态变量属于类,而不属于任何特定的对象,因此它们是共享的,所有类实例都可以访问。了解静态变量的初始化顺序对于理解和避免潜在的编程...
在Quartz 2.2.3版本中,初始化数据库是使用Quartz的关键步骤,因为Quartz依赖于一个持久化存储来保存作业和触发器的信息。这个过程通常涉及执行一系列SQL语句来创建必要的表结构。 Quartz的初始化SQL语句主要用于...
4. **创建并初始化Encoder**:创建一个`Encoder`实例,并使用之前创建的输入和输出媒体描述符进行初始化。 ```java Encoder encoder = new Encoder(); encoder.setInputMedia(inputMedia); encoder....
Android 2.3的启动过程是一个复杂但有序的过程,涉及到日志系统初始化、配置文件解析、设备初始化、属性服务的启动等多个环节。通过对这些过程的深入了解,我们可以更好地理解Android系统是如何从底层硬件到顶层应用...
这就是为什么 Java 的属性字段无需显示初始化就能被使用,而方法的局部变量却必须要显示初始化以后才能访问。 然后调用的对象的构造函数,调用过程会一直上溯到 Object 类。对象的组成部分包括对象头、实例数据和...
// 初始化结果Map,键为属性名,值为比较结果 Map, DiffResult> diffResults = new HashMap(); for (Field field : fields) { // 忽略static和transient属性 if (field.isStatic() || field.isTransient()) {...
了解如何声明、初始化和操作数组对于处理批量数据至关重要。 7. **类与对象**:Java是一种面向对象的编程语言,类是创建对象的模板,而对象是类的实例。理解类的属性(fields)和行为(methods)以及继承、封装和...