javase day11


声明包:用于声明类所在的位置,要在首行,只能有一句
导入包:导入和本类不在一个包下的类,不在首行,可以有多个
*代表的是匹配符,可以匹配当前包下的所有类,但是不包括子包下的类
提供的包:
Java(Java提供的源生包)
lang包:随着程序启动而加载到方法区供程序使用的包-----核心类库,不用导包
util包:提供操作对象或者类的包-----工具包
awt/applet包:GUI(图形用户界面) swing
io:数据传输
math:提供简单的数据运算
net:网络数据传输
nio:分布式
security:安全
sql:操作数据库
text:格式化 3.14
time:时间和日期
javax(Java提供的扩展包)
org(第三方厂商提供的包)

垃圾回回收机制:
栈:用于计算,无用内容立即清楚
方法区:类的信息
堆:存储的是对象,无用的对象(垃圾)

Java在执行代码操作时,在底层开辟空间、维护空间,回收内存空间,都是Java自行解决的不用你关注(操作不了底层具体的内存变化过程)
当程序启动时,针对堆内存进行监督,检测堆内存的使用比例,如果使用比例超过70%就会启动GC(garbage collector垃圾回收器)通知系统进行回收-----system。gc()

堆内存分为新生代和老生代,新生代分为伊甸园区和幸存区(fromspace和tospace),创建的新生对象存在伊甸园区,对这个对象进行一次扫描如果这个对象无用了就通知系统进行垃圾回收,如果还在使用就把这个对象移到幸存区,进行多次扫描,如果无用了就通知系统进行垃圾回收,如果还在使用就把这个对象移到老生代进行多次扫描(频率比幸存区低),如果这个对象是无用对象就通知系统进行回收,如果还在使用就继续留在老生代 ,如果老生代里的对象突然消失会造成系统奔溃

初代回收:针对新生代回收(minor collet)
完全回收:针对老生代和新生代回收(full collect)

如果新创建的对象很大:
先把这个新对象放到新生代的伊甸园区,放入失败,就会对新生代进行一次初代回收,再次放入新生代,放入失败,就会再对新生代进行第二次初代回收,再次放入新生代,放入失败,此时就会把这个对象放入老生代,放入失败,进行第一次完全回收,把这个对象放入新生代,放入失败,再针对新生代进行第三次初代回收,再放入新生代,放入失败,把这个对象放入老生代,放入失败,针对老生代进行第二次完全回收,新对象再次往新生代存储,放入失败,移动到老生代进行存储,放入失败----报错OutOfMemoryError内存溢出异常

Object
API—Application Programming Interfaces 提供了一些列的接口以及子接口或者实现类(方法要么是protected要么是默认(public))

是Java中所有类的顶级父类,没有父类的类,所有的类是默认继承Object类,所有的类可以拿到Object里的属性和方法(重写)

重要方法:
clone()----返回的是存储了原对象信息的新对象,如果对象想要操作克隆方法就要让类实现cloneable接口才能支持克隆,cloneable没有信息只是标记,实现这个接口就能克隆

public class ObjectDemo1 implements Cloneable{
	int i=10;
	public static void main(String[] args) throws CloneNotSupportedException {
		//创建对象
		ObjectDemo1 od=new ObjectDemo1();
		//调用object里的方法
		//CloneNotSupportedException----克隆不支持异常
		//实现cloneable接口用于支持克隆操作
		//cloneable没有任何信息只是标记
		//标记实现这个接口的类的对象可以进行克隆操作
		ObjectDemo1 od1=(ObjectDemo1)od.clone();
		System.out.println(od1.i);
		//连个对象的地址值不相等----把原对象信息拷贝一份放到克隆对象
		System.out.println(od==od1);
	}
}

finalize()----无用对象调用这个方法通知系统进行垃圾回收(与syste.gc()结果相同过程不同)
getclass()-----返回实际创建类的类型
hashcode()-----返回对象的哈希码值(不同对象哈希码值一般不一样)取值范围广,分布均匀

public class ObjectDemo2 {
	public static void main(String[] args) {
		/*
		 * //创建对象 ObjectDemo2 od=new ObjectDemo2(); Object od2=new ObjectDemo2();
		 * //实际创建类的类型 //返回的是类型的全路径名(唯一确定类) System.out.println(od.getClass());
		 * System.out.println(od2.getClass());
		 */
		
		//哈希码值转成十六进制----不同对象哈希码值不一样
		//哈希码值的取值范围0-40亿左右----取值范围广
		//哈希码值散列分布-----均匀分布
		//由于取值范围广和均匀分布就导致两个相同数出现的概率几乎为零
		//哈希码值就是唯一的---代表地址值唯一的
		System.out.println(new Object().hashCode());
		System.out.println(Integer.toHexString(new Object().hashCode()));
	}
}

tostring()
返回的是对象的字符串表现形式,返回的是对象拼接的地址值 重写tostring()用于输出属性值

public class ObjectDemo3 {
	public static void main(String[] args) {
		//创建对象
		ObjectDemo3 od =new ObjectDemo3();
		//object里的tostring()方法用于拼接对象地址值
		System.out.println(od.toString());
		//默认用tostring()
		System.out.println(od);
		//创建对象
		ODemo od1=new ODemo();
		od1.name="lili";
		od1.age=10;
		od1.gender='女';
		//默认使用ODemo的tostring()方法
		System.out.println(od1);
		
		
	}
}
 class ODemo{
	 String name;
	 int age;
	 char gender;
	@Override
	public String toString() {
		return "ODemo [name=" + name + ", age=" + age + ", gender=" + gender + "]";
	}
 }
public class ObjectDemo4 {

	public static void main(String[] args) {
		//创建对象
		Person p1=new Person();
		p1.name=null;
		p1.age=10;
		p1.gender='女';
		Person p2=new Person();
		p2.name="lili";
		p2.age=10;
		p2.gender='女';
		//比较这两个对象的地址值是否相等
		//System.out.println(p1==p2);
		System.out.println(p1.equals(p2));
	}
}
class Person{
	 String name;
	 int age;
	 char gender;
	 //重写equal方法
	 @Override
	public boolean equals(Object obj) {
		//比较地址值是否相等
		 if(this==obj) {
			return true;
		}
		 //判断参数是否为null
		 if(obj==null) {
			 return false;
		 }
		 //判断两个对象的类型是否一致
		 if(this.getClass()!=obj.getClass()) {
			 return false;
		 }
		 //保证person类型和object类型一致,才能调用属性比较
		 //向下造型
		 Person p=(Person)obj;
		 //比较属性
		 if(this.age!=p.age) {
			 return false;
		 }
		 if(this.gender!=p.gender) {
			 return false;
		 }
		 //比较名字
		 //if(this.name==p.name) {//比较内容及this.name=null p.name=null
		 //名字是引用类型---地址值
		 //this.name是String对象,调用的equal方法是String的
		 //这个方法首先比较对象是否一致,如果不一致再比较内容是否一致
		 //this.name==p.name   -----this.name=null p.name=null
		 //NullPointerException----this.name为null
		if(this.name==p.name||this.name!=null&&this.name.equals(p.name)) {
			 return true;
		 }
		return false;
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值