java实验描述: 一个用户类,用户类的成员变量有用户姓名、用户年龄、用户工资以及用户邮箱。考虑 对自定义异常类,对设定的用户工资和设定的邮箱进行输入数据的合法性检查。 实验要求: 1. 创建一个 MyException 异常类,继承自 RuntimeException。是本项目的异常类的超类 2. 创建 MalformedSalary 类和 MalformedEmailAddress 类,继承自 MyException 类。 MalformedSalary 类用于对输入 salary 的合法性检查;MalformedEmailAddress 用于对输 入 email address 的合法性检查 3. 一个 User 类 (1) name, age, salary, emailAddress 四个成员变量 (2) 无参构造方法将成员变量设置为默认值 (3) 各成员变量的 getter 和 setter 方法 (4) setSalary()方法中要进行对设置的 salary 数据类型做检查(判断符合你所定义的 salary 数据类型,不符合的话抛出异常) (5) setEmailAddress()方法中要对输入的emial address做合法性的检查。如果输入的email address 不合法,提供再输入一次的机会,对新输入的 email address 同样要做合法性 检查 (6) toString()方法返回 User 的信息 4. UserTester 类 创建 User 的对象,并调用相应方法进行测试
时间: 2024-03-03 10:49:56 浏览: 125
下面是一个可能的实现,包括 `MyException` 异常类、 `MalformedSalary` 和 `MalformedEmailAddress` 两个子类异常、 `User` 类和 `UserTester` 类:
```java
// MyException.java
public class MyException extends RuntimeException {
public MyException(String message) {
super(message);
}
}
// MalformedSalary.java
public class MalformedSalary extends MyException {
public MalformedSalary(String message) {
super(message);
}
}
// MalformedEmailAddress.java
public class MalformedEmailAddress extends MyException {
public MalformedEmailAddress(String message) {
super(message);
}
}
// User.java
public class User {
private String name;
private int age;
private double salary;
private String emailAddress;
public User() {
this.name = "Unknown";
this.age = 0;
this.salary = 0.0;
this.emailAddress = "";
}
public User(String name, int age, double salary, String emailAddress) {
this.name = name;
this.age = age;
this.salary = salary;
this.emailAddress = emailAddress;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) throws MalformedSalary {
if (salary < 0) {
throw new MalformedSalary("Salary must not be negative!");
}
this.salary = salary;
}
public String getEmailAddress() {
return emailAddress;
}
public void setEmailAddress(String emailAddress) throws MalformedEmailAddress {
if (!isValidEmailAddress(emailAddress)) {
throw new MalformedEmailAddress("Invalid email address!");
}
this.emailAddress = emailAddress;
}
private boolean isValidEmailAddress(String emailAddress) {
// 这里简单判断一下邮箱格式是否合法,实际应用中可能需要更复杂的验证
return emailAddress.matches("\\w+@\\w+\\.\\w+");
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
", salary=" + salary +
", emailAddress='" + emailAddress + '\'' +
'}';
}
}
// UserTester.java
import java.util.Scanner;
public class UserTester {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
User user = new User();
System.out.println("Default user: " + user);
System.out.print("Enter name: ");
user.setName(scanner.nextLine());
System.out.print("Enter age: ");
user.setAge(scanner.nextInt());
scanner.nextLine(); // consume the newline character
while (true) {
try {
System.out.print("Enter salary: ");
user.setSalary(scanner.nextDouble());
break; // break the loop if the input is valid
} catch (MalformedSalary e) {
System.out.println(e.getMessage());
}
}
scanner.nextLine(); // consume the newline character
while (true) {
try {
System.out.print("Enter email address: ");
user.setEmailAddress(scanner.nextLine());
break; // break the loop if the input is valid
} catch (MalformedEmailAddress e) {
System.out.println(e.getMessage());
}
}
System.out.println("User: " + user);
}
}
```
这个实现中,`MyException` 是 `MalformedSalary` 和 `MalformedEmailAddress` 两个异常类的超类,用于方便的处理这两个异常。`User` 类有四个成员变量 `name`、`age`、`salary` 和 `emailAddress`,以及相应的 getter 和 setter 方法。在 `setSalary()` 和 `setEmailAddress()` 方法中,我们分别对输入的数据进行了合法性检查,并在输入不合法时抛出了对应的异常。`UserTester` 类则用于测试 `User` 类的各个方法,其中使用了 `Scanner` 从控制台读取输入。注意在输入 `salary` 和 `email address` 时,我们使用了异常处理机制,使得用户可以在输入不合法时重新输入。
阅读全文