zoukankan      html  css  js  c++  java
  • 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)).

  • 相关阅读:
    store.js
    ## $.each() 与.each()的区别
    创建新的option
    js 一个程序运行的时间计算
    HTML5之FileReader的使用(转)
    js 队列
    js 栈(进制转换)
    原生js实现二级联动
    原生js实现三级联动
    工具安装-Mac 卸载python3
  • 原文地址:https://www.cnblogs.com/fireinwater/p/6235925.html
Copyright © 2011-2022 走看看