Java学习之对象的初始化与清除

(一)  实例变量的初始化

        Java语言能够保证所有的对象都被赋初值,实例变量的初始化方式有:

声明时初始化使用初始化块使用构造方法初始化

成员变量的默认值:

        整型为 0            浮点型为 0.0      布尔类型为 false          字符型为 '\u000'  引用类型为 null

先看一个代码:

package demo;

public class Welcome{
	public static void print() {
		System.out.println("Hello world!");
	}
	//main方法
	public static void main(String[] args)
	{
		Teacher tea = new Teacher();
		System.out.println("age is " + tea.age);
		System.out.println("salary is " + tea.salary);
		System.out.println("reality is " + tea.reality);
		System.out.println("str is " + tea.str);
		System.out.println(tea);
		
	}
	
}
class Teacher{
	int age;
	float salary;
	boolean reality;
	String str;
	public static void print01() {
		//当你没有给age01赋初值时,编译时会报错
		//int age01;
		//System.out.println("age01 is " + age01);
	}
}


可以看看代码结果:

其中最后一个代表的是,对象的地址

现在我们来谈一谈上面的赋值方法:

就是通过一个默认的构造方法进行赋值,也就是说,当我们通过构造方法来创建一个对象时,构造方法会给类变量赋默认值,要注意的是,在类的方法里面的变量一定要赋初值,不然系统会报错。

当然,我们也可以在声明时赋初值

package demo;

public class Welcome{
	public static void print() {
		System.out.println("Hello world!");
	}
	//main方法
	public static void main(String[] args)
	{
		Teacher tea = new Teacher();
		System.out.println("age is " + tea.age);
		System.out.println("salary is " + tea.salary);
		System.out.println("reality is " + tea.reality);
		System.out.println("name is " + tea.name);
		
		
	}
	
}
class Teacher{
	int age = 20;
	float salary = 5000;
	boolean reality = true;
	String name = "huahua";
	public static void print01() {
		//当你没有给age01赋初值时,编译时会报错
		//int age01;
		//System.out.println("age01 is " + age01);
	}
}


这样,我们在开始的时候就给变量赋初值,那么我们的输出就会按照我们的意愿进行输出

还介绍一种方法: 使用初始化块初始化

package demo;

public class Welcome{
	public static void print() {
		System.out.println("Hello world!");
	}
	//main方法
	public static void main(String[] args)
	{
		Teacher tea = new Teacher();
		System.out.println("age is " + tea.age);
		System.out.println("salary is " + tea.salary);
		System.out.println("reality is " + tea.reality);
		System.out.println("name is " + tea.name);
		
		
	}
	
}
class Teacher{
	int age ;
	float salary ;
	boolean reality ;
	String name ;
	{
		//这里是初始化块
		age =20;
		salary = 5000;
		reality =true;
		name = "lili";
	}
}


注意,利用初始化块进行赋初值是在调用构造方法之前调用的

当然啦,除了以上几种方法,我们也可以通过构造方法进行赋值(区别于默认构造方法只能赋默认值),这时,我们就要用到this 关键字啦

package demo;

public class Welcome{
	public static void print() {
		System.out.println("Hello world!");
	}
	//main方法
	public static void main(String[] args)
	{
		Teacher tea = new Teacher();
		tea.detail(20, 5000, true, "LYLI");
		System.out.println("age is " + tea.age);
		System.out.println("salary is " + tea.salary);
		System.out.println("reality is " + tea.reality);
		System.out.println("name is " + tea.name);
		
		
	}
	
}
class Teacher{
	int age ;
	float salary ;
	boolean reality ;
	String name ;
	public void detail(int age ,float salary,boolean reality,String name) {
		this.age = age;
		this.name = name;
		this.reality = reality ;
		this.salary = salary;
		
	}
}


应该注意的是:

初始化次序:如果类中既为实例变量指定了初值,又有初始化块,还在构造方法中初始化了变量,那么执行的前后顺序是上面捏?

先看代码:

package demo;

public class Welcome{
	public static void print() {
		System.out.println("Hello world!");
	}
	//main方法
	public static void main(String[] args)
	{
		Teacher tea = new Teacher();
		tea.detail();
		
		
		
	}
	
}
class Teacher{
	int age = 20;
	//System.out.println("初始化中的 age is " + age );
	{
		age = 30;
		System.out.println("初始化块的 age is " + age );
	}
	public void detail( ) {
		age = 40;
		System.out.println("构造方法中的 age is " + age);
		
	}
}


有两个输出:

最后稍微总结一下:

1.首先使用默认值或者指定的初值进行初始化,这里先将age 赋值为20

2.接下来执行初始化块,重新将 age 赋值为 30

3.最后再进行构造方法的初始化,再将 age 赋值为 40

所以,在创建Teacher类的对象tea 后,age 就被赋值为 40

(二) 静态变量的初始化

静态变量的初始化与实例变量相似,静态变量如果在声明时没有指定初始值,那么系统就会赋默认值,其主要方法有声明时初始化,使用静态初始化块,使用构造方法初始化

注意:static 修饰的变量,不论创建多少对象( 甚至没有创建对象时)都只占用一份存储空间

class Teacher{
	static int age = 20;
	//静态初始化块中只能给静态变量赋值,不能使用实例变量
	{
		age = 30;
		
	}
	public void detail( ) {
		age = 40;
		
	}
}

当一个类有多种初始化方法时,

总的初始化顺序:

1.用默认值给静态变量赋值,然后执行静态初始化块为 static 变量赋值

2.用默认值给实例变量赋值,,然后执行初始化块为实例变量赋值

3.使用构造方法初始化静态变量或者实例变量赋值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值