java高手帮我看看,这样写为什么不行,只有几行代码

来源:百度知道 编辑:UC知道 时间:2024/07/07 17:28:59
calss T {
void show(){
int a;
int b;
if(true){
a=1;
}
try{
b=2;
}catch(Exception e){
System.out.println("异常");
}
int s =a+b; //为什么这行能访问到a,加了异常访问不到b呢?
}

}
public static void main(String[] args){
T n=new T();
n.show();
}

你的变量b声明时未初始化,在try/catch语句中对他进行初始可能因为异常而无法初始,因而编译器会报如下错误:
The local variable b may not have been initialized
你给变量b赋个初值即可。

public class T {
void show() {
int a;
int b=0;
if (true) {
a = 1;
}
try {
b = 2;
} catch (Exception e) {
System.out.println("异常");
}
int s = a + b; // 为什么这行能访问到a,加了异常访问不到b呢?
}

public static void main(String[] args) {
T n = new T();
n.show();
}
}

能访问到呀,为什么访问不到?

因为
1。你是局部变量,在Thinking in java 中有这样一句话:”Java尽力保证:所有变量在使用前都能得到恰当的初始化,对于方法的局部变量,Java以编译时错误的形式来贯彻这种保证“
2。你在异常中声明,就如 debbykindom所回答的那样。
以上两个原因加起就,就产生了异常。
改正方法有很多,如自已初始化,或者变成全局变量,这样系统会自动弄个默认值0上去

是没有初始化啦~~
你 把 int b;改成 int b = 0;看一下。

因为true始终是是访问的

你没有给明一个初始值。
你在 int b; 这里给个0。