第九天总结0401

来源:互联网 发布:手机如何看淘宝信誉 编辑:程序博客网 时间:2024/05/01 15:13

1.异常
Throwable可抛出,具备可抛性
getMessage返回此throwable的详细消息字符串
toString返回此throwable的简短描述
PrintStackTrace将此throwable几期追中输出至标准错误流
当一个try对应多个catch的时候,父类的对象要往下放,更具体
一点,抛几个错误就catch几个错误,最好不要写更多的。
2.异常出现的好处
异常最大的好处就是可以使程序跳转,
if仅仅用在局部,而异常可以引起程序跳转。
出现问题,已经导致运算无法再进行下去的时候,或者结果对后面毫无意义的时候,程序一定要跳转。
throw与throws的区别
throw后面跟的是异常对象,是把一个实体抛出去了,他在函数内,被throw抛出后必须要throws在函数上标志出来,抛什么标什么
throws是做标示用的,在函数上,后面跟的是异常类名,可以跟多个,而且可以用逗号隔开
如果在函数内用try.catch已经处理了throw抛出的异常,那么就不用再函数上用throws标示了,如果没有catch,只有try或者finally,try是可以单独跟着finally的,这种情况的话必须在函

数上用throws标示异常
不用再函数上标示的两种情况:
a>内部给处理掉了,就不用标示,只有catch才代表处理了异常
b>内部抛出的是runtimeexception或者其子类异常
如何完成自定义异常
1)定义一个类继承Exception即可,这就具有可抛性了
2)假设异常已发生就有提示,则在异常类中建立构造函数定义,但是不需要对外发布,因为父类中有各类发布的方法
3)定义自定义异常信息,只要将异常信息用super语句向父类构造函数传递即可
RuntimeException是一种特殊的运行时异常,不需要让用户知道
如果发生运行时异常,比如说算术异常,那么此时运算的结果没法参与后续运算,所以JAVA就默认程序此时必须跳转中断,不能再继续往下运行,所以如果函数内有throw抛出了异常,那么在

函数上就不用throws抛出了,因为程序不会继续运行。
自定义异常有两种选择,要么继承Exception要么继承RuntimeException
错误,Error
因为错误也是Throwable的子类,所以他也具有可抛性,可以在函数内用throw抛出,抛错误和RuntimeException的道理是一样的,Error是重大问题,没法处理,必须让程序停掉,所以不用标

示,不要让用户去处理
在try.catch.finally语句中,finally中语句是一定会执行到的语句,如果catch语句中加了return返回了,则finally中的语句仍然继续执行,finally下面的语句就不在执行了。
只有一种情况,连finally都读不到,那就是在catch中输入System.exit(0);这是系统退出语句。数据库的例子
在开发的时候,本层的特有异常要在本层内封装处理,然后告诉其他层一个简单的异常信息,不用他们操作
在继承中,子类只能抛父类中异常的子集或者子类。或者抛父类一样的异常,还可以不抛
练习
假如我们在开发一个系统时需要对员工进行建模,员工包含 3个属性:姓名、工号以及工资。经理也是员工,除了含有员工的属性外,另为还有一个奖金属性。请使用继承的思想设计出员工

类和经理类。要求类中提供必要的方法进行属性访问。
abstract class Employee//由于经理和文员同属公司员工,所有有共同的属性和行为,向上抽取得到这个类
{
 private String name;
 private String ID;
 private double pay;
 Employee(String name,String ID,double pay)//构造函数初始化
 {
  this.name=name;
  this.ID=ID;
  this.pay=pay;
 }
 public String getName()
 {
  return name;
 }
 public String getID()
 {
  return ID;
 }
 public double getPay()
 {
  return pay;
 }
 public abstract void work();//因为经理和文员的工作方法是不一样的,所以用抽象函数,所以这个类是个抽象类
}
class Manager extends Employee
{
 private double bonus;
 Manager(String name,String ID,double pay,double bonus)//子类构造函数在初始化的时候先要默认访问父类的空参函数
 {
  super(name,ID,pay);//不让其访问父类空参构造函数,指定访问
  this.bonus=bonus;//this代表的是对所在函数所属对象的引用
 }
 public double getBonus()
 {
  return bonus;
 }
 public void work()//覆盖父类抽象方法
 {
  System.out.println("我是经理");
 }
}
class Clerk extends Employee
{
 Clerk(String name,String ID,double pay)
 {
  super(name,ID,pay);
 }
 public void work()
 {
  System.out.println("我是文员");
 }
}

class Company
{
 public static void main(String[] args)
 {
  Employee person=new Manager("张三","SC01998",8888.88,6666.66);//父类引用接收子类对象,注意变量和函数的用法区别
  System.out.println("雇员姓名:"+person.getName());
  System.out.println("雇员工号:"+person.getID());
  System.out.println("雇员工资:"+person.getPay());
  System.out.println("雇员奖金:"+((Manager)person).getBonus());
  person.work();

 }
}

 

原创粉丝点击