异常就是不正常的情况。在现实生活中也会出现不能随人愿的一些不正常的情况。比如每天上班过程中不一定都是交通拥堵的。碰到了交通拥堵的情况之后我们可以选择其他的办法解决。程序往往有可能会出现运行不正常的行为和状态,我们就称为异常
代码演示:
import java.util.Scanner;
public class Test1 {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.println("请输入第一个被除数:");
int a=input.nextInt();
System.out.println("请输入第二个除数数");
int b=input.nextInt();
int c=a/b;
System.out.println("c为多少:"+c);
System.out.println("程序运行中");
}
}
//执行结果:
请输入第一个被除数:
12
请输入第二个除数数
a
//当用户输入的非数字时,程序就会报异常
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at Test5.main(Test5.java:8)
代码演示:
import java.util.Scanner;
public class Test2 {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.println("请输入第一个被除数:");
//用到Scanner类中的方法,判断是否是int类型的值输入
if(input.hasNextInt()) {
int a=input.nextInt();
System.out.println("请输入第二个除数");
if(input.hasNextInt()){
int b=input.nextInt();
if(b!=0) {
int c=a/b;
System.out.println("c的为多少:"+c);
}
System.out.println("请不要输入零");
}else {
System.out.println("你输入的有错误,请重新输入!");
}
}else {
System.out.println("你输入的有错误,请重新输入!");
}
}
}
异常机制分为:
try-catch
try-catch-finally
throws
throw
throw-throws
(1)语法格式:
try{
//可能出现的异常代码
}catch(异常类型){
//解决办法
}
(2)代码演示:
import java.util.InputMismatchException;
import java.util.Scanner;
public class Test1 {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
try {
System.out.println("请输入第一个被除数:");
int a=input.nextInt();
System.out.println("请输入第二个除数数");
int b=input.nextInt();
int c=a/b;
System.out.println("c为多少:"+c);
}
//我们知道程序可能会出现的异常
catch (InputMismatchException e) {
System.out.println("程序存在异常");
}
//关闭Scanner的输出资源
input.close();
System.out.println("程序运行中");
}
}
(3)执行顺序
(4)注意事项:
(1)语法格式:
try{
//可能出现的异常代码
}catch(异常类型1){
//解决办法1
}catch(异常类型2){
//解决办法2
}。。。。。。。。。{
//解决办法n
}
(2)
import java.util.InputMismatchException;
import java.util.Scanner;
public class Test1 {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
try {
System.out.println("请输入第一个被除数:");
int a=input.nextInt();
System.out.println("请输入第二个除数数");
int b=input.nextInt();
int c=a/b;
System.out.println("c为多少:"+c);
}
//我们知道程序可能会出现的异常
catch (InputMismatchException e) {
System.out.println("程序存在异常");
}catch(NullPointException e){
System.out.println("程序存在异常");
//我们不知道程序出现可能出现的异常,就直接Exception e
}catch(Exception e) {
System.out.println("程序出现异常");
}
//关闭Scanner的输出资源
input.close();
System.out.println("程序运行中");
}
}
(3)执行顺序
(4)注意事项:
(1)语法格式
try{
//可能出现的异常代码
}catch(异常类型1){
//解决办法1
}catch(异常类型2){
//解决办法2
}。。。。。。。。。{
//解决办法n
}finally{
//最后执行的内容
}
(2)代码演示:
import java.util.InputMismatchException;
import java.util.Scanner;
public class Test1 {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
try {
System.out.println("请输入第一个被除数:");
int a=input.nextInt();
System.out.println("请输入第二个除数数");
int b=input.nextInt();
int c=a/b;
System.out.println("c为多少:"+c);
}
catch (InputMismatchException e) {
System.out.println("程序存在异常");
}catch(Exception e) {
System.out.println("程序出现异常");
}finally {
input.close();
System.out.println("程序运行中");
}
}
}
(3)执行顺序
(4)注意事项
(1)try-catch语法格式:
try(之后需要关闭的资源声明){
//可能出现的异常代码段
}catch(异常1|异常2|异常。。。){
//异常执行代码
}
(2)代码演示:
import java.util.InputMismatchException;
import java.util.Scanner;
public class Test1 {
public static void main(String[] args) {
try (Scanner input=new Scanner(System.in)){
System.out.println("请输入第一个被除数:");
int a=input.nextInt();
System.out.println("请输入第二个除数数");
int b=input.nextInt();
int c=a/b;
System.out.println("c为多少:"+c);
}
catch (InputMismatchException e) {
System.out.println("程序存在异常");
}catch(Exception e) {
System.out.println("程序出现异常");
}finally {
System.out.println("程序运行中");
}
}
}
代码演示:
import java.io.FileInputStream;
import java.io.FileNotFoundException;
public class Test3 {
public static void main(String[] args)throws NullPointerException, FileNotFoundException{
text();
}
public static void text()throws FileNotFoundException , NullPointerException {
FileInputStream fis = new FileInputStream("a.txt");
String str=null;
System.out.println(str.toString());
}
}
代码演示:
public class Test4a[
public static void main(){
int[] arrs=new int[]{56,33,88,23,89};
sort(arrs);
}
public static void sort(int[] arrs){
if(arrs==null||arrs.length==0){
throw new IllegalArgument Exception();
}
System.out.println("排序");
Arrays.sort(arrs);
for(int x:arrs){
System.out.println(x);
}
}
代码演示:
public class Person {
private int age;
private String name;
public Person() {
}
public Person(int age) {
this.age=age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
if(age<0||age>150) {
try {
throw new AgeException("年龄超过规定");
}catch(AgeException e){
System.out.println(e.getMessage());
e.printStackTrace();
}
}
this.age = age;
}
}
//自定义异常类,必须继承Exception\RuntimeException
public class AgeException extends RuntimeException{
public AgeException() {
super();
}
public AgeException(String exceptionMessage) {
super(exceptionMessage);
}
}
//测试类
public class Test4 {
public static void main(String[] args) {
Person a=new Person();
a.setAge(200);
}
}