1、在实际开发中,可以利用异常的处理机制来处理业务逻辑错误,就是使用自定义异常(例如用户名密码输入错误)
/*
* 自定义异常通常都是通过继承一个异常来实现
* 1、Throwable
* 2、Exception
* 3、RuntimeException
*
* 自定义异常的实现是,提供一个构造方法
* 异常对象本身没有实际功能,只有一个有意义的标识
*/
/*
* 自定义异常通常都是通过继承一个异常来实现
* 1、Throwable
* 2、Exception
* 3、RuntimeException
*
* 自定义异常的实现是,提供一个构造方法
* 异常对象本身没有实际功能,只有一个有意义的标识
*/
public class MyException extends Exception{
public MyException() {
super();
}
public MyException(String massage ) {
super(massage);
}
}
public class UserService {
public User login(String username,String password)throws MyException {
if(!"abcd".equals(username)) {
throw new MyException("用户名错误");
}
if(!"1234".equals(password)) {
throw new MyException("密码错误");
}
User user=new User("abcd","1234",18,"男");
return user;
}
}
public class User {
private String username;
private String password;
private int age;
private String sex;
public User() {
super();
}
public User(String username, String password, int age, String sex) {
super();
this.username = username;
this.password = password;
this.age = age;
this.sex = sex;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Override
public String toString() {
return "User [username=" + username + ", password=" + password + ", age=" + age + ", sex=" + sex + "]";
}
}
import java.util.Scanner;
public class LoginDemo {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.println("请输入用户名");
String name=input.nextLine();
System.out.println("请输入密码");
String pass=input.nextLine();
UserService us=new UserService();
try {
User user=us.login(name, pass);
System.out.println("登录成功");
System.out.println(user);
}catch(MyException e) {
e.printStackTrace();
}
}
}
2、受检异常(Exception)和非受检异常(RuntimeException)
Exception:在编译期检查,在调用抛出这个异常的方法时,必须使用try、、、catch
RuntimeException:在运行期检查,在调用抛出这个异常的方法时,不可以使用try、、、catch
在使用自定义异常时,根据实际的业务需求,来决定使用哪一个作为父类
public class MyException extends RuntimeException{
public MyException() {
super();
}
public MyException(String massage ) {
super(massage);
}
}
~~~~~~~~~~~~~~~~~~~~~~~~
import java.util.Scanner;
public class LoginDemo {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.println("请输入用户名");
String name=input.nextLine();
System.out.println("请输入密码");
String pass=input.nextLine();
UserService us=new UserService();
User user=us.login(name, pass);
System.out.println("登录成功");
System.out.println(user);
}
}
3、assert
assert关键字,表示断言
当程序执行到某个位置的时候,程序中的某个变量的取值肯定是预期的结果,那么这种操作可以使用断言完成
assert的表达式:
public class AsserDemo {
public static void main(String[] args) {
int result =add(10,8);
assert result==10:"结果不正确";
}
private static int add(int a,int b) {
return a+b;
}
}
这样直接运行没有结果
运行程序是需要添加JVM参数-ea,断言才能起效果