我正在学习java异常,并且在一个特定的例子中遇到了问题。
下面你看我的班级ErgaenztesAuto和我的主要方法。我的做法是有效的。 我不明白的两件事:
如果我尝试访问对象外部的try块,例如ErgaenztesAuto2.meldung()编译器告诉我他没有找到对象ErgaenztesAuto2。如果我在try块中做同样的事情就可以了。因此,我必须将整个程序放在try块中。 什么是正确的方法?就像只将我期望运行的代码放入一个例外。
一旦我的构造函数抛出异常,程序就会停止并显示自定义异常消息。不执行异常后的代码。如何在构造函数中处理异常处理的exeption处理,并且仍然执行其余的代码。
谢谢! 勒
public class ErgaenztesAuto {
// Instanzvariablen
private String besitzer;
private String autotyp;
private String farbe;
private int erstzulassung;
private int leistung;
private int kmStand;
private String standort;
private String fahrgestellnummer;
public ErgaenztesAuto(String besitzer, String autotyp, String farbe,
int erstzulassung, int leistung, int kmStand, String standort, String fahrgestellnummer) {
this.besitzer = besitzer;
this.autotyp = autotyp;
this.farbe = farbe;
this.erstzulassung = erstzulassung;
this.leistung = leistung;
this.standort = standort;
this.fahrgestellnummer = fahrgestellnummer;
if (kmStand > 0 ) {
this.kmStand = kmStand;
} else {
throw new IllegalArgumentException("Kein KM Stand kleiner als 0 erlaubt!");
}
}
public class ErgaenztesAutoTest {
public static void main(String[] args) {
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");
//ErgaenztesAuto ErgaenztesAuto3 = new ErgaenztesAuto("Rene", "Volkswagen", "Blau", 2017, 65, 1000, "Hamburg", "GHIJ");
ErgaenztesAuto1.meldung();
ErgaenztesAuto2.meldung();
}
catch (IllegalArgumentException e)
{
System.out.println("Meine Exception trat auf: " + e.getMessage());
}
答案 0 :(得分:1)
当你抛出异常时,try块的执行被取消,你直接进入catch块,然后是finally块。只需将代码放在必要的try块中即可实现您的目标。
例如(我编写了一些类名):
Car car = null;
try{
car = new Car(...);
//do something with car
}catch(Exception e){
e.printStackTrace();
}
//code here will still be executed and you can access the car object, be sure to check for nullpointer exception though.
答案 1 :(得分:1)
广告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();
答案 2 :(得分:1)
让我在刚才的脑海中提出一些观点:
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行和#34;)
// Objekt erzeugen
ErgaenztesAuto ErgaenztesAuto1 = null; // line 1
ErgaenztesAuto ErgaenztesAuto2 = null; // line 2
try {
ErgaenztesAuto1 = new ErgaenztesAuto("Rene", "BMW", "Rot", 1981, 90, 10, "Berlin", "ABCD");
ErgaenztesAuto2 = new ErgaenztesAuto("Rene", "Audi", "Gelb", 2010, 70, -20000, "Muenchen", "WXYZ");
ErgaenztesAuto1.meldung();
ErgaenztesAuto2.meldung();
} catch (IllegalArgumentException e) {
System.out.println(" ErgaenztesAuto1 object is having errors:" + ErgaenztesAuto1); // line 3
System.out.println("Meine Exception trat auf: " + e.getMessage());
} finally {
System.out.println("I'M RUNNING AFTER EXCEPTION !!");
// OTHER CODE LOGIC
}
4)最后一件事是,一般来说,你需要遵循一些JAVA规范,这里我把一个作为" Camel Case命名&#34 ;; 所以你的对象'名称可以更改 从
ErgaenztesAuto ErgaenztesAuto1 ;
ErgaenztesAuto ErgaenztesAuto2 ;
到
ErgaenztesAuto ergaenztesAuto1 ;
ErgaenztesAuto ergaenztesAuto2 ;
感谢。