java基础2.0:Object、Class、克隆、异常编程
Java编程中两个重要的类Object 和 Class及java异常编程
(1)是所有Java类(API提供的类、自定义类)的最终父类.
(2)作用:在JVM管理对象中的过程中,有一套统一的类型检查和管理标准,便于建立较为清晰的单继承关系体系,可以在Object中定义一组可被子类继承、重写的通用方法.
(3)Object中的方法:
publicString toString():将对象内容转换为字符串的形式来表达;默认实现返回:类名@对象地址 . 与字符串变量结合运算时会自动调用(ex:”String”+object).
注意:建议重写toString方法.
publicint hashCode():要根据对象的信息生成一个唯一的编码(哈希码),用于唯一标识对象;默认实现:根据对象在虚拟机中内部定义来生成哈希码。但默认实现可能存在的问题:不能根据对象的实际存储的数据来唯一标识对象.
注意:建议重写hashCode()方法【获取对象的所有属性,若属性为引用类型,则调用属性hashCode();将所有基本类型属性的值和引用类型的hashCode()值结合到一起运算;公式:值=素数*值(属性的hashCode())累加;重写后可以实现,若两个对象的属性值完全一样,则两个对象的HashCode值也相同】。在重写hashCode()过程中,若遇到引用类型的属性,必须保证其hashCode也被重写才可靠。
public Boolean equals(Object obj):用当前对象与指定对象比较相等的方法。equals比较的对象的“内容”(所有属性值)相等,默认实现是比较两个对象的内存地址是否相等。建议重写!重写的方法:判断传入的对象,是否与当前对象为相同类型(instanceof判断对象的类型),然后一个一个属性比较,看是否相等,若所有属性都相等,则结果为true,只要有一个属性不相等,结果为false.特点:equals方法的执行结果与hashCode()执行结果必须一致,两个对象的hashCode相同,则equals方法的执行结果为true,反之为false.
注意:equals与==的区别:
什么时候用==:若比较的值为基本数据类型(简单类型),若是引用类型,在需要比较两个引用是否指向同一地址时,使用==
什么时候用equals:比较两个引用类型的值,其内容(各个属性)是个相等.
注意:在重写equals方法时,其属性若是引用类型,则必须保证在定义时重写过hashCode方法.
public class getClass():返回运行时对象的类型信息,不建议重写.
public void finalize():资源回收方法,在垃圾回收机制执行时,会调用该方法释放内存资源,且只能在JVM垃圾回收器工作时,被自动调用.
作用:为JVM提供类的结构信息,每一个被JVM加载的字节码文件,都对应一个Class对象,对其进行描述。(使用主要体现反射机制)
注意:Class对象由JVM自动创建,编程人员无法通过API直接new对象.
对象克隆:
(1) 概念:Object.clone():创建当前对象的副本;前提条件:实现的Cloneable接口
(2) 意义:简化对象的拷贝,通过JDK平台统一一个对象副本的创建方式.
(3) super.clone():是java本地的方法,通过虚拟机JVM内部机制自动完成对象内容的复制。
(4) java对象的克隆方式:
1浅度克隆
特点:只完成当前对象这一层次上的拷贝复制,其属性值并没有真正意义上的拷贝,而是继续使用原对象的属性值.
优点:克隆性能较高.
缺点:拷贝出的对象对原有对象的依赖度较高.
2深度克隆
特点:对对象的所有全部拷贝出来(所有属性的值也都是拷贝结果,而非原值).
优点:拷贝出来的对象独立性高.
缺点:拷贝过程消耗性能,复杂度高
(5)克隆使用的场景
1对象的批量复制.
2有大量数据需要进行备份时.
对象数组及排序:
(1) 数组:
java平台上数组是一个特殊的对象类型
语法定义:new int[长度] 或{值,值,值} ,任意类型的数组都有length属性
(2) 对象类型的数组:
特点:对象类型的数组,可以用来组织多个类型相同对象引用
语法定义:new 类名[长度] 或{new 类(),new 类(),new 类()……}
(3) 利用数组有序的特点对数据进行排序:
对象数组排序的特点:下标中存储的数据时复杂数据类型,需要结合排序场景进行对数据属性进行比较.
对象数组排序方法:java.lang.Comparable接口
实现比较接口java.lang.Comparable提供的比较方法compareTo()方法:
1当前对象比比较对象小,则返回负数.
2当前对象比比较对象大,则返回正数.
3当前对象等于比较对象,则返回0.
优点:封装了同类对象比较大小的规则,让对象比较更加简便,java平台的标准比较接口,可以与Collections.sort()相结合,可以与Arrays.sort()相结合【使用归并排序】.
(三)Java异常编程
(1) 什么是异常?
异常是指在程序执行的过程中,没有按照预期执行情况运行的状态。
(2) 与错误的区别:异常可以避免,通过代码挽救,让程序继续执行;但错误
是可以影响程序继续执行的严重问题。
(3) 异常类:java.lang.Throwable–所有错误或异常的超类,两个子类:
java.lang.Exception –合理的应用程序想要捕获的异常条件.
java.lang.Error –不应该试图捕获的严重问题.
注意:运行时异常不需要强制声明,不需要强制捕获.
(5) 处理异常:
抛出异常:
1.throws
作用:用来在方法的声明部分,定义可以抛出的异常类型,可以指导方法实现者,告诉其声明情况可以将异常抛出,通知方法的调用者,这个方法有可能会出现所定义的这些异常,请注意捕获。
注:若在main方法的声明中进行定义,该类异常会抛出给虚拟机处理;若异常传递到虚拟机层面,则java程序有可能终止执行。
2.throw
作用:生成一个异常对象,并将它向外抛出。
捕获异常:
try/catch:
try:用来组织正常执行的代码实现,并随时准备对可能出现的异常进行处理(默认情况下try语句块总会执行,但一旦出现异常就会马上中止,跳转到catch块中执行).
catch:一旦在try中捕获到异常,则交给catch语句块来负责处理。
finally:该语句块中的代码总会被执行(难点:在try或catch语句块中通过return终止当前代码继续向下,或者在catch语句块中通过throws终止当前代码继续向下的情况,finally总会被执行到).
(6) 设置自定义异常:定义构造方法
1.无参构造器
2.带String参数的构造器
3.带Throwable参数的构造器
(7) 异常父子类关系对catch语句块设计的影响:影响catch语句块捕获异常的顺序,根据继承的特征,子对象在类型检查时也可以被认为是父类对象。
规则:从小异常捕获到大异常,从异常的子类捕获到异常的大类(调用父类的字符串或Throwable参数的构造方法(super)).