015_面向对象_异常,包和Object类
1.异常(http://blog.csdn.net/hguisu/article/details/6155636)
(1)异常的定义
异常是指在运行期间发生的不正常情况,java中用类的形式对不正常情况进行了描述和封装,称为异常类。不同的问题用不同的类进行具体的描述。
问题很多,描述的类也很多,将其共性进行向上抽取,形成了异常体系。
(2)异常的体系
①Error(程序不可处理的)
是由jvm抛出的严重性问题,这种问题发生一般不针对性处理,直接修改程序。
②Exception(程序可以处理的)
(3)Exception的分类
①编译时异常:Exception中除了子类RuntimeException的异常体系。
这种问题一旦出现,希望在编译时就进行检测,让这种问题有对应的处理方式,都可以针对性的处理
②运行时异常:Exception中的RuntimeException体系。
这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。
运行时异常的特点是Java编译器不会检查它,当程序中可能出现这类异常,即使没有用try-catch语句捕获它,也没有用throws子句声明抛出它,也会编译通过。
(4)throw和throws的区别
①throws使用在方法上,throw使用在函数内
②throws抛出的是异常类,可以抛出多个,用逗号隔开,throw抛出的是异常对象。
(5)异常处理的机制
①抛出异常:当一个方法出现错误引发异常时,方法创建异常对象并交付运行时系统,异常对象中包含了异常类型和异常出现时的程序状态等异常信息。运行时系统负责寻找处置异常的代码并执行。
②捕获异常:在方法抛出异常之后,运行时系统将转为寻找合适的异常处理器。潜在的异常处理器是异常发生时依次存留在调用栈中的方法的集合。当异常处理器所能处理的异常类型与方法抛出的
异常类型相符时,即为合适 的异常处理器。运行时系统从发生异常的方法开始,依次回查调用栈中的方法,直至找到含有合适异常处理器的方法并执行。当运行时系统遍历调用栈而未
找到合适 的异常处理器,则运行时系统终止。同时,意味着Java程序的终止。
具体格式是:
try
{
//需要被检测异常的diamond
}
catch(异常类1 变量)//该变量用于接受发生的异常
{
//处理异常的代码
}
catch(异常类2 变量)//该变量用于接受发生的异常
{
//处理异常的代码
}
finally
{
//无论是否捕获或处理异常,一定会被执行的代码,当在try块或catch块中遇到return语句时,finally语句块将在方法返回之前被执行。
}
(6)异常处理的原则
①函数内容如果抛出需要检测的异常,那么函数上必须要声明。否则必须在函数内用try catch捕捉,否则编译失败
②如果调用到了声明异常的函数,要么try catch要么throws,否则编译失败
③什么时候catch,什么时候throws呢?
功能内容可以解决,用catch
解决不了,用throws告诉调用者,由调用者解决
④一个功能如果抛出了多个异常,那么调用时,必须有对应的多个catch进行
针对性处理。内部有几个需要检测的异常,就抛几个异常,抛出几个,就catch几个。
(7)异常的注意事项
①子类在覆盖父类方法时,父类的方法如果抛出了异常
那么子类的方法只能抛出父类的异常或者该异常的父类
②如果父类抛出多个异常,那么子类只能抛出父类异常的子集
简单说,子类覆盖父类只能抛出父类的异常或者子类或者子集
③如果父类的方法没有抛出异常,那么子类覆盖时绝对不能抛,就只能try。
④多catch时,父类的catch放在最下面。
class LanPingException extends Exception {LanPingException(String msg){super(msg);} }class MaoYanException extends Exception {MaoYanException(String msg){super(msg);} }class NoPlanException extends Exception {NoPlanException(String msg){super(msg);} }class Computer {private int state=1;public void run() throws LanPingException,MaoYanException{if(state==1){throw new LanPingException("电脑蓝屏啦!");}else if(state==2){throw new MaoYanException("电脑冒烟啦!");}}public void reset(){System.out.println("电脑重启");state=0;} }class Teacher {private String name;private Computer computer;Teacher(String name){this.name=name;computer=new Computer();}public void prelect()throws NoPlanException{try{computer.run();System.out.println(name+"讲课");}catch(LanPingException e){System.out.println(e.toString());computer.reset();prelect();}catch(MaoYanException e){System.out.println(e.toString());test();throw new NoPlanException("课时进度无法完成,原因:"+e.getMessage());}}public void test(){System.out.println("电脑坏了,同学们自习!");} }class ExceptionDemo {public static void main(String[] args){Teacher t=new Teacher("李老师");try{t.prelect();}catch(NoPlanException e){System.out.println(e.toString()+"......");System.out.println("换人");}} }
2.包
(1)对类文件进行分类管理,给类提供多层命名(名称)空间。
(2)包与包之间的类进行访问,被访问的包中的类必须是public的,被访问的包中的类的方法也必须是public。
public protected default(默认) private
同一类中 ok ok ok ok
同一包中 ok ok ok
子类中 ok ok
不同包中 ok
(3)导包原则:用到哪个类,就导入哪个类,一般不建议直接导包。 import 包名.*; //导入包中的所有的类。
(4)jar包:将写好的一些类进行打包,再把这些jar包引入你的项目中,然后就可以直接使用这些jar包中的类和属性了,jar包一般都会放在lib目录下。
3.Object类
(1)Object类是不断抽取而来的,具备所有对象都具备的共性内容。
(2)equals方法
①对于任何非空的参考值x和y ,当且仅当x和y引用相同的对象( x == y具有值true )时,该方法返回true 。
②一般都会覆盖equals方法,根据对象的特有内容,建立判断对象是否相同的依据。
(3)hashCode方法
返回对象的哈希码值,如果equals方法没有被覆盖,每次返回的值应相同。
(4)getClass方法
获取当前对象的字节码文件对象。
(5)toString方法
返回该对象的字符串表示。如果没有重写toString方法,那么输出来的默认的字符串内容是“类名+哈希编码”。
转载于:https://www.cnblogs.com/lydbky/p/8305902.html
015_面向对象_异常,包和Object类相关推荐
- java.lang包【Object类】
基本描述: (1)Object类位于java.lang包中,java.lang包包含着Java最基础和核心的类,在编译时会自动导入: (2)Object类是所有Java类的祖先.每个类都使用 Obje ...
- 09_Java面向对象_第9天(类、封装)_讲义
今日内容介绍 1.面向对象思想 2.类与对象的关系 3.局部变量和成员变量的关系 4.封装思想 5.private,this关键字 6.随机点名器 01面向对象和面向过程的思想 A: 面向过程与面向对 ...
- JavaSE学习总结(八)常用类(上)Object类==与equals方法的区别浅克隆的特点Scanner类String类String两种创建对象方式的区别String类的各种功能
JavaSE学习总结(八)常用类(上)/Object类/==与equals方法的区别/浅克隆的特点/Scanner类/String类/String两种创建对象方式的区别/String类的各种功能 常用 ...
- Java基础视频教程第10天_面向对象之异常2、包
一.面向对象--异常- finally finally 代码块:定义一定执行的代码,通常用于关闭资源. 代码示例一: class NoException extends Exception {}cla ...
- python类方法和实例方法syntax errors_《Fluent Python》CH.11_面向对象_接口:从协议到抽象基类...
主要内容 首先,本章说明抽象基类的常见用途:实现接口时作为超类使用 说明抽象基类如何检查具体子类是否符合接口定义,以及如何使 用注册机制声明一个类实现了某个接口,而不进行子类化操作 最后, 说明如何让 ...
- 复习Object类_日期时间类_System类_StringBuilder_包装类以及各类的细节
Object类_日期时间类_System类_StringBuilder_包装类以及各类的细节 主要内容 Object类 Date类 DateFormat类 Calendar类 System类 Stri ...
- JavaSE——面向对象高级(继承、final关键字、抽象类与接口、多态、Object类、内部类、包装类、可变参数)
第3节 面向对象高级 一.继承 1.1 概述和使用 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类.继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法 ...
- JavaSE面向对象:继承、多态、Super、Object类、重写、static、final、静态成员、懒汉式、饿汉式、单例设计模式、初始化块、抽象类、抽象方法、接口
感谢尚硅谷免费提供的视频 继承 ** 理解 ** 生活中的继承:子女继承了父母的财产或相貌或才华 java中的继承:一个类不用自己定义属性或方法,就已经具备了另一个类的属性和方法 把这种现象称为jav ...
- c++ 实现一个object类_说说Object类下面有几种方法呢?
欢迎关注头条号:Java小野猫 今天说一道基础题型,不过很多人会忽略或者至少说不完整,但是面试时被问到的几率还是很大的. 面试题 Object有几种方法呢? Java语言是一种单继承结构语言,Java ...
最新文章
- 二十二、死锁的处理策略----预防死锁
- spring12:注解的方式实现di(依赖注入)
- 第 30 章 lvs-rrd
- JavaScript进阶5-学习笔记
- oracle导数据不释放内存,关于ORACLE数据库delete后释放空间问题
- python爬取公交车站数据_Python爬虫实例_城市公交网络站点数据的爬取方法
- Android中SQLiteOpenHelper类的onUpgrade方法浅谈
- 计算机图形直线分析,基本图形分析法:等腰三角形(一)
- python处理json数据(复杂的json转化成嵌套字典并处理)
- 直插式电阻电容封装与尺寸图…
- 睿智的目标检测37——TF2搭建SSD目标检测平台(tensorflow2)
- 梁宁增长思维30讲笔记 - 模式
- 【已解决】【V3版本】如何使用脚本关闭Win10自动更新服务并阻止其自动启动?
- 家庭局域网的组建(2台或2台以上)
- [译]eBay Elasticsearch性能调优实践
- r语言是高级编程语言_R编程语言介绍
- 【SGD深入理解】vanilia SGDmomentum SGD
- compare()和compareTo()区别
- C语言编写SSH终端
- Shell实战--文件安全性的保证
热门文章
- Spring中你不知道的注入方式
- 从“架构师书单”讲开去
- 大志非才不就,大才非学不成—博文资源汇总
- Hadoop教程(五):Flume、Sqoop、Pig、Hive、OOZIE
- Day 20: 斯坦福CoreNLP —— 用Java给Twitter进行情感分析
- C/C++求职宝典21个重点笔记(常考笔试面试点)
- 25 类:接口 抽象父类 多态 鸭子类型 格式化方法与析构方法 反射 异常处理 自定义异常 断言...
- 报告!我还有几个阿里同事也去了亚运会
- 全能系统监控工具dstat
- 使用二次封装的openStack发行版本网卡至少有2个