一、变量的分类
局部变量:在方法体或初始化块以及for等结构中声明的变量,java不会为这些变量赋初值
成员变量:体现在面向对象语言中的变量,java会按照默认初值为这些变量赋初值(final变量需要声明就赋值)
二、成员变量初始化
数据成员默认值
特别的,char(\u0000 空值)、boolean(false)、对象引用(null)
声明时初始化
成员变量可以被能产生值的表达式赋值,在该成员变量前未声明的变量不可赋值给这个成员变量,但static变量可以,因为static变量最先初始化或被赋值。
class test{
int a = 1;
int b = c; // 报错
int b = static d; // 可以
int c = 2;
static int d = 3;
}
构造方法
用于初始化类的对象,方法名与类名相同,没有返回值类型。
class Animal{
String name;
int age;
Animal(String name,int age){ // 构造方法1
this.name = name;
this.age = age;
}
Animal(String name){ // 构造方法2 与构造方法1 这种只有参数列表个数不同成为方法重载
this.name = name;
}
}
静态变量初始化
静态变量是类的数据成员,声明语句只会在第一次被使用时加载,全局共享一个变量,没有副本。
初始化块
静态初始化块:用static修饰只会在第一次被使用时加载,加载的顺序按照类定义的顺序执行,不会提前加载。
class Animal{
String name;
static{
name = "未命名";
age = 99; // 不可执行
}
int age;
}
实例初始化块:每次生成对象时都会被加载
class Animal{
String name;
{
name = "未命名";
age = 99; // 可行,static最先被声明
}
static int age;
}
初始化顺序
首次使用某个类时(创建对象或访问类的静态成员时),这个类才被载入内存。
- 类的所有静态变量分配空间并赋默认值
- 声明时的初始化赋值
- 静态初始化块赋值
- 创建对象时,为实例成员变量赋默认值,赋初始化值
- 实例初始化块赋值
- 构造方法赋值
不要吝惜点个赞哦~