r = new Robet();r.run();
Robet.Heart h = r.new Heart();
h.run();
匿名内部类*
构造函数参数传入时,直接生成一个实现IA接口的匿名内部类的对象。调用run方法时,多态会找到这个不知道叫什么名字的类的覆盖方法。实现接口或者类1在new后面使用,隐含着实现接口或者类,父类类型。2 其他遵循局部内部类的规则3无构造函数。无名嘛===============================================Exceptionjava.lang.Throwable是java.lang.Error和java.lang.Exception的父类。java.lang.Error是指底层的,低级的,严重的,不可恢复的错误,例如内存不足等。程序一定会退出。java.lang.Exception是程序员关注的重点,例外又分为RunTime Exception未检查例外和已检查例外。未检查例外是由于程序的大意,没有相应的检查,而出的例外。此类异常是可以避免的。此类问题应提前提供应对策略,是可能出现的错误提前应对。例如除0,数组越界,强制类型转换错误ClassCastException,等。java.lang.RuntimeException的子类都是未检查错误,去查API。所以是编程避免。已检查例外是需要程序处理的。两种方式:1.方法throws Exception 2.try{...}catch(Exception ex){...}finally{...}第一种是一种消极的处理方式,第二种是一种积极的处理方式。如果不处理,程序非正常退出,影响出现其他代码正常运行,尽管他们没有关系。Java是在网络上传输字节码。所以不会让程序中出现永远运行不到的语句,就是不能有废话。不能存在unreachable statement。
应用try...catch...finally处理异常,保证程序正常退出。
catch可以有多个,但一个异常只能匹配一个,而且catch的Exception从上到下,是子类到父类的顺序,不可颠倒。try块中,有语句可能运行不到,finally无论如何都会被执行,即使catch块中有return语句,除非有System.exit(0);不会走finally块。finally块中,主要放置释放资源,断开网络连接的代码。
一定要执行finally块语句,所以传入参数为2时,try计算完1,不能马上执行return,而是执行finally,最后执行finally块中的return。ex.getMessage() ------>Exception(String message),注意需要构造对象时采用有参构造方法ex.printStackTrace(),打印堆栈信息,最早出现位置,途经哪个方法。开发一般规律:1.try范围控制确定写程序,联动操作,如果第一件事与第二件事无关,不要放置于同一个try块中。如果第一件事影响到第二件事,放在一起。2.try...catch,这种积极的处理方式,放置于最有能力处理的地方,否则采用throws方式,将例外抛给调用者。联想:一个人要办一件事,他需要一个中介来办理,那么他将材料给了代理人,代理将材料提交给执行机构,办理过程中,执行机构发现材料不全,告知代理人,代理是没有能力来处理这件事的,只得再告知办理人,由办理人再行办理。自定义例外class MyException extends Exception{ public MyException(String message) { super(message); }}
==>throw new MyException("");覆盖方法时,覆盖方法的例外抛出类型和数量有限制,类型相等,或者是被覆盖方法例外类型的字类型,数量只能更少。try必须和catch或者finally配套出现。任何代码块中都可以再次嵌套try...catch...finally。