在try-catch块之后的JAVA未初始化对象

时间:2014-11-18 10:58:21

标签: java try-catch

我正在努力尝试使用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);

2 个答案:

答案 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块之外初始化它。

相关问题