java,
java,
一、接口:
接口对期成员变量和方法有很多限制:
1.接口中的成员变量默认都是public、static、final类型的,因而必须被显式的初始化;
2.接口中的方法默认都是public,abstract类型的.
3.接口中只能包含public,static,final类型的成员变量和public,abstract类型的成员方法.
4.一个接口不能实现另一个接口,但是它可以继承其它多个接口.
接口和抽象类的主要区别:
1.在抽象类中可以为部分方法提供默认的实现,从而避免在子类中重复实现它们,提高代码的可重用性;而接口中只能包含抽象方法.
二、异常
异常流程的运行过程
(1)finally语句不能被执行的唯一情况是先执行了用于终止程序的System.exit()方法。
(2)return语句用于退出本方法.在执行try或catch代码块中的return语句时,假如有finally代码块,会先执行finally代码块.
public class WithResult{ public int methodA(int money) throws SpecialException{ if(--money<=0) throw new SpecialException("Out of money"); return money; } public int methodB(int money) { try { System.out.println("Begin"); int result=methodA(money); return result; } catch (SpecialException e) { // TODO: handle exception System.out.println(e.getMessage()); return -100; } finally{ System.out.println("Finally"); } } public static void main(String[] args) { System.out.println(new WithResult().methodB(1)); } }
结果:
Begin
Out of money
Finally
"return -100"
(3)finally代码块虽然在return语句之前被执行,但finally代码块不能通过重新给变量赋值的方式来改变return语句的返回值.
public static int test() { int a=0; try{ return a; } finally { a=1; } } public static void main(String[] args) { System.out.println(test()); }
尽管先执行a=1;但是return 的值是0
(4)建议不要在finally代码块中使用return语句,因为它会导致一下两种潜在的错误。第一种是会覆盖try或者catch代码块中的return语句,第二种是丢失异常(try或者catch块中有抛出异常,但是在finally中被无意间取消)。
在程序运行中,任何中断正常流程的因素都被认为是异常.按照面向对象的思想,java语言用java类来描述异常.所有的异常类的祖先类为java.lang.Throwable类。他有两个方法:getMessage()和printStackTrace()。Throwable类有两个子类:Error类,表示仅靠程序本身无法恢复的严重错误,比如内存空间不足,或者java虚拟机的方法调用栈溢出。Exception类,表示程序本身可以自己处理的异常。
应该尽量保持异常的原子性.异常的原子性是指当异常发生后,各个对象的状态能够恢复到异常发生前的初始状态,而不至于停留在某个不合理的中间状态.保持异常的原子性有以下办法:
(1)最常见的方法是先检查方法的参数是否有效,确保当异常发生时还没有改变对象的初始状态.
(2)编写一段恢复代码,由他来解释操作过程中发生的失败,并且使对象状态回滚到初始状态.
(3)在对象的临时拷贝上进行操作,当操作成功会,把临时拷贝中的内容覆盖到原来的对象中.
三、内部类
内部类:在一个类的内部定义的类称为内部类。
实例内部类:成员内部类的一种,没有static修饰符。
(1)在创建实例内部类的实例时,外部类的实例必须已经存在。例如,要创建Inner类,则先必须创建Ourter类。
Outer.Inner tool=new Outer().Inner()
(2)实例内部类的实例自动持有外部类实例的应用,可以访问外部类的所有成员。
(3)外部类实例与内部类实例之间是一对多的关系,一个内部类实例只会引用一个外部类实例,而一个外部类实例可以引用多个内部类实例。
(4)在实例内部类中不能定义静态成员,而只能定义实例成员。
(5)如果实例内部类B与外部类A包含同样的成员v,那么在类B中使用this.v表示B的成员,A.this.v表示A的成员
静态内部类:成员内部类的一种,使用static修饰。
(1)静态内部类的实例不会自动持有外部类的特定实例的引用,在创建内部类的实例时,不必先创建外部类。
(2)静态内部类可以直接访问外部类的静态成员,如果要访问外部类的实例成员,就必须先创建外部类的实例。通过外部类的实例去访问。
(3)在静态内部类中可以定义静态成员和实例成员。
(4)客户类可以通过完整的类名直接访问静态内部类的静态成员。
相关文章
- 暂无相关文章
用户点评