我正在努力尝试使用try和catch块代码。如果在该块之后将对象初始化为try catch块,我该怎么办?我知道在try catch之后,对象值将被销毁,但是,仍然有什么方法可以在块之后初始化它们?
public static void main(String[] args) throws Error {
Person p1=null;Person p2=null;
Student s1=null;Student s2=null;
Employe a=null;
try{
p1 = new Person("Zeer", "Sohn", 1.7,2, 100); //Name , surname,height,age
p2 = new Person("Zeer", "Mike", 1.63, 39);
s1 = new Student("Johnson", "John", 1.9, 21, 2, 1);
s2 = new Student("Deer", "Son", 1.52, 20, 1, 1);
a = new Employe("Stewie", "Michael", 1.74, 44, 12, 440);
}catch (Error.ErrorHeight e){
System.out.println("Error height:"+e.getMessage());
}catch (Error.ErrorAge e){
System.out.println("Error age: "+e.getMessage());
}catch (Error.ErrorSalary e){
System.out.println("Error salary"+e.getMessage());
} catch (Error e) {
System.out.println("General error"+e.getMessage());
};
Person []p={p1,p2,s1,s2,a};
for (Person i : p)
System.out.println(i);
System.out.println(" ");
System.out.println("Sort:");
c = new Comparator<Person>() {
public int compare(Person o1, Person o2) {
return o1.getAge() - o2.getAge();
}
};
Arrays.sort(p, c);
答案 0 :(得分:1)
在try-catch块之后,p1,p2,s1,s2和a的值不会被破坏。但是,在try块中抛出异常,其中一些可能仍然未初始化。
如果你想依赖这些变量的值,即使在抛出并捕获异常之后,你必须在catch块或finally块中给它们一些默认值(假设你不能给出它们)它们是try-catch块之前的默认值。)
答案 1 :(得分:0)
我知道在try catch之后,对象值将被销毁。
是。当创建的对象的变量激发创建它的作用域时,垃圾收集器将声明该对象。如果你希望它保持活着,你可以在try块之外声明变量,就像你在:
中所做的那样 Person p1=null;Person p2=null;
Student s1=null;Student s2=null;
但是,如果这些对象中的一个或多个引发异常,则初始化将无法完成,并且这些对象将恢复为null。您可以在try块之前为其指定默认值。或者只是在try块之外初始化它。