最近混csdn论坛的一些收获

      最近开始混迹于csdn论坛,帮助别人解决了一些问题,也学习到了很多东西。

      以下内容来自别人的问题和大家的解决方案:

1。在内部类中如何调用外部类的this指针:

参考:http://topic.csdn.net/u/20110814/22/2001480e-cc1c-423f-9093-4df6b6753b5c.html?seed=551221130&r=74954240#r_74954240

class OuterClass {
  class InnerClass {
     OuterClass temp = OuterClass.this;
  }
}
我原来处理的时候都是在外部类中定义一个变量指向自己的this,然后在内部类中调用自己定义的那个变量。

2。Throwable的printStackTrace方法:

参考:http://topic.csdn.net/u/20110815/09/ff979daa-963a-41c1-a516-5c571ea367c1.html?seed=948166612&r=74954797#r_74954797

楼主因为输出的结果而质疑finally的执行顺序。

原来也看到过控制台打印出的异常堆栈信息与其它输出信息有交叉,但是没有思考过原因。原来printStackTrace不带参数的时候调用的是err流。本身也提供了可以自定义输出流的方法printStackTrace(PrintStream s),该方法内部进行了同步处理,如果想获得一致的输出结果,可以调用这个方法


3。RuntimeException抛到哪里?

java中不要求对抛出RuntimeException及其子类的地方用throws语句进行声明。那么产生RuntimeException后有没有将异常抛出到上一层呢?答案是有的,一直向上抛,如果中途没有捕获,则由虚拟机进行处理。

4。为什么要使用不用捕获的RuntimeException:

java 的异常分两大类,RuntimeException 及其子类不要求捕捉而其它的异常要求捕捉

随便举几个 RuntimeException 子异常,有:数组越界异常、空指针异常、0作除数异常

非RuntimeException 异常有:Socket异常、IO异常等

对比一下我们就会发现,RuntimeException 是在程序中可以完全避免的,比如数组越界异常,只要我在程序里作个判断,如果要访问的数组元素下标和数组的长度作一下比较就知道会不会越界,再比如空指针异常,如果在访问对象时判断一下对象的变量是否为空就可以了。

而非RuntimeException 则是程序无法避免的,比如IO异常,你的程序正在读一个文件,而这个文件所在磁盘出现了坏道,这就必然会引发IOException,这是不是靠编程高手编写完美的程序就可以法避免得了的,程序所能做的只有出现异常之后怎么处理的问题。


5.final变量附值问题:

原帖地址:http://topic.csdn.net/u/20110822/16/673ee3fd-0b7f-44fa-9d38-a2b8f8ccee8d.html?1662

public static final String fs;

    static {
        try {
            fs = f();
        } catch (RuntimeException e) {
            System.out.print(e.getMessage());
            throw e;
        }
    }

在static块中对final变量附值如果使用了try、catch围绕则需要将异常向上抛出。

我觉得是这样的,调用附值方法f()的时候的时候如果抛出异常则不会继续执行附值,你这里蒋异常捕获了,就会导致静态final变量没有被附值的问题,这个问题好像自己没有办法处理。所以你需要继续向上一层抛出直到由编译器执行正确的操作。


⋯⋯

备补充。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值