我需要在一个类中创建一个最终字符串并在一个方法中初始化它,我在网上搜索一些说可能有些人说不是!
我通过了this并在接受的答案中说他可能从构造函数中没有说明非构造函数方法
但是,如果你删除静态,你可以这样做:
class A {
private final int x;
public A()
{
x = 5;
} }
在我的Android案例中我想要这样做
public class MyActivity extends Activity
{
final String DOWNLOADS_FOLDER_PATH;
@Override
public void onCreate(Bundle savedInstanceState)
{ ....
DOWNLOADS_FOLDER_PATH=Environment.getExternalStorageDirectory().getPath()+"/downloads/";
// i cant do that neither
// DOWNLOADS_FOLDER_PATH="s";
}
}
我需要从方法初始化,因为我有一个
的调用Environment.getExternalStorageDirectory().getPath()
任何想法?
答案 0 :(得分:5)
为什么你不能立即初始化它? getExternalStorageDirectory
是静态方法,所以:
static final String DOWNLOADS_FOLDER_PATH = Environment.getExternalStorageDirectory().getPath() + "/downloads/";
答案 1 :(得分:4)
您无法从仅方法构造函数和初始化程序块初始化最终变量。 这样做的原因是变量绝不能在它所属的对象的整个生命周期内改变它的值('final'关键字背后的含义)。
如果您可以使用常规方法初始化它,那么让我们在对象创建和使用过程中分析最终变量的值:
答案 2 :(得分:0)
您也可以使用构造函数
public class MyActivity extends Activity
{
final String DOWNLOADS_FOLDER_PATH;
// constructor
MyActivity(){
super();
DOWNLOADS_FOLDER_PATH=Environment.getExternalStorageDirectory().getPath()+"/downloads/";
}
@Override
public void onCreate(Bundle savedInstanceState)
{ ....
}
}
答案 3 :(得分:0)
来自JLS:
最终变量只能分配一次。
但是如果你在构造函数之外的任何方法中为最终变量赋值,那么它可能会被重新赋值。这就是除了构造函数之外的方法中不允许赋值的最终变量。
构造函数确保为每个新的最终变量完成分配。