Java 我可以尝试在setter中捕获异常吗?如果可以,我如何正确执行?
我想要做的是让用户输入年龄,让程序在检查异常的同时使用getter和setter,如果它捕捉到异常,它必须再次运行该方法 导入java.util.Scanner 公共班机{Java 我可以尝试在setter中捕获异常吗?如果可以,我如何正确执行?,java,intellij-idea,methods,getter,setter,Java,Intellij Idea,Methods,Getter,Setter,我想要做的是让用户输入年龄,让程序在检查异常的同时使用getter和setter,如果它捕捉到异常,它必须再次运行该方法 导入java.util.Scanner 公共班机{ public static void main(String[] args) { Scanner in = new Scanner(System.in); TestPatient patientZero = new TestPatient(); patientZero.setAge(in.nextIn
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
TestPatient patientZero = new TestPatient();
patientZero.setAge(in.nextInt());
System.out.println(patientZero.getAge());
}
}
//
病人类别
导入java.util.InputMismatchException;
导入java.util.Scanner
公共类受试者{
私人互联网
public int getAge(){
return age;
}
public void setAge(int newAge){
Scanner in = new Scanner(System.in);
int age;
boolean success = false;
try {
System.out.print("Enter in Your age:");
age = in.nextInt();
success = true;
} catch (InputMismatchException ex) {
System.out.println("Im sorry, please enter just you age.\nTry again");
}
this.age=newAge;
}
}使用
while
循环。在读取用户输入时,也不需要newAge
参数
public void setAge(){
int age;
Scanner in = new Scanner(System.in);
boolean success = false;
while (!success) {
try {
System.out.print("Enter in Your age:");
age = in.nextInt();
success = true;
} catch (InputMismatchException ex) {
success = false;
System.out.println("Im sorry, please enter just you age.\nTry again");
}
}
this.age=age;
}
当您将数据结构代码(如患者类别)与I/O代码(如扫描仪输入代码)混合使用时,您的整体程序结构可能会得到改进。这些代码应完全分开,例如:
public class TestPatient {
private int age;
public int getAge(){
return age;
}
public void setAge(int newAge) {
this.age = newAge;
}
}
然后I/O可以转到其他地方:
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// get your data here and create your new TestPatient
}
为什么这很重要?您事先不知道最终将如何使用主代码,并且需要保持它的开放性和灵活性,以便在任何I/O情况下使用,包括GUI(如果需要)
此外,您的代码将为每个setter调用创建一个新的Scanner对象,这是一件危险的事情,因为如果基于System.in的Scanner被关闭,那么程序将无法再从用户处获取输入
还请注意,如果不允许传入数据,则可以从setter方法引发异常
e、 g
public void设置(int newAge){
if(newAge)我不明白为什么要将newAge
传递到setAge()
中,然后提示用户输入一个未使用的年龄。不要将用户界面(UI)代码与数据结构类(例如,患者类)混合使用。它们应该完全分开来澄清你的意思:在主类中获取数据,然后根据需要创建我的新患者?@zackeryTarantino:也许在主类中,或者在单独的I/O类中,但无论如何,它都应该与你的结构类分开。没有必要把你自己画进一个角落
public void setAge(int newAge) {
if (newAge <= 0) {
String text = "for newAge is less than or equal to 0: " + newAge;
throw new IllegalArgumentException(text);
}
this.age = newAge;
}