我发现了一些建议使用的参考文献(例如)final尽可能多地使用,我想知道它有多重要.这主要是在方法参数和局部变量的上下文中,而不是最终方法或类.对于常数,它显然是有道理的.
一方面,编译器可以进行一些优化,这使得程序员的意图更加清晰.另一方面,它增加了详细程度,优化可能是微不足道的.
这是我应该努力记住的事情吗?
为什么我需要声明local variable的final,如果我的Inner class方法中定义需要使用它?
示例:
class MyOuter2 {
private String x = "Outer2";
void doStuff() {
final String y = "Hello World";
final class MyInner {
String z = y;
public void seeOuter() {
System.out.println("Outer x is "+x);
System.out.println("Local variable is "+y);
MyInner mi = new MyInner();
mi.seeOuter();
}
}
}
Run Code Online (Sandbox Code Playgroud)
}
为什么String y需要是最终常量?它是如何影响的?
我知道一个类的静态方法和非静态方法都存储在方法区中。
但我真的很怀疑Java在哪里存储对象的最终变量(常量)成员和静态变量成员。
例如,
class A{
private final int a = 1;
private static int b = 2;
private static final int c = 3;
//other codes...
}
Run Code Online (Sandbox Code Playgroud)
我想知道Java将a、b、c存储在内存中的哪里。堆、栈还是方法区?
======更新=====
嘿,感谢您的帮助。请允许我分享一个有关 jvm 组件的链接:http://www.artima.com/insidejvm/ed2/jvm2.html
在java Program中,参数String在方法声明中定义.但是在方法定义中,它作为final String变量被访问.是否会导致一些问题(如安全性,内存问题)?
例如:
方法声明
join(String a,String b);
Run Code Online (Sandbox Code Playgroud)
方法定义
public void join(final String a,final String b)
{
Authenticator au = new Authenticator(){
public PasswordAuthentication getPasswordAuthentication(){
return new PasswordAuthentication(a,b)}
};
}
Run Code Online (Sandbox Code Playgroud)
请帮助我,澄清我的疑虑.提前致谢
PS我正在访问a和b作为最终变量,因为我必须在内部类中使用它.