Java类的初始化顺序
Java类的初始化顺序
我把Java类的初始化顺序分为两部分。第一部分是类的初始化,第二部分是对象的初始化。
在初始化之前JVM必须先把该类的字节码加载到内存中来。这时不管创不创建对象都会马上执行类的初始化:
执行静态初始化表达式(如static int a = 10)和静态初始化块(即static{}中的内容),注意两者按在源代码中的先后顺序执行。
当创建一个对象,就会执行对象的初始化:
首先调用父类的构造函数。
第二步执行初始化表达式(如int a = 10)和初始化块({}中的内容),同样按在源代码中的先后顺序执行。
最后执行自身的构造函数。
对于静态初始化表达式与初始化表达式,如果只是声明,没有初始化,则赋默认值。如int i;则i会被赋值为0。
总结:
1、 类初始化
(1) 静态初始化表达式,静态初始化块
2、对象初始化
(1)父类的构造函数
(2)初始化表达式,初始化块
(3)自身的构造函数
注意:初始化表达式可能不是准确的术语,但明白是指什么就行了。
测试代码:
代码
package principle;
public class InitializeTest {
public static void main(String[] args) throws ClassNotFoundException{
System.out.println("-----类初始化-----");
Class.forName("principle.MyClass");
System.out.println("\n" + "-----对象初始化-----");
MyClass myClass = new MyClass();
}
}
class MyClass extends Father{
MyClass() {
System.out.println("3.自身的构造函数");
}
static int staticInt = 5; //如果放在static{}后面则编译不通过
static {
System.out.print("1.静态初始化表达式:staticInt=" + staticInt + "\t");
System.out.println("静态初始化块");
}
int instanceInt; //将会被赋默认值0
{
System.out.print("2.初始化表达式:instanceInt=" + instanceInt + "\t");
System.out.println("初始化块");
}
}
class Father {
Father() {
System.out.println("1.父类的构造函数");
}
}
输出结果:
-----类初始化-----
1.静态初始化表达式:staticInt=5 静态初始化块
-----
相关文档:
一、向上转型。
通俗地讲即是将子类对象转为父类对象。此处父类对象可以是接口。
1,向上转型中的方法调用。
看下面代码:
package com.wensefu.others;
public class Animal {
public void eat(){
System.out.println("animal eatting...");
}
}
class Bird extends Animal{
public void ......
系统自动抛出的异常
所有系统定义的编译和运行异常都可以由系统自动抛出,称为标准异常,并且 Java 强烈地要求应用程序进行完整的异常处理,给用户友好的提示,或者修正后使程序继续执行。
语句抛出的异常
用户程序自定义的异常和应用程序特定的异常,必须借助于 throws 和 throw 语句来定义抛出异常。
throw是语句抛出 ......
数字证书:
(一)证书管理
1.keyTool证书管理
(1) 本地数字证书生成命令
keytool -genkeypair -alias www.zlex.org -keyalg RSA -keysize 2048 -sigalg SHA1withRSA -validity 36000 -keystore zlex.keystore -dname "CN=www.zle ......
java 中的序列化与反序列化代码:
//进行序列化
public byte[] getByteArray(String[] str)
{
byte[] bt = (byte[])null;
try {
if (str != null) {
& ......
Java 一共8种基本类型,4种整型,2种浮点类型,1种表示unicode编码的字符单元的字符类型char,1种表示真值的boolean类型。
4种整数类型
int, 4 字节
short,2字节
long,8字节
byte,1字节
2种浮点类型
float,4字节,很少情况适合使用float,数值有一个后缀F,没有后缀的浮点数值默认为double.也可以在浮点数值后面添 ......