CoreJava(第四章)对象和类-03

4.12.重载

4.12.1定义

重载:具有相同的名字,不同的参数。

4.12.2例子
package com.eleven.oop_03;

/**
 * 重载:
 * 1.具有相同的名字,不同的参数
 * @author sywangu
 *
 */
public class HeavyLoad {
	public static void main(String[] args) {
		Person p = new Person();
		p.getPerson();	// 无参数!
		p.getPerson(1);	// 只有id参数
		p.getPerson(1, "伊莱文");	// 有id和name两个参数
		p.getPerson(1, "伊莱文", 21);	// 有id、name和age3个参数
	}

}
class Person{
	private int id;
	private String name;
	private int age;
	
	public void getPerson() {
		System.out.println("无参数!");
	}
	public void getPerson(int id) {
		System.out.println("只有id参数");
	}
	public void getPerson(int id,String name) {
		System.out.println("有id和name两个参数");
	}
	public void getPerson(int id,String name,int age) {
		System.out.println("有id、name和age3个参数");
	}
}


4.13默认域初始化

4.13.1定义

在构造器中没有显式的给实例域赋初值,那么就会被自动赋为默认值:数值为0,布尔值为false,对象引用为null

4.14无参数的构造器

4.14.1定义

1.对象由无参数构造函数创建时,其状态会设置为适当的默认值。

2.只有当类没有提供任何构造器时,系统才会提供一个默认的构造器。

4.14.2例子
package com.eleven.oop_03;

import java.time.LocalDate;

/**
 * 无参数的构造器
 * 1.对象由无参数构造函创建时,会设置为默认值。
 * 2.如果在编写一个类没有编写默认构造器时,系统就会自动提供一个无参数构造器。
 * @author sywangu
 *
 */
public class ParamConstructor {
	public static void main(String[] args) {
		System.out.println(new Per());
		
	}

}
class Per{
	private String name;
	private double salary;
	private LocalDate hireDay;
	
	// 无参构造
	public Per() {
		name = "";
		salary = 0;
		hireDay = LocalDate.now();
	}
}

4.15显示域初始化

4.15.1定义

可以保证不管怎么调用构造器,每个实例域都可以被设置为一个有意义的初始值。

4.15.2例子
package com.eleven.oop_03;

/**
 * 显式域初始化
 * 1.可以保证不管怎么调用构造器,每个实例域都可以被设置为一个有意义的初始值。
 * 
 * @author sywangu
 *
 */
public class DisplayDomainInit {

}

class Emp {
	// 在执行构造器之前,先执行赋值语句,将一个值赋予给任何域。
	private String name = "";
}

4.16参数名

4.16.1描述

1.单个字符命名。2.参数前面加前缀"a"。3.采用this形式访问实例域。

4.16.2例子
package com.eleven.oop_03;

/**
 * 参数名
 * @author sywangu
 *
 */
public class ParamName {
	private String name;
	private double salary;
	private int age;
	
	// 01用单个字符命名
	public ParamName(String n) {
		name = n;
	}
	// 02可以在每个参数前面加上一个前缀"a"
	public ParamName(String aName,double aSalary) {
		name = aName;
		salary = aSalary;
	}
	// 03采用this的形式访问实例域,this指示的是隐式参数
	public ParamName(String name, double salary, int age) {
		this.name = name;
		this.salary = salary;
		this.age = age;
	}
}

4.17调用另一个构造器

4.17.1定义

关键字this除了是表示引用方法的隐式参数外,还有另外一个含义:this(…)表示这个构造器将调用同一个类的另一个构造器。

4.17.2例子
package com.eleven.oop_03;

/**
 * 调用另外一个构造器
 * 1.关键字this除了是表示引用方法的隐式参数外,还有另外一个含义:
 * 2.this(...)表示这个构造器将调用同一个类的另一个构造器。
 * @author sywangu
 *
 */
public class CallAnotherConstructor {
	private static int nextId = 1; // 静态域id
	private double salary;
	
	// 采用这样方式使用this关键字,可以使公共的构造器代码只编写一次
	public CallAnotherConstructor(double aSalary) {
		// 02-程序在执行这个
		this("CallAnotherConstructor:" + nextId ,aSalary);
		// 04-程序在执行这个
		nextId++;
	}

	public CallAnotherConstructor(String string, double aSalary) {
		// 03-程序在执行这个
		System.out.println("调用CallAnotherConstructor(String string, double aSalary)这个构造器");
	}

	public static void main(String[] args) {
		// 01-程序先执行这个
		new CallAnotherConstructor(5000);	// 将会调用CallAnotherConstructor(String string, double aSalary)这个构造器
		// 05-程序结束退出
	}

}

4.18初始化块

4.18.1定义

1.除了具有"在构造器中设置值"和"在声明中赋值"以外,还有一种"初始化块"。

2.在一个类的声明中,可以包含多个代码块。只要构造类的对象,这些块就会被执行。

4.18.2例子
package com.eleven.oop_03;

/**
 * 初始化块 
 * 1.在一个类的声明中,可以包含多个代码块。只要构造类的对象,这些块就会被执行。
 * 
 * @author sywangu
 *
 */
public class InitBlock {
	private static int nextId;

	private int id;
	private String name;
	private double salary;

	// 初始化构造块
	/// 02-在运行初始化块
	{
		id = nextId;
		nextId++;
	}

	public InitBlock(String aName, double aSalary) {
		name = aName;
		salary = aSalary;
	}

	/// 03-然后在运行构造器的主体部分
	public InitBlock() {
		name = "";
		salary = 0;
	}

	public static void main(String[] args) {
		/// 01-先执行这个
		new InitBlock();
	}
}

4.19浅谈对象析构与finalize方法

4.19.1定义

以回收分配给对象的存储空间。

1.由于Java具有自动的垃圾回收机制,所以不需要人工回收内存,所以Java不支持析构器。

2.finalize方法是在垃圾回收器清除对象之前进行调用。

3.如果某个资源在使用完毕后立刻被关闭,那么就需要由人工来管理,对象用完后,可以使用close方法来完成相应的清理操作。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值