处理Java异常的初学者

处理Java异常的初学者,java,exception,Java,Exception,我正在学习java异常,并且一直被一个特定示例的问题所困扰 下面是我的类ErgaenztesAuto和我的主要方法。我的解释被抓住了,正在发挥作用。 有两件事我不明白: 如果我试图访问try块外的对象,例如ergaenztesuto2.meldung(),编译器会告诉我他找不到对象ergaenztesuto2。如果我在try块中做同样的事情,它就会工作。因此,我必须将整个程序放在try块中。 正确的方法是什么?就像只将我希望运行的代码放入一个exeption 只要我的构造函数抛出异常,程序就会停

我正在学习java异常,并且一直被一个特定示例的问题所困扰

下面是我的类ErgaenztesAuto和我的主要方法。我的解释被抓住了,正在发挥作用。 有两件事我不明白:

  • 如果我试图访问try块外的对象,例如ergaenztesuto2.meldung(),编译器会告诉我他找不到对象ergaenztesuto2。如果我在try块中做同样的事情,它就会工作。因此,我必须将整个程序放在try块中。 正确的方法是什么?就像只将我希望运行的代码放入一个exeption

  • 只要我的构造函数抛出异常,程序就会停止并显示我的自定义异常消息。异常后的代码不会执行。如何将异常处理放在构造函数中处理,而其余代码仍在执行

  • 谢谢! 勒内


    当抛出异常时,try块的执行被取消,直接转到catch块,然后是finally块。只需将代码放入必要的try块中,就可以实现所需的功能

    例如(我编了一些类名):


    当抛出异常时,try块的执行被取消,直接转到catch块,然后是finally块。只需将代码放入必要的try块中,就可以实现所需的功能

    例如(我编了一些类名):

    公元1年

    拆分声明和初始化:

    MyObject myObject;
    try{
        myObject = new MyObject();
    } except (SomeExceptione) {
        e.doSomethingWithException();
    }
    
    myObject.performObjectAction();
    
    公元2年

    我不确定我是否理解这一部分:

    我如何放置异常处理的exeption处理 在构造函数中,代码的其余部分 仍然执行

    但是,如果您想执行某个东西,不管是否抛出异常,您应该使用
    finally

    MyObject myObject;
    try{
        myObject = new MyObject();
    } except (SomeExceptione) {
        e.doSomethingWithException();
    } finally {
        System.out.println("This gets executed always. My Object is: " + myObject.toString());
    }
    
    myObject.performObjectAction();
    
    公元1年

    拆分声明和初始化:

    MyObject myObject;
    try{
        myObject = new MyObject();
    } except (SomeExceptione) {
        e.doSomethingWithException();
    }
    
    myObject.performObjectAction();
    
    公元2年

    我不确定我是否理解这一部分:

    我如何放置异常处理的exeption处理 在构造函数中,代码的其余部分 仍然执行

    但是,如果您想执行某个东西,不管是否抛出异常,您应该使用
    finally

    MyObject myObject;
    try{
        myObject = new MyObject();
    } except (SomeExceptione) {
        e.doSomethingWithException();
    } finally {
        System.out.println("This gets executed always. My Object is: " + myObject.toString());
    }
    
    myObject.performObjectAction();
    

    让我给你讲几点我刚才想说的话:

    1) 在类定义ErgaenztesAuto中没有meldung()方法;在我看来,它只包含一种构造方法。 应该是这样的:

    public void meldung() {
        // TODO Auto-generated method stub
        // your own code here
    }
    
    2) 对于要在捕获异常后继续运行的代码,需要有一个FINALLY块:

    try {
            // Objekt erzeugen
            ErgaenztesAuto ErgaenztesAuto1 = new ErgaenztesAuto("Rene", "BMW", "Rot", 1981, 90, 10, "Berlin", "ABCD");
            ErgaenztesAuto ErgaenztesAuto2 = new ErgaenztesAuto("Rene", "Audi", "Gelb", 2010, 70, -20000, "Muenchen", "WXYZ");
            ErgaenztesAuto1.meldung();
            ErgaenztesAuto2.meldung();
        } catch (IllegalArgumentException e) {
            System.out.println("Meine Exception trat auf: " + e.getMessage());
        } finally {
            System.out.println("I'M RUNNING AFTER EXCEPTION !!");
            // OTHER CODE LOGIC
        }
    

    3)关于对象可见性的部分,请阅读一个java基础书籍,它将告诉你如何定义不同层次的不同对象;所以代码是这样的:(我把它们标记为“第1-2-3行”)

    4) 最后一件事是,一般来说,您需要遵循一些JAVA规范,这里我将其作为“Camel Case命名”; 因此可以更改对象的名称 从


    谢谢。

    让我先谈谈我心中的几点想法:

    1) 在类定义ErgaenztesAuto中没有meldung()方法;在我看来,它只包含一种构造方法。 应该是这样的:

    public void meldung() {
        // TODO Auto-generated method stub
        // your own code here
    }
    
    2) 对于要在捕获异常后继续运行的代码,需要有一个FINALLY块:

    try {
            // Objekt erzeugen
            ErgaenztesAuto ErgaenztesAuto1 = new ErgaenztesAuto("Rene", "BMW", "Rot", 1981, 90, 10, "Berlin", "ABCD");
            ErgaenztesAuto ErgaenztesAuto2 = new ErgaenztesAuto("Rene", "Audi", "Gelb", 2010, 70, -20000, "Muenchen", "WXYZ");
            ErgaenztesAuto1.meldung();
            ErgaenztesAuto2.meldung();
        } catch (IllegalArgumentException e) {
            System.out.println("Meine Exception trat auf: " + e.getMessage());
        } finally {
            System.out.println("I'M RUNNING AFTER EXCEPTION !!");
            // OTHER CODE LOGIC
        }
    

    3)关于对象可见性的部分,请阅读一个java基础书籍,它将告诉你如何定义不同层次的不同对象;所以代码是这样的:(我把它们标记为“第1-2-3行”)

    4) 最后一件事是,一般来说,您需要遵循一些JAVA规范,这里我将其作为“Camel Case命名”; 因此可以更改对象的名称 从


    谢谢。

    您的构造函数没有处理异常。它在扔它。因此,您必须决定在哪里处理异常以及如何处理异常。至于第一个问题,只需在try-catch块之前声明变量即可。您想用这段代码做什么?这将永远不会执行,并且将始终在ERGAENZTESUTO ERGAENZTESUTO2=new ERGAENZTESUTO(“Rene”、“Audi”、“Gelb”、2010、70、-20000、“Muenchen”、“WXYZ”)行抛出异常;你真的应该用英文名字。这将使任何人都更容易理解您的代码。其中是
    meldung()
    implementation。您的构造函数没有处理异常。它在扔它。因此,您必须决定在哪里处理异常以及如何处理异常。至于第一个问题,只需在try-catch块之前声明变量即可。您想用这段代码做什么?这将永远不会执行,并且将始终在ERGAENZTESUTO ERGAENZTESUTO2=new ERGAENZTESUTO(“Rene”、“Audi”、“Gelb”、2010、70、-20000、“Muenchen”、“WXYZ”)行抛出异常;你真的应该用英文名字。这将使任何人都更容易理解您的代码。实现
    meldung()
    在哪里。谢谢,这解决了我的问题。因为我在try{}块中声明了对象变量,所以它只在这里可用。在外部声明将使其可用。我不知道一个变量有两种不同的类型。用于声明的一个静态变量。以及变量在运行时指向的一个动态类型。那个动态类型就是对象的类型。谢谢,这就解决了我的问题。因为我在try{}块中声明了对象变量,所以它只在这里可用。在外部声明将使其可用。我不知道一个变量有两种不同的类型。用于声明的一个静态变量。以及变量在运行时指向的一个动态类型。该动态类型就是对象的类型。谢谢。我明白了。请看我对第一个答案的评论。谢谢。我明白了。请看我对第一个答案的评论。谢谢。我明白了。请看我对第一个答案的评论。谢谢。我明白了。请见见我的同事
    ErgaenztesAuto ergaenztesAuto1 ; 
    ErgaenztesAuto ergaenztesAuto2 ;