当try-catch结束时,总是执行“finally”块,以防exception。 但是try-catch之外和之后的每一行代码都会被执行。 那么,我为什么要使用最后的陈述呢? 例: try { //code… } catch (Exception e) { //code… } finally { System.out.println("This line is always printed"); } System.out.println("Also this line is always printed !! So why to use 'finally'?? ");
我想知道一些关于C ++ try / catch / finally块。 我已经看到这些命令有两个下划线像__try。 但MVSC 2010项目也运行没有下划线。 那么你什么时候需要这些下划线?
以下代码引发了一个语法错误: >>> for i in range(10): … print i … try: … pass … finally: … continue … print i … File "<stdin>", line 6 SyntaxError: 'continue' not supported inside 'finally' clause 为什么在finally一个条款中不允许使用continue语句? PS另一方面,这个其他的代码没有问题: >>> for i in range(10): … print i … try: … pass … finally: … break … 0 如果有关系,我使用Python 2.6.6。
鉴于此代码: String test() { try { return "1"; } finally { return "2"; } } 语言规范是否定义了调用test()的返回值? 换句话说:每个JVM都一样吗? 在Sun JVM中,返回值是2 ,但我想确定这不是依赖于VM的。
我知道Final课程的定义是什么,但是我想知道如何以及何时需要Final。 <?php final class Foo extends Bar { public function() { echo 'John Doe'; } } 如果我理解正确的话,“最终”可以扩展“Foo”。 任何人都可以解释什么时候和为什么'最后'应该使用? 换句话说,为什么不应该延续一个阶级呢? 如果例如“Bar”类和“Foo”类缺less一些function,那么创build一个扩展“Bar”的类将会很不错。
我有一个类定义了一个不可变的值types,我现在需要序列化。 不变性来自构造函数中设置的最终字段。 我试过序列化,它的工作原理(令人惊讶的是?) – 但我不知道如何。 这是一个类的例子 public class MyValueType implements Serializable { private final int value; private transient int derivedValue; public MyValueType(int value) { this.value = value; this.derivedValue = derivedValue(value); } // getters etc… } 鉴于该类没有arg构造函数,它怎么能被实例化,最终的字段集? (另外 – 我注意到这个类,特别是因为IDEA没有为这个类生成一个“no serialVersionUID”检查警告,但是成功地为其他类我已经可序列化的警告。)
class WithPrivateFinalField { private final String s = "I'm totally safe"; public String toString() { return "s = " + s; } } WithPrivateFinalField pf = new WithPrivateFinalField(); System.out.println(pf); Field f = pf.getClass().getDeclaredField("s"); f.setAccessible(true); System.out.println("f.get(pf): " + f.get(pf)); f.set(pf, "No, you're not!"); System.out.println(pf); System.out.println(f.get(pf)); 输出: s = I'm totally safe f.get(pf): I'm totally safe s […]
我们从一个简单的testing用例开始: import java.lang.reflect.Field; public class Test { private final int primitiveInt = 42; private final Integer wrappedInt = 42; private final String stringValue = "42"; public int getPrimitiveInt() { return this.primitiveInt; } public int getWrappedInt() { return this.wrappedInt; } public String getStringValue() { return this.stringValue; } public void changeField(String name, Object value) throws IllegalAccessException, NoSuchFieldException […]
有些人可能会发现它类似于SO问题Java最终variables是否有默认值? 但是这个答案并没有完全解决这个问题,因为这个问题并不直接在实例初始化块中打印x的值。 当我尝试直接在实例初始化块内部打印x时,出现了问题,同时在块结束之前为x赋值: 情况1 class HelloWorld { final int x; { System.out.println(x); x = 7; System.out.println(x); } HelloWorld() { System.out.println("hi"); } public static void main(String[] args) { HelloWorld t = new HelloWorld(); } } 这给编译时错误,说明variablesx可能没有被初始化。 $ javac HelloWorld.java HelloWorld.java:6: error: variable x might not have been initialized System.out.println(x); ^ 1 error 案例2 而不是直接打印,我打电话打印function: class HelloWorld […]
在Java中进行序列化后,是否有可能将final transient字段设置为任何非默认值? 我的用例是一个cachingvariables – 这就是为什么它是transient 。 我也有一个习惯,就是不要改变Map字段(即地图内容改变,但是对象本身保持不变)。 然而,这些属性似乎是矛盾的 – 虽然编译器允许这样的组合,我不能有字段设置为任何东西,但在反序列化之后为null 。 我尝试了以下,没有成功: 简单的字段初始化(在这个例子中显示):这是我通常做的,但是在反序列化之后似乎没有发生初始化; 在构造函数中初始化(我相信这在语义上与上面相同); 在readObject()分配字段 – 由于该字段是final因此无法完成。 在这个例子中, cache是public仅用于testing。 import java.io.*; import java.util.*; public class test { public static void main (String[] args) throws Exception { X x = new X (); System.out.println (x + " " + x.cache); ByteArrayOutputStream buffer = new ByteArrayOutputStream (); […]