Tag: 最终

Java 7 – 精确重新抛出最终exception

在以前的java版本中,重新抛出exception被视为抛出catch参数的类型。 例如: public static void test() throws Exception{ DateFormat df = new SimpleDateFormat(“yyyyMMdd”); try { df.parse(“x20110731”); new FileReader(“file.txt”).read(); } catch (Exception e) { System.out.println(“Caught exception: ” + e.getMessage()); throw e; } } 在Java 7中,如果您声明exceptionfinal ,则可以更精确地了解抛出的exception: //(doesn’t compile in Java<7) public static void test2() throws ParseException, IOException{ DateFormat df = new SimpleDateFormat("yyyyMMdd"); try { df.parse("x20110731"); new […]

通过reflection改变最终变量,为什么静态和非静态最终变量之间存在差异

请参考以下代码。 当我运行代码时,我能够更改最终的非静态变量的值。 但是如果我尝试更改最终静态变量的值,那么它会抛出java.lang.IllegalAccessException 。 我的问题是为什么它不会在非静态最终变量的情况下抛出exception,反之亦然。 为什么不同? import java.lang.reflect.Field; import java.util.Random; public class FinalReflection { final static int stmark = computeRandom(); final int inmark = computeRandom(); public static void main(String[] args) throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException { FinalReflection obj = new FinalReflection(); System.out.println(FinalReflection.stmark); System.out.println(obj.inmark); Field staticFinalField = FinalReflection.class.getDeclaredField(“stmark”); Field instanceFinalField = FinalReflection.class.getDeclaredField(“inmark”); staticFinalField.setAccessible(true); instanceFinalField.setAccessible(true); instanceFinalField.set(obj, 100); […]

变量的Java final关键字

final关键字如何不使变量成为不可变的? 维基百科说它没有。

Java最终局部变量存储在哪里?

采用以下示例: public void init() { final Environment env = new Environment(); Runtime.getRuntime().addShutdownHook(new Thread() { public void run() { env.close(); } }); } 首先, env存储在哪里? 是吗: 由编译器复制到引用它的内部类的隐藏成员变量中 复制到堆上并在其上引用 留在堆栈上并以某种方式在那里引用 别的 我的猜测是第一个选择。 其次,执行这样做会产生任何性能问题(而不是简单地创建env作为类的成员变量并引用它),特别是如果要创建大量引用最终局部变量的内部类构造。

通过reflection或其他方式覆盖java最终方法?

在尝试编写测试用例时会出现此问题。 Foo是框架库中的一个类,我没有源代码访问权限。 public class Foo{ public final Object getX(){ … } } 我的申请会 public class Bar extends Foo{ public int process(){ Object value = getX(); … } } 由于其他依赖性,我无法创建Foo对象,因此unit testing用例无法初始化。 当值为null时,BarTest抛出空指针。 public class BarTest extends TestCase{ public testProcess(){ Bar bar = new Bar(); int result = bar.process(); … } } 有没有办法可以使用reflectionapi将getX()设置为非final? 或者我该如何进行测试?

关于Java中本地最终变量的问题

我有以下代码: public class BookLib { void f() { final int x = 5; // Line 1 class MyCLass { void print() { System.out.println(x); } } } } 我不明白为什么在这种情况下使用最终变量(第1行)?

在捕获exception时是否有理由不使用final关键字?

我在一些示例BlackBerry Java类中看到了一些代码: try { // stuff that will throw an exception } catch(final Exception e) { // deal with it } 我认为final是为了表现。 根据标题,因为很少(永远?)任何理由修改已被抛出的exception,它们是否总是final ? 如果是这样,这不是编译器可以完成的事情吗? 或者由编译器完成并手动添加final没有任何影响?

Java中方法的最终变量

可能重复: 为什么在Java中将局部变量和方法参数标记为“final”? 我正在检查一些Java代码,我不擅长java至少有一些知识,如密封类,只读字段和不可覆盖的方法,但这看起来很奇怪,在方法中声明变量final : private static void queryGoogleBooks(JsonFactory jsonFactory, String query) throws Exception { // Set up Books client. final Books books = Books.builder(new NetHttpTransport(), jsonFactory) .setApplicationName(“Google-BooksSample/1.0”) .setJsonHttpRequestInitializer(new JsonHttpRequestInitializer() { @Override public void initialize(JsonHttpRequest request) { BooksRequest booksRequest = (BooksRequest) request; booksRequest.setKey(ClientCredentials.KEY); } }) .build(); 你能告诉我在这种情况下final的含义是什么吗? 这是完整的代码: http://code.google.com/p/google-api-java-client/source/browse/books-cmdline-sample/src/main/java/com/google/api/services/samples/books/cmdline/ BooksSample.java?repo=samples

为什么Final变量不需要在java中的main方法初始化?

当我只是尝试用Java做一些程序。我尝试使用final变量,我知道final变量必须在声明时初始化,但在main方法中它接受final变量而不进行初始化。 我不知道是什么原因。任何人都可以告诉我原因。 谢谢 码: class name { final int b; //here shows error public static void main(String args[]) { final int a; // here no error… why? System.out.println(“hai”); } }

为什么Java中的最终实例类变量?

如果实例变量设置为final,则其值不能更改为 public class Final { private final int b; Final(int b) { this.b = b; } int getFinal() { return b = 8; // COMPILE TIME ERROR } } 在代码的某处我看到实例类变量HashMap被声明为final private final Map cacheMap = new HashMap(); 我不明白为什么这样宣布? 通常在这种情况下它被声明。 这是否意味着如果我放入哈希映射然后我无法更改其值? 编辑: 如果声明为final的cacheMap作为参数传递给另一个类,那么如果我更改其引用,则不会显示final的错误。 为什么会这样? class CacheDTO { private Map conditionMap; public Map getConditionMap() { return conditionMap; […]