黑马程序员技术交流社区

标题: 三个问题 [打印本页]

作者: 创造命运    时间: 2014-4-18 17:30
标题: 三个问题
本帖最后由 创造命运 于 2014-4-18 22:34 编辑

1、null与""都表示的是空,那么将这两个值分别赋给String对象,这两者(String s = null; 与 String s = "";)之间的区别是什么?

2、在看视屏时,看到老师用了两个处理异常的方法:try...catch...finally与try...finally。这两者之间又有什么不同呢?

3、在抛出异常的时候,一会儿用throws,一会儿用throw,都把我弄糊涂了。那么关键字throws和throw的用法有什么差异?

作者: 香菜病病患    时间: 2014-4-18 17:44
本帖最后由 香菜病病患 于 2014-4-18 17:47 编辑

1、String其实是引用数据类型。String s=null;表示s这个变量没有指向任何实际的堆内存中的对象。String s="";表示其指向了堆内存中的一个String类型的对象,而里面存的是""
2、try代码块中写的是可能抛出异常的代码,然后用catch代码块来捕捉对应的异常并处理。而finally里的代码不管是否出现异常都会执行,例如我们的关闭资源(关闭数据库连接等等)的代码就写在finally代码块中。try和catch是对应存在的,finally代码块则可以写也可以不写。而你说到的try...finally我没见过这种用法。
3、throws用在函数上,用来告诉调用者这个函数可能会出现异常,但是函数内部没有处理,交由调用者处理。如果调用者只还是继续往外抛,最后甚至在主函数中也往外抛出的话,那么主函数会将异常抛给虚拟机处理。虚拟机的处理方式是当异常发生时直接结束程序,打印出异常信息。throw用在函数内部,用于抛出一个异常对象。

作者: 清风夜独醉    时间: 2014-4-18 17:50
1.null和“”虽然都是空,一个是指空的引用,一个是空字符串。空的引用是不可以再调用其它任何方法的,会抛出空指针异常,而空字符串仍然可以当成一个字符串使用,调用方法都没有问题。
2.try...catch...finally可以捕捉异常并处理,finally语句一定会执行。
try...finally不捕捉异常,一般是为了让finally里的语句必须执行才用这种语句。
3.throw用于抛出异常对象,后面跟的是异常对象,用在函数内。
throws用于抛出异常类,后面跟的异常类名,可以跟多个,用逗号隔开,用在函数上。
作者: sanguodouble1    时间: 2014-4-18 19:21
本帖最后由 sanguodouble1 于 2014-4-18 19:23 编辑

  1. <DIV class=blockcode>
  2. <BLOCKQUOTE>class A {
  3. public void Test() throws Exception {
  4. try {
  5. System.out.println("Test this Project!");
  6. } catch (Exception e) {
  7. throw new Exception(e.toString());
  8. }
  9. }
  10. }
复制代码


throws是用来声明一个方法可能抛出的所有异常信息
throw则是指抛出的一个具体的异常类型。
通常在一个方法(类)的声明处通过throws声明方法(类)可能抛出的异常信息,而在方法(类)内部通过throw声明一个具体的异常信息。
throws通常不用显示的捕获异常,可由系统自动将所有捕获的异常信息抛给上级方法;
throw则需要用户自己捕获相关的异常,而后在对其进行相关包装,最后在将包装后的异常信息抛





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2