Java中的接口与异常问题?(100分)

小弟对Java中的接口和异常有点疑问,请高手解答

1.接口的疑问
我认为接口是单根继承的一个补丁,他能多重实现。但接口里面的方法全是抽象方法,没有方法体,也就是我实现这个接口就需要重写。那么代码的复用性怎么体现?
我想接口+继承才变得有意义,用一个超类来实现一个用于声明的接口,然后让其他的子类的继承这个超类,如果有个别需要再重写,但跟开闭原则有点冲突,我实在有点不明白面向接口的编程是怎样的?

2.异常的疑问
我们在引入抛出这个概念的时候,特别是方法的抛出异常,编程不可能对每一条语句都实现监控,不可能每个语句都try,我们现在把关注的对象变成了关注一个方法,那么在一个方法内,一旦有了异常,它将会马上抛出到方法体外部,这样这个方法就结束了,怎样做才能实现“要做的内容”和“出现的异常处理”相分离,我想做的是把异常都抛到一个地方来统一处理,但是却不能保证程序正常的运行。

请高手解答,小弟万分感谢!

首先,什么是面向接口编程?我想你理解片面了,举个简单的例子,如:
ArrayList l = new ArrayList();
像这样就是面向实现编程,我们希望面向接口编程,如下:
List l = getContainer("java.util.Vector");

其中的getContainer可能有这样一个实现
public List getContainer(String listName) throws Exception {
return (List)Class.forName(listName).newInstance();
}

像上面的例子中,你可以把ArrayList的对象赋值给List的引用,也可以把Vector或是Stack等的对象赋值给List的引用,如果你用
ArrayList l = getContainer("java.util.Vector");
就出错了,没有办法像面向接口编程那样灵活了

面向接口编程的一个目的就是让设计更有灵活性

至于你说的多继承,c++中确实是这种模式,用这种模式,也就不需要接口了。java为什么摒弃这种方式,是为了编程简单,如果你学过c++,你应该知道多重继承带来的方法相同(如a中有个method方法有个默认实现,b中也有个方法method含有默认实现,此时如果c类同时继承a和b就会出现方法冲突)处理是比较麻烦的,编程人员觉得麻烦,编译器的实现也很麻烦。

至于异常问题,如果一个方法出现异常了,表示这个业务出现问题了,还有走下去的意义么?!

比如一个简单银行转账,你从a银行转出,准备转到b银行,而你在转出的时候抛出异常了,转出失败,此时还有必要转进b银行么!
try...catch的作用无非如下几点:
1、try里面的东西对业务影响不大,出错就出错,直接catch掉就得了
2、try里面的东西是业务的核心,一旦抛异常,业务一定就失败了,此时可以catch一下,打个日志什么的,然后异常继续向上抛
3、try里面可能抛出让人难以理解的异常,此时可能需要catch一下,在catch中重新抛出一个容易理解的异常,这相当于异常转换
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-09-03
面向接口的编程主要是一个高层次的设计,就像计算机网卡一样,网卡很多人在做,但是基本功能都一样,这个基本功能的出台就是一个面向接口的过程,你不可能知道各个厂家各自实现功能的手段,但是你只需要定义他要实现那些功能就是。这就是一个接口的过程。面向接口的编程只有当你到达一定层次的时候才有体会的,很不幸我还没达到。

接口的代码复用性,接口一般定义的都一些最抽象的东西,这就注定了他本身是不实现任何功能的,所以也谈不上什么复用性了,接口也没什么代码给你用,相反你还要必须实现接口定义的功能。而且在实际的时候接口一般只定义一些最基本的行为,而初步实现则是交付给抽象类,最后的功能还是留你自己了。这个三部曲也时很多接口实现模式的过程。

关于异常,有的异常是程序自己的原因,比如空指针,越界之类,这类异常就要避免了,而有些异常则是外界原因,比如保存文件时磁盘控件不足,这个时候你就捕获异常提示用户了,不能没保存成功也不提示用户。“要做的内容”就是避免代码原因造成的异常,就想前面的空指针 越界。“出现的异常处理”则是一个程序的完善过程,就如保存文件时磁盘控件不足,你不能说什么都不提示直接退出程序,然后人家需要文件的时候发现没有这个文件,所以你要提示用户没有保存成功。让用户重新选择路径再次保存,直到保存成功。
第2个回答  2009-08-31
我的笔记:
类A想要使用类B中的方法时有两种方式:
●一种是在类A中直接使用import语句将类B引入,然后在类A中直接实例化类B的对象,然后用该对象去调用其内的方法。
●另一种方法是在两者之间创建一个接口,一旦类B实现了这个接口,类A就可以通过使用此接口使用类B,当然也就可以使用类 B中的方法了,但都是间接的使用即使用类B中的方法的代码写在了接口(方法)中,使用这种方式的目的是降低模块间的耦合性。即面向对象系统就是由相互通信的对象组成,如果遵循接口来编写代码,一个类与另个类通信时,就不用对另一个类了解太多,两个类相互了解得越少,它们相互间的耦合就越松。

异常的我就不多说了,你是纯理论型的,首先并不是每一个方法都会抛出异常,只有个别的方法是需要抛出异常的,像你说的当然可以都放在一起处理了,前提是你的有可能抛出异常的语句能那么集中在一起吗,其实说这些都没用,具体做的时候你就知道了。不要怀疑sun
第3个回答  2009-09-01
接口是一种规则体现可扩展性,继承体现重用.至于异常.我们的目标的没有异常发生.要有一堆异常等着分离.可想你的程序…
第4个回答  2009-08-30
所有的异常都是通过扩展Exception类来实现的,所以,如果不知道会抛出什么异常的时候,你可以用Exceptioin来捕捉。一般来说,构造自己的异常类的时候都应该扩展Exception,如
public class NotPluralExceptionextends Exception{
public NotPluralException(String msg){
super(msg);
}
}
然后在你程序中可以用自己定义的异常
public class Plural{
int value ;
public Plural(int i,int t) throws NotPluralException{
value = i * i;
if(value/1 == value){

}else{
throws new NotPluralException("不是复数");
}
}
}
所以在捕捉的时候就可以写
try{
...
}catch(NotPluralException e){
e.printStackTrace();
}

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网