我在Java中收到错误:
线程中的异常“main”java.lang.Error:未解决的编译问题
局部变量b1可能尚未在Test.main(Test.java:20)初始化
这是我的代码:
import java.lang.String;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
char a[]={'s','k'};
String s0=new String(a);
String s1=new String("Amar");
String s2= "amarnath";
byte[] b1;
try{
b1=s2.getBytes("ASCII");
}
catch(Exception e){}
for(int i =0;i<s2.length();i++)
{
System.out.println(b1[i]);
}
}
}
答案 0 :(得分:0)
<强>问题强>
如果try
块中存在错误,则b1
将不会被初始化,其值为null
。
如果发生这种情况,那么当您尝试在以下行中打印b1
的值时会出现问题:
System.out.println(b1[i]);
Java非常谨慎,不会让这种情况发生。
<强>解强>
b1
b1
未初始化的可能性(这是Java所担心的)for
循环放在try
块内(如@SashaSalauyou在评论中所述)
b1
块中try
的初始化出错,则该块将退出,并且for
循环将不会运行。因此,没有使用未初始化变量的代码,例如在前面提到的代码行中。答案 1 :(得分:0)
这里的问题是getBytes(String encoding)抛出UnsupportedEncodingException。如果您的代码中出现此类异常 (如果您输入错误的编码,例如getBytes(&#34; foo&#34;),则会发生这种情况)您的字节数组将保留未初始化。 catch块将处理异常并继续执行您尝试使用b1的for(;;)循环。编译器会看到这种可能性并抛出错误,以防止以后使用未初始化的变量
import java.lang.String;
公共课测试{
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
char a[]={'s','k'};
String s0=new String(a);
String s1=new String("Amar");
String s2= "amarnath";
byte[] b1;
try{
b1=s2.getBytes("ASCII");
for(int i =0;i<s2.length();i++)
{
System.out.println(b1[i]);
}
}
catch(UnsupportedEncodingException uee){ //handle the excpetion or at least log it}
}
}
答案 2 :(得分:0)
编译器会抱怨,因为如果b1
未初始化,并且try
块内发生错误,则会在以下块中使用System.out.println(b1[i]);
null
1}},未初始化。
为了使其编译,您应该至少使用import processing.core.PApplet;
public class Button extends PApplet{
float buttonX;
float buttonY;
float buttonWidth;
float buttonHeight;
boolean cliked;
public Button(PApplet canvas, float buttonX, float buttonY, float buttonWidth, float buttonHeight) {
this.buttonX = buttonX;
this.buttonY = buttonY;
this.buttonWidth = buttonWidth;
this.buttonHeight = buttonHeight;
}
public void drawButton() {
rect(200, 200, 200, 200);
textSize(40);
fill(200, 200, 200);
text("Start Game", 300, 300);
}
}
初始化变量,因为它是局部变量。