java中为什么要为类的属性初始化?

Python025

java中为什么要为类的属性初始化?,第1张

1. 对于类的成员变量,不管程序有没有显式的进行初始化,Java虚拟机都会先自动给它初始化为默认值

默认值如下:

Boolean false

Char '\u0000'(null)

byte(byte)0

short (short)0

int 0

long0L

float0.0f

double0.0d

2. 局部变量声明之后,Java虚拟机就不会自动给它初始化为默认值,因此局部变量的使用必须先经过显式的初始化。

但是需要声明的是:对于只负责接收一个表达式的值的局部变量可以不初始化,参与运算和直接输出等其它情况的局部变量需要初始化。

我们知道一个类(class)要被使用必须经过装载,连接,初始化这样的过程。下面先对这三阶段做一个简单的描述,之后会结合一个简单的例子来说明java中类的初始化过程。

在装载阶段,类装载器(Bootstrap ClassLoader 或者用户自定义的ClassLoader) 把编译形成的class文件载入内存,创建类相关的Class对象,这个Class对象封装了我们要使用的类的类型信息。

连接阶段又可以分为三个子步骤:验证、准备和解析。

验证就是要确保java类型数据格式 的正确性,并适于JVM使用。

准备阶段,JVM为静态变量分配内存空间,并设置默认值,注意,这里是设置默认值,比如说int型的变量会被赋予默认值0 。在这个阶段,JVM可能还会为一些数据结构分配内存,目的 是提高运行程序的性能,比如说方法表。

解析过程就是在类型的常量池中寻找类、接口、字段和方法的符号引用,把这些符号引用替换成直接引用。这个阶段可以被推迟到初始化之后,当程序运行的过程中真正使用某个符号引用的时候 再去解析它。

类会在首次被“主动使用”时执行初始化,为类(静态)变量赋予正确的初始值。在Java代码中,一个正确的初始值是通过类变量初始化语句或者静态初始化块给出的。而我们这里所说的主动使用 包括:

1.创建类的实例

2.调用类的静态方法

3.使用类的非常量静态字段

4.调用Java API中的某些反射方法

5.初始化某个类的子类

6.含有main()方法的类启动时

初始化一个类包括两个步骤:

1、 如果类存在直接父类的话,且直接父类还没有被初始化,则先初始化其直接父类

2、 如果类存在一个初始化方法,就执行此方法

注:初始化接口并不需要初始化它的父接口。

追问

你这不是初始化实例么

初始化根据字面意思比较容易理解 就是给属性赋一个初始值

比如你定义了一个属性整型的age:

private int age //这样算是定义了一个 但是并没有初始化

private int age=20//这样才算初始化

如果你在调用时 又没初始化它 有时候就会出现问题 比如:

public class Test {

public static void main(String...args){

int a

System.out.println(a)//编译出错 变量a没有初始化

}

}

基本数据类型作为类成员变量,无论初始化与否都不会出错。

作为函数代码里的变量,无论什么类型不初始化全部都会报错。

比如下面这样就不会报错了

public class Test {

private int a

public void print(){

System.out.println(a)

}

public static void main(String...args){

Test t = new Test()

t.print()

}

}

不过你要问的是什么是初始化啊 哈哈 看最前面一点就行了 后面看着糊涂就先暂时不用管吧 学到后面的时候 你再回过头来看 自然就懂了