n*****e 发帖数: 76 | 1 就两java问题,第一个,啥时候用interface,啥时候用abstract class?举例子说明
。第二个,啥时候用throwable,啥时候用exception?两个都不知道怎么回答。
怎么才能快速提高java水平?请教大牛们。。。 |
d**********x 发帖数: 4083 | 2 先看看effective java啊。
【在 n*****e 的大作中提到】 : 就两java问题,第一个,啥时候用interface,啥时候用abstract class?举例子说明 : 。第二个,啥时候用throwable,啥时候用exception?两个都不知道怎么回答。 : 怎么才能快速提高java水平?请教大牛们。。。
|
n*****e 发帖数: 76 | 3 好的,马上就看
【在 d**********x 的大作中提到】 : 先看看effective java啊。
|
p*****2 发帖数: 21240 | 4
过两天让公司给买本看看。
【在 d**********x 的大作中提到】 : 先看看effective java啊。
|
l**b 发帖数: 457 | 5 head first java吧,然后随便考个SCJP,以后这种都不怕了。
1)需要多种继承关系的时候只能用interface,如果有需要继承到subclass里面的
instance variable的话,就只能用abstract class
2)exception是throwable的subclass,throwable包括了主要2种exception,一个必须
catch的,比如Exception,或者很多类型的IOException都是一定要catch的,另一种是
不一定要catch的,比如ArrayIndexOutOfBound,或者Integer除0的时候的Exception。
具体名字自己查吧。
仅供参考,大牛轻打。 |
p*****2 发帖数: 21240 | 6
一直不明白为什么一定要catch呢?主要是出于什么目的?
【在 l**b 的大作中提到】 : head first java吧,然后随便考个SCJP,以后这种都不怕了。 : 1)需要多种继承关系的时候只能用interface,如果有需要继承到subclass里面的 : instance variable的话,就只能用abstract class : 2)exception是throwable的subclass,throwable包括了主要2种exception,一个必须 : catch的,比如Exception,或者很多类型的IOException都是一定要catch的,另一种是 : 不一定要catch的,比如ArrayIndexOutOfBound,或者Integer除0的时候的Exception。 : 具体名字自己查吧。 : 仅供参考,大牛轻打。
|
l***i 发帖数: 1309 | 7 signature里面写throw xxxException主要是给caller一个机会handle Exception吧,
其实caller也
可以直接不管然后在自己的signature里面照抄那个Exception就好了.不过看名字感觉
Throwable像个interface阿。java里面还有什么xxxable是class么?
大牛出来指点一下 |
p*****2 发帖数: 21240 | 8
明白。就是把Exception更规范话了,虽然代码比较恶心了。Throwable确实听起来像
interface.
【在 l***i 的大作中提到】 : signature里面写throw xxxException主要是给caller一个机会handle Exception吧, : 其实caller也 : 可以直接不管然后在自己的signature里面照抄那个Exception就好了.不过看名字感觉 : Throwable像个interface阿。java里面还有什么xxxable是class么? : 大牛出来指点一下
|
l**b 发帖数: 457 | 9 一个简单的实例,如果JDBC的connection你不close,中间出了Exception,那个
connection怎么说?
所以大家如果用JDBC的时候都这么写:
Connection con = null;
try {
con = connectionPool.getConnection();
// Do sth with your connection
} finally {
if (con != null) try { con.close(); } catch (Exception e) {}
}
当然,现在java的这个exception handling的model有很多人反对,因为觉得根本就是
waste of time,比如上面这个例子,你只能close那个connection,其他没就没有任何
事情可以做了。所以很多人现在完全不用try catch。有一些更好的pattern可以用,上
面这个例子在scala里面就可以用loan pattern。Java里面应该可以直接用pool就解决
了。
【在 p*****2 的大作中提到】 : : 明白。就是把Exception更规范话了,虽然代码比较恶心了。Throwable确实听起来像 : interface.
|
l**b 发帖数: 457 | 10 Throwable肯定是interface,所有的exception都可以自己handle,也可以throw给
calling method。这个看你具体的需求吧。
exception是泛指,Exception是指java class
【在 l***i 的大作中提到】 : signature里面写throw xxxException主要是给caller一个机会handle Exception吧, : 其实caller也 : 可以直接不管然后在自己的signature里面照抄那个Exception就好了.不过看名字感觉 : Throwable像个interface阿。java里面还有什么xxxable是class么? : 大牛出来指点一下
|
|
|
p*****2 发帖数: 21240 | 11
主要是我写code的时候图方便不想管的那么细。但是用到java的一些函数必须让我try
catch,或者函数throw。我是觉得,我是图快,有exception,你把我程序crash就可以
了。我不care。感觉这东西就Java有吧?C#是不是也没有?
【在 l**b 的大作中提到】 : 一个简单的实例,如果JDBC的connection你不close,中间出了Exception,那个 : connection怎么说? : 所以大家如果用JDBC的时候都这么写: : Connection con = null; : try { : con = connectionPool.getConnection(); : // Do sth with your connection : } finally { : if (con != null) try { con.close(); } catch (Exception e) {} : }
|
T****U 发帖数: 3344 | 12 1) abstract class 可以有non-abstract method and variable
2) 只有checked exception才必须declare, 倒不一定catch, 可以throw给下家。具体必
须用throwable的地方还真不多,因为exception可以随便定义的
估计只有不知道调用程序会出来个什么东西时,才需要catch throwable
【在 l**b 的大作中提到】 : head first java吧,然后随便考个SCJP,以后这种都不怕了。 : 1)需要多种继承关系的时候只能用interface,如果有需要继承到subclass里面的 : instance variable的话,就只能用abstract class : 2)exception是throwable的subclass,throwable包括了主要2种exception,一个必须 : catch的,比如Exception,或者很多类型的IOException都是一定要catch的,另一种是 : 不一定要catch的,比如ArrayIndexOutOfBound,或者Integer除0的时候的Exception。 : 具体名字自己查吧。 : 仅供参考,大牛轻打。
|
T****U 发帖数: 3344 | 13 不露棒?
try
【在 p*****2 的大作中提到】 : : 主要是我写code的时候图方便不想管的那么细。但是用到java的一些函数必须让我try : catch,或者函数throw。我是觉得,我是图快,有exception,你把我程序crash就可以 : 了。我不care。感觉这东西就Java有吧?C#是不是也没有?
|
l**b 发帖数: 457 | 14 C#很久很久不用了,但是我记得我和我一个同学说过这个东西,我同学和我说的是C#里
面的exception都是相当于java里面的throwable,不一定要catch的,而且method里面
也不会声明有那个exception会被thrown
都赖,现在真的老老实实写try catch的很少,一般都直接在method里面继续throws
try
【在 p*****2 的大作中提到】 : : 主要是我写code的时候图方便不想管的那么细。但是用到java的一些函数必须让我try : catch,或者函数throw。我是觉得,我是图快,有exception,你把我程序crash就可以 : 了。我不care。感觉这东西就Java有吧?C#是不是也没有?
|
c********t 发帖数: 5706 | 15 查了一下,Throwable竟然是class
【在 l**b 的大作中提到】 : Throwable肯定是interface,所有的exception都可以自己handle,也可以throw给 : calling method。这个看你具体的需求吧。 : exception是泛指,Exception是指java class
|
p*****2 发帖数: 21240 | 16
啥意思呀?
【在 T****U 的大作中提到】 : 不露棒? : : try
|
c********t 发帖数: 5706 | 17 嗯,是的。实在不能throws的时候,我用catch (Exception e)代替catch各种type,然
后基本上啥都不做,或者只是 printStackTrace。我绝对懒人一个。
Throwable没用过。 :(
【在 l**b 的大作中提到】 : C#很久很久不用了,但是我记得我和我一个同学说过这个东西,我同学和我说的是C#里 : 面的exception都是相当于java里面的throwable,不一定要catch的,而且method里面 : 也不会声明有那个exception会被thrown : 都赖,现在真的老老实实写try catch的很少,一般都直接在method里面继续throws : : try
|
c********t 发帖数: 5706 | 18 not robust!
【在 p*****2 的大作中提到】 : : 啥意思呀?
|
p*****2 发帖数: 21240 | 19
参加比赛还要啥robust呀。速度至上。
【在 c********t 的大作中提到】 : not robust!
|
l**b 发帖数: 457 | 20 NB,明显违反了Java的命名规则。
【在 c********t 的大作中提到】 : 查了一下,Throwable竟然是class
|
|
|
n*****e 发帖数: 76 | 21 确实是class,从来不用的以前,到现在还没搞明白到底区别在哪里,小印太狠了
【在 c********t 的大作中提到】 : 查了一下,Throwable竟然是class
|
p*****2 发帖数: 21240 | 22 刚才看了一下书,还没明白。到底什么时候用throwable呢? |
l**b 发帖数: 457 | 23 个人感觉,你的app需要处理所有的exception的时候,你可以try catch Throwable,
还有就是你要自己写unchecked exception的时候也要继承Throwable。其他就没什么用
了,一般写library的会用到比较多,如果是写application的,一般很伤会用到
throwable,但是我们在写一些service什么的时候会习惯catch 所有的Throwable然后
log一下看看是什么。
【在 p*****2 的大作中提到】 : 刚才看了一下书,还没明白。到底什么时候用throwable呢?
|
l*****a 发帖数: 14598 | 24 throwable包括两种
一种是Error另一种是Exception
你说的checked exception/unchecked exception
【在 l**b 的大作中提到】 : head first java吧,然后随便考个SCJP,以后这种都不怕了。 : 1)需要多种继承关系的时候只能用interface,如果有需要继承到subclass里面的 : instance variable的话,就只能用abstract class : 2)exception是throwable的subclass,throwable包括了主要2种exception,一个必须 : catch的,比如Exception,或者很多类型的IOException都是一定要catch的,另一种是 : 不一定要catch的,比如ArrayIndexOutOfBound,或者Integer除0的时候的Exception。 : 具体名字自己查吧。 : 仅供参考,大牛轻打。
|
l**b 发帖数: 457 | 25 嗯,大牛给的更加准确,我已经全部还给书本了。
【在 l*****a 的大作中提到】 : throwable包括两种 : 一种是Error另一种是Exception : 你说的checked exception/unchecked exception
|
l***i 发帖数: 1309 | 26 二爷您看看那几个知名的java topcoder, petr, Egor, uwi啥的,人家不仅搞得快,
而且各项指标包括readability, variable naming都不会偷懒的。
【在 p*****2 的大作中提到】 : 刚才看了一下书,还没明白。到底什么时候用throwable呢?
|
p*****2 发帖数: 21240 | 27
如果java没有这死限制不是可以更快吗?有了这个限制反而影响了readability。
【在 l***i 的大作中提到】 : 二爷您看看那几个知名的java topcoder, petr, Egor, uwi啥的,人家不仅搞得快, : 而且各项指标包括readability, variable naming都不会偷懒的。
|
p*****2 发帖数: 21240 | 28
不过他们可能有模版,所以也无所谓。
【在 l***i 的大作中提到】 : 二爷您看看那几个知名的java topcoder, petr, Egor, uwi啥的,人家不仅搞得快, : 而且各项指标包括readability, variable naming都不会偷懒的。
|
p*****2 发帖数: 21240 | 29
那到底什么时候用throwable呢?
【在 l**b 的大作中提到】 : 嗯,大牛给的更加准确,我已经全部还给书本了。
|
y*******g 发帖数: 6599 | 30 Exception的解释不太对,你说的是checked和unchecked exception, unchecked
exception是runtimeexeption和subclass
不是throwable.
【在 l**b 的大作中提到】 : head first java吧,然后随便考个SCJP,以后这种都不怕了。 : 1)需要多种继承关系的时候只能用interface,如果有需要继承到subclass里面的 : instance variable的话,就只能用abstract class : 2)exception是throwable的subclass,throwable包括了主要2种exception,一个必须 : catch的,比如Exception,或者很多类型的IOException都是一定要catch的,另一种是 : 不一定要catch的,比如ArrayIndexOutOfBound,或者Integer除0的时候的Exception。 : 具体名字自己查吧。 : 仅供参考,大牛轻打。
|
|
|
y*******g 发帖数: 6599 | 31 著名的outofmemoryerror就是throwable啊..我也听不明白为什么要有这个。
【在 c********t 的大作中提到】 : 嗯,是的。实在不能throws的时候,我用catch (Exception e)代替catch各种type,然 : 后基本上啥都不做,或者只是 printStackTrace。我绝对懒人一个。 : Throwable没用过。 :(
|
p*****2 发帖数: 21240 | 32
outofmemoryerror是Error吗?就是lolhaha讲的那个。Throwable 有两个子类,Error和
Exception
【在 y*******g 的大作中提到】 : 著名的outofmemoryerror就是throwable啊..我也听不明白为什么要有这个。
|
y*******g 发帖数: 6599 | 33 是啊,我唯一能想到throwable的作用就是这个。。在catch(Exception)的时候照样用
oom来crash app
【在 p*****2 的大作中提到】 : : outofmemoryerror是Error吗?就是lolhaha讲的那个。Throwable 有两个子类,Error和 : Exception
|
p*****2 发帖数: 21240 | 34
所以应该catch(Throwable)? 这样error, exception全catch住了。
那一般写production code是不是主要是catch exception呢?
【在 y*******g 的大作中提到】 : 是啊,我唯一能想到throwable的作用就是这个。。在catch(Exception)的时候照样用 : oom来crash app
|
l*****a 发帖数: 14598 | 35 对,I just learned from scjp
Error是那种你没法处理的exception
your app won't be able to recover from a Error
【在 p*****2 的大作中提到】 : : 所以应该catch(Throwable)? 这样error, exception全catch住了。 : 那一般写production code是不是主要是catch exception呢?
|
t*******2 发帖数: 292 | 36 比如除以0?
【在 l*****a 的大作中提到】 : 对,I just learned from scjp : Error是那种你没法处理的exception : your app won't be able to recover from a Error
|
p*****2 发帖数: 21240 | 37
我今天也看了一下这个。
不过刚才yangcheng的意思catch(Throwable)就可以catch Error?
【在 l*****a 的大作中提到】 : 对,I just learned from scjp : Error是那种你没法处理的exception : your app won't be able to recover from a Error
|
y*******g 发帖数: 6599 | 38 不知道什么是best:(
一般发生了unchecked exception, error什么说明的确有code问题吧?还是应该fix,
不代表catch了就能continue. 当然最近我某一段code的确没什么办法,在太烂的手机
上某个功能就是容易出outofMemory 而且没有leak。只好catch了 。我commit的时候觉
得很愧疚
【在 p*****2 的大作中提到】 : : 我今天也看了一下这个。 : 不过刚才yangcheng的意思catch(Throwable)就可以catch Error?
|
y*******g 发帖数: 6599 | 39 这个算什么无法recover啊 连exception都不是
【在 t*******2 的大作中提到】 : 比如除以0?
|
p*****2 发帖数: 21240 | 40
貌似dividedbyzero是exception, 我刚才试了试,可以catch
【在 y*******g 的大作中提到】 : 这个算什么无法recover啊 连exception都不是
|
|
|
p*****2 发帖数: 21240 | 41
刚才verify了,就是这个意思。
【在 p*****2 的大作中提到】 : : 貌似dividedbyzero是exception, 我刚才试了试,可以catch
|
y*******g 发帖数: 6599 | 42 整数是,浮点不是
【在 p*****2 的大作中提到】 : : 刚才verify了,就是这个意思。
|
p*****2 发帖数: 21240 | 43
浮点数貌似不是非法操作呀
【在 y*******g 的大作中提到】 : 整数是,浮点不是
|
y*******g 发帖数: 6599 | 44 恩 我就是这个意思。浮点连exception都不是。没想到整数是。。learnt something
new
【在 p*****2 的大作中提到】 : : 浮点数貌似不是非法操作呀
|
p*****2 发帖数: 21240 | 45
主要是整数不能代表无限吗?
【在 y*******g 的大作中提到】 : 恩 我就是这个意思。浮点连exception都不是。没想到整数是。。learnt something : new
|
x*****p 发帖数: 1707 | 46 Observable is also a class.
【在 l***i 的大作中提到】 : signature里面写throw xxxException主要是给caller一个机会handle Exception吧, : 其实caller也 : 可以直接不管然后在自己的signature里面照抄那个Exception就好了.不过看名字感觉 : Throwable像个interface阿。java里面还有什么xxxable是class么? : 大牛出来指点一下
|
x*****p 发帖数: 1707 | 47 Interface is used everywhere. A good example to use abstract class is to use
the GoF pattern called Template Method. Prototype pattern can also use
abstract class. |
w**z 发帖数: 8232 | 48 Java7, can catch multiple exception, add support for resource mgr, reduce
a lot of boilerplate.
【在 c********t 的大作中提到】 : 嗯,是的。实在不能throws的时候,我用catch (Exception e)代替catch各种type,然 : 后基本上啥都不做,或者只是 printStackTrace。我绝对懒人一个。 : Throwable没用过。 :(
|
b***i 发帖数: 3043 | 49 看来大家都不是很懂exception的目的。
exception其非常重要的目的是不通过原来的return返回,就是说提供了另外的返回机
制。比如你evaluate一个表达式 a = f(x,t); 结果f里面遇到一个问题,1/0, 你说a
到底应该等于几呢?
假设这个表达式在程序运行的时候,由一个循环从文件里面读取数据,其中通过多层函
数调用到达了那个表达式求值的地方。那么,一个很好的处理办法就是,在表达式求值
得地方或者f里面检查问题,throw 一个你定义的意义更明确的Exception的子类,在外
层那个循环catch这个Exception的子类,然后程序就不用给a 赋值了,而是直接跳出九
重天,回到可以控制的地方,告诉用户文件里面有问题。这样,你在外层循环到表达式
求值之间的层都不catch,留给最外层catch。catch之后,显然不是crash,而是显示一
个错误信息,然后等待用户重新调入文件,等办法。
try
【在 p*****2 的大作中提到】 : : 主要是整数不能代表无限吗?
|
p*****2 发帖数: 21240 | 50 关键是我就是想crash呀
【在 b***i 的大作中提到】 : 看来大家都不是很懂exception的目的。 : exception其非常重要的目的是不通过原来的return返回,就是说提供了另外的返回机 : 制。比如你evaluate一个表达式 a = f(x,t); 结果f里面遇到一个问题,1/0, 你说a : 到底应该等于几呢? : 假设这个表达式在程序运行的时候,由一个循环从文件里面读取数据,其中通过多层函 : 数调用到达了那个表达式求值的地方。那么,一个很好的处理办法就是,在表达式求值 : 得地方或者f里面检查问题,throw 一个你定义的意义更明确的Exception的子类,在外 : 层那个循环catch这个Exception的子类,然后程序就不用给a 赋值了,而是直接跳出九 : 重天,回到可以控制的地方,告诉用户文件里面有问题。这样,你在外层循环到表达式 : 求值之间的层都不catch,留给最外层catch。catch之后,显然不是crash,而是显示一
|
|
|
l**b 发帖数: 457 | 51 try {
int i = 1 / 0;
} catch (Throwable t) {
System.out.println("Major error, dude!", t);
System.exit(-1);
}
【在 p*****2 的大作中提到】 : 关键是我就是想crash呀
|
p*****2 发帖数: 21240 | 52
啥意思?
【在 l**b 的大作中提到】 : try { : int i = 1 / 0; : } catch (Throwable t) { : System.out.println("Major error, dude!", t); : System.exit(-1); : }
|
l**b 发帖数: 457 | 53 crash了。
【在 p*****2 的大作中提到】 : : 啥意思?
|
p*****2 发帖数: 21240 | 54
不能catch吗?
【在 l**b 的大作中提到】 : crash了。
|