this关键字限制用户联系方式为11位手机号码。不满足则对异常情况进行抛出,并进行捕获并提示联系方式不符合规则
时间: 2024-09-07 18:05:52 浏览: 41
在Java中,如果你想要限制用户输入的联系方式只能是11位的手机号码,通常你会在方法中使用`this`关键字来引用当前对象的属性,结合`if`语句进行验证。如果输入不符合规定,你可以抛出异常(比如`IllegalArgumentException`),并在catch块中捕获并显示错误信息。以下是一个简单的例子:
```java
public class ContactInfo {
private String phoneNumber;
public void setPhoneNumber(String number) {
if (number.length() != 11 || !number.matches("\\d{11}")) { // 使用正则表达式验证电话号码格式
throw new IllegalArgumentException("联系方式不符合规则,请输入11位手机号码");
}
this.phoneNumber = number;
}
// 其他方法...
}
```
在这个例子中,当调用`setPhoneNumber`方法并传入非11位的电话号码时,就会触发异常,并通过catch块提示用户联系方式不符合规则。
相关问题
(1) 自定义两个异常类:非法姓名异常IllegaNameException和非法地址异常IllegalAddressException。 (2) 定义Student类包含name和address属性,和setName、setAddress方法,当姓名长度小于1或者大于5时抛出IllegaNameException,当地址中不含有“省”或者“市”关键字时抛出IllegalAddressException。 (3) 编写程序抛出这两种异常,在main方法中进行捕获并合理地处理。
好的,你的第一个问题是如何自定义两个异常类:非法姓名异常IllegaNameException和非法地址异常IllegalAddressException。
可以参照以下代码实现自定义这两个异常类:
```java
// 非法姓名异常类
public class IllegaNameException extends Exception {
public IllegaNameException(String message) {
super(message);
}
}
// 非法地址异常类
public class IllegalAddressException extends Exception {
public IllegalAddressException(String message) {
super(message);
}
}
```
这两个异常类都继承自Exception类,可以使用自定义的错误信息打印异常信息。
接下来,定义Student类,并在其中对name和address属性进行判断抛出异常:
```java
public class Student {
private String name;
private String address;
public void setName(String name) throws IllegaNameException {
if(name.length() < 1 || name.length() > 5){
throw new IllegaNameException("姓名长度应在1-5之间");
}
this.name = name;
}
public void setAddress(String address) throws IllegalAddressException {
if(!address.contains("省") && !address.contains("市")){
throw new IllegalAddressException("地址中应包含省或市关键字");
}
this.address = address;
}
// 其他方法...
}
```
在setName和setAddress方法中进行判断,如果不符合条件,则抛出对应的异常。
最后,在main方法中进行异常捕获和处理:
```java
public static void main(String[] args) {
Student student = new Student();
try {
student.setName("123456"); // 测试姓名过长
student.setAddress("北京"); // 测试地址中不包含省或市关键字
} catch (IllegaNameException | IllegalAddressException e) {
e.printStackTrace();
}
}
```
在main方法中,使用try-catch语句捕获setName和setAddress方法中抛出的异常,打印异常信息或进行其他相应的处理。
Java jdk8中写一个全局的异常捕获,mysql执行sql抛出异常后捕获并根据异常的关键信息,选择对应的枚举抛出异常信息,比如执行sql抛出“Data truncation:Data too long for column”异常则选择"数据过长,无法保存到某列"的枚举进行抛出。这样的功能该怎么写
可以使用Java中的异常处理机制来实现全局的异常捕获和处理,具体步骤如下:
1. 创建一个全局异常处理类,实现`Thread.UncaughtExceptionHandler`接口,重写`uncaughtException`方法,在该方法中实现对异常的处理逻辑。
```
public class GlobalExceptionHandler implements Thread.UncaughtExceptionHandler {
@Override
public void uncaughtException(Thread t, Throwable e) {
// 异常处理逻辑
}
}
```
2. 在程序入口处设置全局异常处理器。
```
Thread.setDefaultUncaughtExceptionHandler(new GlobalExceptionHandler());
```
3. 在异常处理逻辑中,根据异常信息选择对应的枚举并抛出异常。可以使用`instanceof`关键字判断异常类型,并根据异常信息判断抛出哪个枚举异常。
```
public class GlobalExceptionHandler implements Thread.UncaughtExceptionHandler {
@Override
public void uncaughtException(Thread t, Throwable e) {
if (e instanceof SQLException) {
SQLException sqlEx = (SQLException) e;
if (sqlEx.getMessage().contains("Data too long for column")) {
throw new EnumException(EnumExceptionType.DATA_TOO_LONG_FOR_COLUMN);
}
// 其他SQLException处理逻辑
}
// 其他异常处理逻辑
}
}
```
4. 枚举异常类的实现。可以定义一个`EnumExceptionType`枚举类,其中包含不同类型的枚举值。每个枚举值都包含一个错误码和错误信息。在`EnumException`异常类中,可以通过传入的枚举值来获取对应的错误码和错误信息。
```
public enum EnumExceptionType {
DATA_TOO_LONG_FOR_COLUMN(1001, "数据过长,无法保存到某列"),
// 其他枚举值
;
private int code;
private String message;
EnumExceptionType(int code, String message) {
this.code = code;
this.message = message;
}
public int getCode() {
return code;
}
public String getMessage() {
return message;
}
}
public class EnumException extends RuntimeException {
private EnumExceptionType type;
public EnumException(EnumExceptionType type) {
this.type = type;
}
public int getCode() {
return type.getCode();
}
public String getMessage() {
return type.getMessage();
}
}
```
这样,当程序中出现`Data truncation:Data too long for column`异常时,就会抛出`EnumException`异常,并且异常信息中包含对应的错误码和错误信息。其他类型的异常也可以在全局异常处理器中进行相应的处理逻辑。
阅读全文