Java初始化总结
1 概述
Java中,每个类在使用前都需要进行初始化,所以理解初始化是理解java的开端。
在Java中有两个隐藏了的方法:和。这两个方法是属于Java虚拟机的,也就是说在程序中我们是不可以调用的。具体可见:
http://dev2dev.bea.com.cn/bbsdoc/20060704286.html
"clint":对类进行初始化。即在类被装载时,JVM会调用内置的方法对类成员和静态初始化块进行初始化调用(也就是static部分)。
"init":对对象进行初始化。即在创建对象时,JVM会调用方法对实例变量和初始化块进行初始化(然后才是构造方法)。
2 举例说明
2.1 普通类初始化
/*
* Normal.java
*
* Created on 2007-5-27, 16:40:14
*
* 普通类的初始化,先是初始化块,然后是构造方法
*/
package javabase.init;
/**
*
* @author Penny Huang
*/
public class Normal
{
{
System.out.println("Normal ");
}
public Normal ()
{
System.out.println("Normal construct");
}
}
输出:
Normal
Normal construct
结论:对象初始化时,先是初始化块,然后才是构造方法。
2.2 普通类静态初始化
/*
* NormalStatic.java
*
* Created on 2007-5-27, 16:58:48
*
* 有静态初始化的类,首先是初始化静态块,然后是一般的初始化块,最后是构造方法
*/
package javabase.init;
/**
*
* @author Penny Huang
*/
public class NormalStatic
{
static
{
System.out.println("NormalStatic ");
}
{
System.out.println("NormalStatic ");
}
public NormalStatic ()
{
System.out.println("NormalStatic construct");
}
}
输出:
NormalStatic
NormalStatic
NormalStatic construct
结论:先是初始化静态部分,然后才初始化其他部分(类是先加载,然后才创建对象,而静态部分是在类加载时初始化的)。
2.3 继承于普通类的初始化
/*
* Special.java
*
* Created on 2007-5-27, 17:01:34
*
* 继承于普通类,首先是父类初始化块,然后是父类构造方法,之后是子类的初始化块,最后是子类构造方法
*/
package javabase.init;
/**
*
* @author Penny Huang
*/
public class Special extends Normal
{
{
System.out.println("Special ");
}
public Special()
{
System.out.println("Special construct");
}
}
输出:
Special
Special construct
Normal
Normal construct
结论:先初始化父类(默认调用父类的无参构造方法),然后才初始化子类。
2.4 继承于有静态初始化的类的初始化
/*
* SpecailStatic.java
*
* Created on 2007-5-27, 17:12:13
*
* 继承于有静态初始化的类,首先是父类静态初始化,然后是子类静态初始化,之后是父类初始化,最后子类初始化
*/
package javabase.init;
/**
*
* @author Penny Huang
*/
public class SpecailStatic extends NormalStatic{
static
{
System.out.println("SpecialStatic ");
}
{
System.out.println("SpecialStatic ");
}
public SpecailStatic ()
{
System.out.println("SpecialStatic construct");
}
}
输出:
SpecialStatic
NormalStatic
SpecialStatic
SpecialStatic construct
NormalStatic
NormalStatic construct
结论:先静后动,先父后子。
3 总结
Java初始化的顺序如下:
父类静态初始化---->子类静态初始化---->父类初始化块---->父类构造方法---->子类初始化块---->子类构造方法。
20:40 浏览 (730) 评论 (3) 分类: Java 相关推荐 评论
luzl 2008-11-15 回复
引用
父类静态初始化---->子类静态初始化---->父类初始化块---->父类构造方法---->子类初始化块---->子类构造方法
luzl 2008-11-15 回复
Good,Thank you.
penny 2007-05-27 回复
晕,排版好麻烦,在word中好好的,粘到这里就乱了,好郁闷~~
分享到:
相关推荐
类的初始化 成员初始化 构造器初始化初始化顺序 数组初始化 对象的销毁 对象作用域 this 和 super 访问控制权限继承 多态组合代理 向上转型static final 接口和抽象类接口 抽象类异常 认 识 Exception 什么是 ...
文章目录【Java语言基础】初始化块使用初始化块静态初始化块总结代码 【Java语言基础】初始化块 初始化块又称为代码块。属于类中的第四大成员。本质上是一个方法,它也有方法体,但没有方法名,没有参数,没有返回,...
构造器初始化 15 初始化顺序 16 this 和 super 16 访问控制权限 16 继承 17 多态 17 代理 17 Static 17 Final 17 接⼝和抽象类 18 接⼝ 18 抽象类 18 异常 18 认识 Exception 18 什么是 Throwable 18 常⻅的 ...
4.1 由构建器保证初始化 4.2 方法过载 4.2.1 区分过载方法 4.2.2 主类型的过载 4.2.3 返回值过载 4.2.4 默认构建器 4.2.5 this关键字 4.3 清除:收尾和垃圾收集 4.3.1 finalize()用途何在 4.3.2 必须执行清除 4.4 ...
JAVA基础知识精华总结 收藏 1、 对象的初始化 (1) 非静态对象的初始化 在创建对象时,对象所在类的所有数据成员会首先进行初始化。 基本类型:int型,初始化为0。 如果为对象:这些对象会按顺序初始化。 ※在...
JAVA相关基础知识 1、面向对象的特征有哪些方面 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用...
欧柏泰克java培训相关基础知识总结!一、Java数组声明、创建、初始化;二、Java中的String类型;三、在Java怎样实现对数组的复制
4.4 Foreach语法 4.5 return 4.6 break和 continue 4.7 臭名昭著的“goto” 4.8 switch 4.9 总结 第5章 初始化与清理 5.1 用构造器确保初始化 5.2 方法重载 5.2.1 区分重载方法 5.2.2 涉及基本类型的重载 5.2.3 以...
4.多线程错误 - 错误的延迟初始化和更新静态属性。 5.错误用法 - 集合转换为数组元素时发生的类型转换错误。 修复建议:使用c.toArray(new String[c.size()])。 6.不良实践 - 方法返回boolean类型返回了null。 ...
一、Java的类加载机制回顾与总结: 我们知道一个Java类要想运行,必须由jvm将其装载到内存中才能运行,装载的目的是把Java字节代码转换成JVM中的java.lang.Class类的对象。这样Java可以对该对象进行一系列操作,...
很多初学java的新人不知道哪些java基础知识必须掌握,下面小编为大家精心整理的java基础知识点总结,方便大家学习! 方法/步骤 1、对象的初始化 (1) 非静态对象的初始化 在创建对象时,对象所在类的所有...
JAVA类的加载、链接和初始化 11 JAVA类的加载 11 JAVA类的链接 12 JAVA类的初始化 13 创建自己的类加载器 14 参考资料 15 JAVA线程:基本概念、可见性与同步 16 JAVA线程基本概念 16 可见性 17 JAVA中的锁 18 JAVA...
在本篇文章里小编给大家整理的是关于Java类的初始化顺序知识点总结,需要的朋友们可以学习下。
JAVA基础知识精华总结 1、对象的初始化 2、继承时,对象的初始化过程 3、关于构造方法 4、有关public、private和protected 5、抽象类 ..........
java.lang.ExceptionInInitializerError 初始化程序错误。当执行一个类的静态初始化程序的过程中,发生了异常时抛出。静态初始化程序是指直接包含于类中的static语句段。 java.lang.IllegalAccessError 违法访问...
类加载,同时初始化类中静态的属性(赋默认值) 2.执行静态代码块 3.分配内存空间,同时初始化非静态的属性(赋默认值) 4.调用父类构造器(注意调用父类构造器之前已经给父类的非静态的属性显示赋值,如果有显示赋值的话...
大一自己总结的JAVA实验代码,JAVA课程绩点4.0+,没什么问题
4.1 由构建器保证初始化 4.2 方法过载 4.2.1 区分过载方法 4.2.2 主类型的过载 4.2.3 返回值过载 4.2.4 默认构建器 4.2.5 this关键字 4.3 清除:收尾和垃圾收集 4.3.1 finalize()用途何在 4.3.2 必须执行清除 4.4 ...
4.1 由构建器保证初始化 4.2 方法过载 4.2.1 区分过载方法 4.2.2 主类型的过载 4.2.3 返回值过载 4.2.4 默认构建器 4.2.5 this关键字 4.3 清除:收尾和垃圾收集 4.3.1 finalize()用途何在 4.3.2 必须执行清除 4.4 ...
一旦引用被初始化指向一个对象,就无法再把它指向另一个对象。 3>final方法:一是把方法锁定,以防止继承类修改它的含义,二是确保继承中使方法行为保持不变,并且不会被覆盖。类中所有的private方法都隐式地指定为是...