try-catch块之后的JAVA统一化对象

try-catch块之后的JAVA统一化对象,java,try-catch,Java,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;

我正在与这个代码的尝试和捕捉块斗争。在该块之后,如何将对象初始化为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);
publicstaticvoidmain(字符串[]args)抛出错误{
人员p1=null;人员p2=null;
学生s1=null;学生s2=null;
雇员a=空;
试一试{
p1=新人(“泽尔”、“孙”,1.7,2100);//姓名、姓氏、身高、年龄
p2=新人(“泽尔”,“迈克”,1.63,39);
s1=新生(“约翰逊”,“约翰”,1.9,21,2,1);
s2=新生(“鹿”,“儿子”,1.52,20,1,1);
a=新员工(“斯图”、“迈克尔”,1.74、44、12440);
}捕捉(Error.Error高度e){
System.out.println(“错误高度:+e.getMessage());
}捕获(Error.ErrorAge e){
System.out.println(“错误期限:+e.getMessage());
}捕获(Error.Error.e){
System.out.println(“错误工资”+e.getMessage());
}捕获(错误e){
System.out.println(“一般错误”+e.getMessage());
};
人[]p={p1,p2,s1,s2,a};
个人(i:p)
系统输出打印LN(i);
System.out.println(“”);
System.out.println(“排序:”);
c=新的比较器(){
公共整数比较(o1人、o2人){
返回o1.getAge()-o2.getAge();
}
};
排序(p,c);

在try-catch块之后,p1、p2、s1、s2和a的值不会被销毁。但是,如果try块中抛出异常,其中一些值可能仍然未初始化

如果即使在抛出并捕获异常后仍希望依赖这些变量的值,则必须在catch块或finally块中为它们提供一些默认值(假设不能在try-catch块之前为它们提供默认值)

我知道在try-catch之后,对象值将被销毁。 是。当所创建对象的变量超出其创建的作用域时,垃圾回收器将声明该对象。如果要使其保持活动状态,请在try块外声明变量,就像在中所做的那样:

        Person p1=null;Person p2=null;
        Student s1=null;Student s2=null;

但是,如果这些对象中的一个或多个发生异常,初始化将不会完成,这些对象将恢复为null。您可以在try块之前为其提供默认值。或者只是在try块之外对其进行初始化。

您是否声明了异常:
Error.ErrorHeight
Error.ErrorAge
等告诉我你的类应该抛出它们吗?当你说初始化它没有意义:初始化意味着第一次给值。也许你的意思是赋值?更具体地说,你想要什么,赋值就是我想要的。我希望这些对象在try-catch块之后有相同的值我把它放在finally块中:p1=new Person(“Zeer”,“Sohn”,1.7,2100);p2=新人(“Zeer”,“Mike”,1.63,39);s1=新生(“Johnson”,“John”,1.9,21,2,1);s2=新生(“Deer”,“Son”,1.52,20,1,1);a=新雇员(“Stewie”,“Michael”,1.74,44,12,440);这一行:Person[[p={p1,p2,s1,s2,a};表示那些p1、p2、s1、s2、a不能解析为avariable@aNNgeL0如果您在问题中发布的代码与您正在编译的代码相同,这是不可能的,因为p1、p2、s1、s2和a都是在try-catch块之前声明的,所以它们在try-catch块之后仍然可见。@aNNgeL0顺便说一句,如果try块中的一个构造函数调用抛出一个exception,在finally代码中运行相同的代码也会引发异常,因此这无法解决任何问题。谢谢你的回答。谢谢你的回答。这很有帮助!