垃圾回收,深拷贝与浅拷贝(java进阶day09)

垃圾回收:

垃圾回收机制:低级线程负责对内存对象的回收,没有变量引用,
引用变量赋值 null,标识为可以回收(并非马上回收)
♥Java因为有自动回收机制,一般不会出现内存不够用,但也不一定,如静态变量使用过多也会占内存

内存溢出:创建对象时,内存不够用
内存泄漏:对象使用完成,没有及时回收

1、常用的工具包
java.lang:Stirng,System,Thread,Math,Object等,自动导入
java.io:输入输出流
java.net:网络编程
java.util:工具包
2、深拷贝与浅拷贝
定义一个student类,创建一个对象,用clone克隆对象
clone方法只适用于自己类里面进行打点调用,在其他类里面打点调用clone方法,
需要将clone方法写出,如果有异常,还需要进行异常处理
1、自定义的类,使用clone方法,当前类必须要实现Cloneable接口
如果不实现接口,则会抛出异常,java.lang.CloneNotSupportException
2、因为object类的clone是protected修饰的,要重写此方法
才能在不同包中访问,把访问修饰符定义为public
3、Cloneable接口中没有方法,是一个标识性的接口,
针对object类的clone方法的实现
4、浅拷贝:引用变量拷贝的是地址,所有克隆的对象改变了对象的属性,原对象的属性也发生改变
5、深拷贝:引用变量拷贝一份对象,克隆对象的属性改变,原对象的属性不发生变化
3、toSting方法
返回对象的字符串表示形式
包名.类名@hashCode(打印16进制的内存地址)
当打印对象时,默认调用
若不想使用Object类的toString方法,可重写

public static void main(String[] args) {
	Student student = new Student("admin",80);
	System.out.println(student);
	//重写前输出:ToString0727.Student@15db9742
	//重写后Student [age=80, name=admin]
}
//重写,如下
public String toString() {
	return "Student [age=" + age + ", name=" + name + "]";
}

4、equals方法
Object类的equals内存比较地址相同与否
字符串类重写了equals,比较每一位相同,则为true

public class EmpTest {
	public static void main(String[] args) {
		Emp emp1 = new Emp("hello");
		Emp emp2 = new Emp("hello");
		String str1 = new String("hello");
		String str2 = new String("hello");
		System.out.println(emp1.equals(emp2));//equals比较地址相同与否
		System.out.println(str1.equals(str2));//字符串类重写了equals
	}
}
//emp若重写equals方法,可是两个结果均变为true,如下
@Override
public boolean equals(Object obj) {
	// TODO Auto-generated method stub
	Emp emp = null;
	if (obj instanceof Emp) {
		emp = (Emp)obj;
	}
	return this.str.equals(emp.str);
}

5、hashCode方法
返回一个hashCode码,Integer,内存地址有关的hash算法
如果equals返回true,需要规范hashCode()方法
未改写hashCode()方法之前垃圾回收,深拷贝与浅拷贝(java进阶day09)_第1张图片

改写的hashCode方法及最终结果
垃圾回收,深拷贝与浅拷贝(java进阶day09)_第2张图片

复习:
1、lambda表达式
2、函数式接口:
3、检查函数式接口的注释:@FunctionalInterface
4、格式:()->{}
5、简化
省略方法的参数列表的数据类型
如果只有一个参数()可省
{}中如果只有一条语句可以省略{},return也可省
6、引用以实现的方法:
如果事先方法的参数列表,返回类型和接口相同
方法归属者::方法名
7、引用构造方法
类名::new
保证参数个数、类型,函数返回值相同

你可能感兴趣的:(java,hashcode)