public static String aaa() throws Exception{ return "aaa"; } }
只是打个比方,就是说我要定义一个常量成员变量,但赋初始值需要调用一个函数,该函数会抛出异常,该怎么能优雅的解决这个问题。那这个应该能满足你的需求public class Test { private static final String ttt = aaa();
public static String aaa() throws Exception { if(抛异常条件){ throw new Exception(异常说明);//抛异常 } return "aaa"; }
只是打个比方,就是说我要定义一个常量成员变量,但赋初始值需要调用一个函数,该函数会抛出异常,该怎么能优雅的解决这个问题。那这个应该能满足你的需求public class Test { private static final String ttt = aaa();
public static String aaa() throws Exception { if(抛异常条件){ throw new Exception(异常说明);//抛异常 } return "aaa"; } 你确定能编译通过?
只是打个比方,就是说我要定义一个常量成员变量,但赋初始值需要调用一个函数,该函数会抛出异常,该怎么能优雅的解决这个问题。那这个应该能满足你的需求public class Test { private static final String ttt = aaa();
public static String aaa() throws Exception { if(抛异常条件){ throw new Exception(异常说明);//抛异常 } return "aaa"; } 你确定能编译通过?嗯,确实有问题,改好了public class Test { private static final String ttt = aaa(); public static String aaa() { int i = 0; if (i == 0) { throw new RuntimeException("异常");// 抛异常 } return "aaa"; } }
public class Test {
private static final String ttt; static{
try{
ttt=aaa();
}catch(Exception ){
}
}
public static String aaa() throws Exception {
return "aaa";
}
}
我之前也想过写在静态初始化代码块中,但问题是我这个成员变量需要是final的,无法在静态初始化代码块中赋值了。
那应该怎么玩?有何高策?既然是final,那就不应该赋值了。
那应该怎么玩?有何高策?既然是final,那就不应该赋值了。需要赋初始值啊,以后就只要使用就行了。
这个方案是不行的。
编译器提示ttt没有初始化,如果给初值null后,编译器提示final变量不能再次赋值
要么你直接在用到ttt的地方嗲用aaa方法,要么把ttt的final去掉。
这个方案是不行的。
编译器提示ttt没有初始化,如果给初值null后,编译器提示final变量不能再次赋值
其实有个问题是你为什么要设为final,对象声明为final通常只有作为同步锁或者单例,而这两种情况下不会发生这种问题,再其它场合下这种设计方法都是有问题的
public class Test {
private static final String ttt = aaa();
public static String aaa() throws Exception {
throw new Exception();
return "aaa";
}
}
public class Test {
private static final String ttt = aaa();
public static String aaa() throws Exception {
throw new Exception();//抛异常
return "aaa";
}
}
这个方案是不行的。
编译器提示ttt没有初始化,如果给初值null后,编译器提示final变量不能再次赋值
其实有个问题是你为什么要设为final,对象声明为final通常只有作为同步锁或者单例,而这两种情况下不会发生这种问题,再其它场合下这种设计方法都是有问题的作为常量,以后只是使用不让更改。
让语言机制保证访问的安全。
这个方案是不行的。
编译器提示ttt没有初始化,如果给初值null后,编译器提示final变量不能再次赋值
其实有个问题是你为什么要设为final,对象声明为final通常只有作为同步锁或者单例,而这两种情况下不会发生这种问题,再其它场合下这种设计方法都是有问题的作为常量,以后只是使用不让更改。
让语言机制保证访问的安全。
private static final String ttt=bbb();
public static String bbb(){
try {
return aaa();
} catch (Exception e) {
// TODO Auto-generated catch block
}
return null;
}
public static String aaa() throws Exception{
return "aaa";
}
}
只是打个比方,就是说我要定义一个常量成员变量,但赋初始值需要调用一个函数,该函数会抛出异常,该怎么能优雅的解决这个问题。那这个应该能满足你的需求public class Test {
private static final String ttt = aaa();
public static String aaa() throws Exception {
if(抛异常条件){
throw new Exception(异常说明);//抛异常
}
return "aaa";
}
只是打个比方,就是说我要定义一个常量成员变量,但赋初始值需要调用一个函数,该函数会抛出异常,该怎么能优雅的解决这个问题。那这个应该能满足你的需求public class Test {
private static final String ttt = aaa();
public static String aaa() throws Exception {
if(抛异常条件){
throw new Exception(异常说明);//抛异常
}
return "aaa";
}
你确定能编译通过?
只是打个比方,就是说我要定义一个常量成员变量,但赋初始值需要调用一个函数,该函数会抛出异常,该怎么能优雅的解决这个问题。那这个应该能满足你的需求public class Test {
private static final String ttt = aaa();
public static String aaa() throws Exception {
if(抛异常条件){
throw new Exception(异常说明);//抛异常
}
return "aaa";
}
你确定能编译通过?嗯,确实有问题,改好了public class Test {
private static final String ttt = aaa(); public static String aaa() {
int i = 0;
if (i == 0) {
throw new RuntimeException("异常");// 抛异常
}
return "aaa";
}
}