API--Object

API

不同包中可以定义同名的类,同包中不能存在同名的类
同包中的类可以直接使用
但是不同包且不属于java.lang包下的类都需要通过导包才可以使用
import 包名.类名;
import 包名.*;//当前包下包含的类
如果没有导包编译报错:
Cannot resolve symbol ‘Scanner’
一旦类中指定导入了具体的类,则程序中通过简单类名来使用都是导入的类;如果不想使用导入的类,可以通过单独指定全路径名称来使用
如果不导包可以通过使用类的全路径名称来编码
java.util.Scanner sc = new java.util.Scanner(System.in);

常见的包:
java:JDK本身提供
javax:扩展
org:第三方提供的 apache

	java.io : 通过数据流、序列化和文件系统提供系统输入和输出
	java.lang: 默认所有类都导入了该包  提供利用 Java 编程语言进行程序设计的基础类
	java.math: 数学计算相关
	java.net:为实现网络应用程序提供类 
	java.sql:数据库操作相关
    java.util:工具类所属的包

Object

类 Object
是所有类的顶级父类
默认每个java类都会继承Object,如果没有显示指定父类,则父类就为Object;如果单独指定了父类,父类继承了Object,最终多重继承了Object类;
Object类中的方法会被所有类继承到;
所有的类的对象都可以赋值给Object类型的引用–向上造型
构造方法:–创建对象
Object() – 无参构造
通过无参构造来创建对象:
Object obj = new Object();
方法:
protected Object clone() --创建并返回此对象的一个副本。
权限修饰符 返回值类型 方法名
通过调用某个对象的clone的方法可以获取到一个新的对象,属性值和当前对象一样的
注意:
1、clone方法是protected 修饰,只能在本类 同胞类以及子类中访问
2、重写clone方法,将权限修饰符给为public,方法实现通过super调用父类的clone方法
3、clone方法有异常,子类重写时需要抛出异常 调用子类方法时也需要抛出异常
Unhandled exception: java.lang.CloneNotSupportedException
4、clone的返回值Object类型,修改重写的clone方法的返回值类型
例如:
@Override public Person clone() throws CloneNotSupportedException { return (Person) super.clone(); }
5、如果对象需要调用clone方法来拷贝 则需要该对象的类实现Cloneable接口
Cloneable接口中没有任何的属性和方法,Cloneable接口作用为标记接口
java认为clone方法克隆对象存在安全问题,默认情况下不允许克隆对象;如果在开发过程某个类的对象需要克隆,则该类必须实现Cloneable接口

Exception in thread "main" java.lang.CloneNotSupportedException: cn.tedu.object.Person
				at java.lang.Object.clone(Native Method)
				at cn.tedu.object.Person.clone(ObjectDemo.java:36)
				at cn.tedu.object.ObjectDemo.main(ObjectDemo.java:23)

6、Object clone 浅表克隆
如果克隆的对象中有属性是引用数据类型的对象,会将属性对象的地址赋值一份给到新克隆对象的属性;
深表克隆:
如果克隆的对象中有属性是引用数据类型的对象 在克隆时要新创建一个新的属性对象,且新的属性对象的值要和之前属性对象的值一致;
在这里插入图片描述

		案例:
			class Person implements Cloneable{
			    String name;
			    int age;
			    public void eat(){
			        System.out.println("吃饭~");
			    }
			    @Override
			    public Person clone() throws CloneNotSupportedException {
			        return (Person) super.clone();
			    }
			}
			```
			
```java
public class ObjectDemo {
			    public static void main(String[] args) 抛出异常{
					  Person p = new Person();
				        p.name = "张三";
				        p.age = 18;
				        p.eat();
				        System.out.println(p);
					 
				        //调用重写之后的clone方法 克隆p的对象
				        Person p3 = p.clone();
				        System.out.println(p3.name+","+p3.age);
				        p3.eat();
				}
			}

protected void finalize()
当垃圾回收器确定不存在对该对象的更多引用时
由对象的垃圾回收器调用此方法。
自己调用finalize方法并不能立即释放对象的空间
堆空间

Class<?> getClass()
返回此 Object 的运行时类
向上造型时,如果调用对象的getClass方法则可以获取到该对象的实际类型
获取实际类型的全路径名称:
对象.getClass().getName()–返回类的全路径名称的字符串

String toString()
返回该对象的字符串表示
实现代码:

			public String toString() {
			        return getClass().getName() + "@" + Integer.toHexString(hashCode());
			    }

直接通过输出语句输出对象时底层默认就调用该对象的toString方法:

			System.out.println(obj);
				public void println(Object x) {//x=obj
				        String s = String.valueOf(x);
				}
					public static String valueOf(Object obj) {//obj=obj
					        return (obj == null) ? "null" : obj.toString();
					    }

所有子类都会继承Object的toString方法;

toString方法如果需要输出对象的属性值,则可以在子类中重写Object的toString方法;
public String toString(){
return “name:”+name+",age:"+age;
}

int hashCode()–哈希码值
返回该对象的哈希码值。
特点:
同一个对象返回的哈希值相同
不同的对象对应的哈希码值不同
hash值相同–碰撞–概率非常小 暂时不考虑

boolean equals(Object obj)
equals()–比较引用对象的内容是否相同
默认实现比较的是地址

指示其他某个对象是否与此对象“相等”。
Object中equals方法的实现如下:
public boolean equals(Object obj) {
return (this == obj);
}
equals方法的底层实现仍然时比较地址值;

重写equals方法:
1、判断当前对象和参数对象地址值是否相同
2、判断参数对象是否为null 参数的实际类型和当前对象的实际类型是否一致
3、对象每个属性一 一判断 如果所有属性都相同则表示当前两个对象相同 返回true 否则false

==、equals方法:
==比较基本数据类型就是比较数据值
比较引用数据类型就是比较地址值
equals:
比较引用数据类型
如果没有重写equals方法 则比较的是两个对象的地址值
如果重写了equals方法 则比较的是两个对象内容

空指针异常:
当对null调用属性或者方法时,就会抛出异常
NullPointException
if(obj!=null){
//obj的属性和方法
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值