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)).
java基础2.0:Object、Class、克隆、异常编程的更多相关文章
- 7天学完Java基础之0/7
笔记-7天学完Java基础之0/7 1.常用命令提示符(cmd) 启动:Win+R,输入cmd
- java基础之 超类Object
一.概述: Object类是所有Java类的祖先.每个类都使用 Object 作为超类.所有对象(包括数组)都实现这个类的方法.在不明确给出超类的情况下,Java会自动把Object作为要 ...
- java基础面试题:运行时异常与一般异常有何异同?error和exception有什么区别? 请写出你最常见到的5个runtimeexception?
Throwable是Java错误处理的父类,有两个子类:Error和Exception. Error:无法预期的严重错误,导致JVM虚拟机无法继续执行,几乎无法恢复捕捉的 Exception:可恢复捕 ...
- java基础3.0:Java常用API
本篇介绍Java基础中常用API使用,当然只是简单介绍,围绕重要知识点引入,巩固开发知识,深入了解每个API的使用,查看JavaAPI文档是必不可少的. 一.java.lang包下的API Java常 ...
- java基础知识总结--对象的克隆
前提:在Java语言中所有的类的都是缺省的继承Java语言中的Object类的, protected native Object clone() throws CloneNotSupportedExc ...
- Java基础教程(19)--Object类
Object类位于类结构树的最顶端,所有的类都是它的直接或间接子类,因此所有的类都继承了Object类的方法,我们可以在需要的时候覆盖这些方法.下面是一些将会在本文中讨论的Object类的方法: ...
- [ 转载 ] Java基础10--关于Object类下所有方法的简单解析
关于Object类下所有方法的简单解析 类Object是类层次结构的根类,是每一个类的父类,所有的对象包括数组,String,Integer等包装类,所以了解Object是很有必要的,话不多说,我们直 ...
- 黑马程序员——【Java基础】——面向对象(二)异常机制、包(Package)
---------- android培训.java培训.期待与您交流! ---------- 一.异常机制 (一)异常概述 1.异常:就是程序在运行时出现不正常情况. 2.异常类:程序在运行时,出现的 ...
- Java 基础 常用API (Object类,String类,StringBuffer类)
Java API Java 的API(API: Application(应用) Programming(程序) Interface(接口)) Java API就是JDK中提供给我们使用的类,这些类将底 ...
随机推荐
- JMeter学习(四)参数化
JMeter也有像LR中的参数化,本篇就来介绍下JMeter的参数化如何去实现. 参数化:录制脚本中有登录操作,需要输入用户名和密码,假如系统不允许相同的用户名和密码同时登录,或者想更好的模拟多个用户 ...
- guava函数式编程
[Google Guava] 4-函数式编程 原文链接 译文链接 译者:沈义扬,校对:丁一 注意事项 截至JDK7,Java中也只能通过笨拙冗长的匿名类来达到近似函数式编程的效果.预计JDK8中会有所 ...
- [No000023]为何没有更多人从事程序员的工作?程序员常有,优秀程序员不常有!
成为优秀的程序员是极其困难的,并且这个过程不可能一蹴而就. 我们不可能期待去种一些树,然后一夜间收获有着2000年树龄的红杉树,无论其需求有多大. 人格特点 一个人首先得是自学者来学习编程.仅仅是超过 ...
- Web API 接口
Web API 接口 在给网站编写 JavaScript 代码时,也有很多可用的 API.您可以使用下面的接口(也称为对象的类型)列表,开发 Web 应用程序或网站. 关于包含这些接口的 API 列表 ...
- js的client、scroll、offset详解与兼容性
clientWidth:可视区宽说明:样式宽+padding参考:js的client详解 scrollTop : 滚动条滚动距离说明:chrome下他会以为滚动条是文档元素的,所以需要做兼容:var ...
- 无法安装 DotNetCore.1.0.0-VS2015Tools.Preview2解决方法
安装 DotNetCore.1.0.0-VS2015Tools.Preview2,已经安装vs2015update3,还是提示检测到 Visual Studio 2015 Update 3没有完全安装 ...
- SQL SERVER的连接方式
最近在做项目的时候,遇到了SQLSERVER的连接,以前是很模糊的,现在做一个简单的总结. 针对SQL_SERVER,连接指定的方式有两种,一种是Where条件指定方式,另外一种是采用On连指定连接条 ...
- java多线程系类:基础篇:03Thread中的start()和run()的区别
这个系类的内容全部来源于http://www.cnblogs.com/skywang12345/p/3479024.html.特别在此声明!!! 概要 Thread类包含start()和run()方法 ...
- Linux shell循环
条件测试 格式 test condition 或 [ condition ] 使用方括号时,要注意在条件两边加上空格,如果有操作符,运算符之间也必须有空格 测试状态:测试的结果可以用$?的值来判断,0 ...
- 关于onbeforeunload的一些想法
页面在关闭前会有onbeforeUnload事件,来询问用户是否要关闭这个页面OR选项卡 浏览器的F5刷新为按下F5----onbeforeUnload----onunload----onload; ...