
异常处理还是没有太会
1
总结:

1、处理运行时异常时,采用逻辑去合理规避同时辅助try-catch处理
2、在多重catch块后面,可以加一个catch(Exception)来处理可能会被遗漏的异常
3、对于不确定的代码,也可以加上try-catch,处理潜在的异常
4、尽量去处理异常,切记只是简单的调用printStackTrace()去打印
5、具体如何处理异常,要根据不同的业务需求和异常类型去决定
6、尽量添加finally语句块去释放占用的资源
记录一下,按照自己的想法写的一些代码,留观日后查看,其他同学也可进行参照




package com.imooc.practice;
import java.util.InputMismatchException;
import java.util.Scanner;
/**
* 要求:
* 1、定义字符串数组保存图书信息
* 2、提示用户输入,分别按“书名”和“图书序号”查找图书
* 3、根据输入信息进行适当的异常处理
* a、如果输入类型错误,抛出“错误命令异常”,并提示重新输入
* b、如果书名不存在,抛出“图书不存在异常”,并提示重新输入
* c、如果图书序号超过字符串数组范围,抛出“图书不存在异常”,并提示重新输入
*/
public class BorrowBooks {
public static String[] books = {"C语言", "数据结构", "汇编语言", "高数", "大学语文", "毛概"};
public static void main(String[] args) {
BorrowBooks borrowBooks = new BorrowBooks();
borrowBooks.test();
}
/**
* 调用方法
*/
public void test() {
try {
System.out.println("输入命令:1-按照名称查找图书;2-按照序号查询图书");
int input = new Scanner(System.in).nextInt();
if (input == 1) {
System.out.println("输入图书名称:");
queryBookName();
} else if (input == 2) {
System.out.println("输入图书序号:");
queryBookNum();
}
} catch (InputMismatchException e) {
System.out.println("命令输入错误,请根据提示输入数字命令!");
test();
}
}
/**
* 通过书名进行查询
*/
public void queryBookName() {
String bookname = new Scanner(System.in).next();
int booktype = 0;
for (String book : books
) {
if (bookname.equals(book)) {
System.out.println("书名:" + bookname);
booktype = 1;
break;
}
}
if (booktype == 0) {
System.out.println("图书不存在!");
test();
}
}
/**
* 通过序号进行查询
*/
public void queryBookNum() {
try {
int booknum = new Scanner(System.in).nextInt();
for (int i = 0; i < books.length; i++) {
if (i == booknum) {
System.out.println("书名:" + books[i-1]);
}
}
}catch (InputMismatchException e){
System.out.println("命令输入错误,请根据提示输入数字命令!");
test();
}catch (ArrayIndexOutOfBoundsException e){
System.out.println("图书不存在!");
test();
}
}
}
package com.imooc.practice;
import java.util.InputMismatchException;
import java.util.Scanner;
/**
* 要求:
* 1、定义字符串数组保存图书信息
* 2、提示用户输入,分别按“书名”和“图书序号”查找图书
* 3、根据输入信息进行适当的异常处理
* a、如果输入类型错误,抛出“错误命令异常”,并提示重新输入
* b、如果书名不存在,抛出“图书不存在异常”,并提示重新输入
* c、如果图书序号超过字符串数组范围,抛出“图书不存在异常”,并提示重新输入
*/
public class BorrowBooks {
public static String[] books = {"C语言", "数据结构", "汇编语言", "高数", "大学语文", "毛概"};
public static void main(String[] args) {
BorrowBooks borrowBooks = new BorrowBooks();
borrowBooks.test();
}
/**
* 调用方法
*/
public void test() {
try {
System.out.println("输入命令:1-按照名称查找图书;2-按照序号查询图书");
int input = new Scanner(System.in).nextInt();
if (input == 1) {
System.out.println("输入图书名称:");
queryBookName();
} else if (input == 2) {
System.out.println("输入图书序号:");
queryBookNum();
}
} catch (InputMismatchException e) {
System.out.println("命令输入错误,请根据提示输入数字命令!");
test();
}
}
/**
* 通过书名进行查询
*/
public void queryBookName() {
String bookname = new Scanner(System.in).next();
int booktype = 0;
for (String book : books
) {
if (bookname.equals(book)) {
System.out.println("书名:" + bookname);
booktype = 1;
break;
}
}
if (booktype == 0) {
System.out.println("图书不存在!");
test();
}
}
/**
* 通过序号进行查询
*/
public void queryBookNum() {
try {
int booknum = new Scanner(System.in).nextInt();
for (int i = 0; i < books.length; i++) {
if (i == booknum) {
System.out.println("书名:" + books[i-1]);
}
}
}catch (InputMismatchException e){
System.out.println("命令输入错误,请根据提示输入数字命令!");
test();
}catch (ArrayIndexOutOfBoundsException e){
System.out.println("图书不存在!");
test();
}
}
}
package com.imooc.practice;
import java.util.InputMismatchException;
import java.util.Scanner;
public class BorrowBooks {
public static String[] books = {"C语言", "数据结构", "汇编语言", "高数", "大学语文", "毛概"};
public static void main(String[] args) {
BorrowBooks borrowBooks = new BorrowBooks();
borrowBooks.test();
}
public void test() {
try {
System.out.println("输入命令:1-按照名称查找图书;2-按照序号查询图书");
int input = new Scanner(System.in).nextInt();
if (input == 1) {
System.out.println("输入图书名称:");
queryBookName();
} else if (input == 2) {
System.out.println("输入图书序号:");
queryBookNum();
}
} catch (InputMismatchException e) {
System.out.println("命令输入错误,请根据提示输入数字命令!");
test();
}
}
public void queryBookName() {
String bookname = new Scanner(System.in).next();
int booktype = 0;
for (String book : books
) {
if (bookname.equals(book)) {
System.out.println("书名:" + bookname);
booktype = 1;
break;
}
}
if (booktype == 0) {
System.out.println("图书不存在!");
test();
}
}
public void queryBookNum() {
try {
int booknum = new Scanner(System.in).nextInt();
for (int i = 0; i < books.length; i++) {
if (i == booknum) {
System.out.println("书名:" + books[i-1]);
}
}
}catch (InputMismatchException e){
System.out.println("命令输入错误,请根据提示输入数字命令!");
test();
}catch (ArrayIndexOutOfBoundsException e){
System.out.println("图书不存在!");
test();
}
}
}
package com.imooc.practice;
import java.util.InputMismatchException;
import java.util.Scanner;
public class BorrowBooks {
public static String[] books = {"C语言", "数据结构", "汇编语言", "高数", "大学语文", "毛概"};
public static void main(String[] args) {
BorrowBooks borrowBooks = new BorrowBooks();
borrowBooks.test();
}
/**
* 调用方法
*/
public void test() {
try {
System.out.println("输入命令:1-按照名称查找图书;2-按照序号查询图书");
int input = new Scanner(System.in).nextInt();
if (input == 1) {
System.out.println("输入图书名称:");
queryBookName();
} else if (input == 2) {
System.out.println("输入图书序号:");
queryBookNum();
}
} catch (InputMismatchException e) {
System.out.println("命令输入错误,请根据提示输入数字命令!");
test();
}
}
/**
* 通过书名进行查询
*/
public void queryBookName() {
String bookname = new Scanner(System.in).next();
int booktype = 0;
for (String book : books
) {
if (bookname.equals(book)) {
System.out.println("书名:" + bookname);
booktype = 1;
break;
}
}
if (booktype == 0) {
System.out.println("图书不存在!");
test();
}
}
/**
* 通过序号进行查询
*/
public void queryBookNum() {
try {
int booknum = new Scanner(System.in).nextInt();
for (int i = 0; i < books.length; i++) {
if (i == booknum) {
System.out.println("书名:" + books[i-1]);
}
}
}catch (InputMismatchException e){
System.out.println("命令输入错误,请根据提示输入数字命令!");
test();
}catch (ArrayIndexOutOfBoundsException e){
System.out.println("图书不存在!");
test();
}
}
}
package com.imooc.practice;
import java.util.InputMismatchException;
import java.util.Scanner;
public class BorrowBooks {
public static String[] books = {"C语言", "数据结构", "汇编语言", "高数", "大学语文", "毛概"};
public static void main(String[] args) {
BorrowBooks borrowBooks = new BorrowBooks();
borrowBooks.test();
}
/**
* 调用方法
*/
public void test() {
try {
System.out.println("输入命令:1-按照名称查找图书;2-按照序号查询图书");
int input = new Scanner(System.in).nextInt();
if (input == 1) {
System.out.println("输入图书名称:");
queryBookName();
} else if (input == 2) {
System.out.println("输入图书序号:");
queryBookNum();
}
} catch (InputMismatchException e) {
System.out.println("命令输入错误,请根据提示输入数字命令!");
test();
}
}
/**
* 通过书名进行查询
*/
public void queryBookName() {
String bookname = new Scanner(System.in).next();
int booktype = 0;
for (String book : books
) {
if (bookname.equals(book)) {
System.out.println("书名:" + bookname);
booktype = 1;
break;
}
}
if (booktype == 0) {
System.out.println("图书不存在!");
test();
}
}
/**
* 通过序号进行查询
*/
public void queryBookNum() {
try {
int booknum = new Scanner(System.in).nextInt();
for (int i = 0; i < books.length; i++) {
if (i == booknum) {
System.out.println("书名:" + books[i-1]);
}
}
}catch (InputMismatchException e){
System.out.println("命令输入错误,请根据提示输入数字命令!");
test();
}catch (ArrayIndexOutOfBoundsException e){
System.out.println("图书不存在!");
test();
}
}
}
package com.imooc.practice;
import java.util.InputMismatchException;
import java.util.Scanner;
/**
* 要求:
* 1、定义字符串数组保存图书信息
* 2、提示用户输入,分别按“书名”和“图书序号”查找图书
* 3、根据输入信息进行适当的异常处理
* a、如果输入类型错误,抛出“错误命令异常”,并提示重新输入
* b、如果书名不存在,抛出“图书不存在异常”,并提示重新输入
* c、如果图书序号超过字符串数组范围,抛出“图书不存在异常”,并提示重新输入
*/
public class BorrowBooks {
public static String[] books = {"C语言", "数据结构", "汇编语言", "高数", "大学语文", "毛概"};
public static void main(String[] args) {
BorrowBooks borrowBooks = new BorrowBooks();
borrowBooks.test();
}
/**
* 调用方法
*/
public void test() {
try {
System.out.println("输入命令:1-按照名称查找图书;2-按照序号查询图书");
int input = new Scanner(System.in).nextInt();
if (input == 1) {
System.out.println("输入图书名称:");
queryBookName();
} else if (input == 2) {
System.out.println("输入图书序号:");
queryBookNum();
}
} catch (InputMismatchException e) {
System.out.println("命令输入错误,请根据提示输入数字命令!");
test();
}
}
/**
* 通过书名进行查询
*/
public void queryBookName() {
String bookname = new Scanner(System.in).next();
int booktype = 0;
for (String book : books
) {
if (bookname.equals(book)) {
System.out.println("书名:" + bookname);
booktype = 1;
break;
}
}
if (booktype == 0) {
System.out.println("图书不存在!");
test();
}
}
/**
* 通过序号进行查询
*/
public void queryBookNum() {
try {
int booknum = new Scanner(System.in).nextInt();
for (int i = 0; i < books.length; i++) {
if (i == booknum) {
System.out.println("书名:" + books[i-1]);
}
}
}catch (InputMismatchException e){
System.out.println("命令输入错误,请根据提示输入数字命令!");
test();
}catch (ArrayIndexOutOfBoundsException e){
System.out.println("图书不存在!");
test();
}
}
}
记录一下,按照自己的想法写到的代码。其他同学也可进行参照
package com.imooc.practice;
import java.util.InputMismatchException;
import java.util.Scanner;
public class BorrowBooks {
public static String[] books = {"C语言", "数据结构", "汇编语言", "高数", "大学语文", "毛概"};
public static void main(String[] args) {
BorrowBooks borrowBooks = new BorrowBooks();
borrowBooks.test();
}
/**
* 调用方法
*/
public void test() {
try {
System.out.println("输入命令:1-按照名称查找图书;2-按照序号查询图书");
int input = new Scanner(System.in).nextInt();
if (input == 1) {
System.out.println("输入图书名称:");
queryBookName();
} else if (input == 2) {
System.out.println("输入图书序号:");
queryBookNum();
}
} catch (InputMismatchException e) {
System.out.println("命令输入错误,请根据提示输入数字命令!");
test();
}
}
/**
* 通过书名进行查询
*/
public void queryBookName() {
String bookname = new Scanner(System.in).next();
int booktype = 0;
for (String book : books
) {
if (bookname.equals(book)) {
System.out.println("书名:" + bookname);
booktype = 1;
break;
}
}
if (booktype == 0) {
System.out.println("图书不存在!");
test();
}
}
/**
* 通过序号进行查询
*/
public void queryBookNum() {
try {
int booknum = new Scanner(System.in).nextInt();
for (int i = 0; i < books.length; i++) {
if (i == booknum) {
System.out.println("书名:" + books[i-1]);
}
}
}catch (InputMismatchException e){
System.out.println("命令输入错误,请根据提示输入数字命令!");
test();
}catch (ArrayIndexOutOfBoundsException e){
System.out.println("图书不存在!");
test();
}
}
}
记录一下,按照自己的想法写到的代码,留观日后需要。其他同学也可进行参照
package com.imooc.practice;
import java.util.InputMismatchException;
import java.util.Scanner;
public class BorrowBooks {
public static String[] books = {"C语言", "数据结构", "汇编语言", "高数", "大学语文", "毛概"};
public static void main(String[] args) {
BorrowBooks borrowBooks = new BorrowBooks();
borrowBooks.test();
}
/**
* 调用方法
*/
public void test() {
try {
System.out.println("输入命令:1-按照名称查找图书;2-按照序号查询图书");
int input = new Scanner(System.in).nextInt();
if (input == 1) {
System.out.println("输入图书名称:");
queryBookName();
} else if (input == 2) {
System.out.println("输入图书序号:");
queryBookNum();
}
} catch (InputMismatchException e) {
System.out.println("命令输入错误,请根据提示输入数字命令!");
test();
}
}
/**
* 通过书名进行查询
*/
public void queryBookName() {
String bookname = new Scanner(System.in).next();
int booktype = 0;
for (String book : books
) {
if (bookname.equals(book)) {
System.out.println("书名:" + bookname);
booktype = 1;
break;
}
}
if (booktype == 0) {
System.out.println("图书不存在!");
test();
}
}
/**
* 通过序号进行查询
*/
public void queryBookNum() {
try {
int booknum = new Scanner(System.in).nextInt();
for (int i = 0; i < books.length; i++) {
if (i == booknum) {
System.out.println("书名:" + books[i-1]);
}
}
}catch (InputMismatchException e){
System.out.println("命令输入错误,请根据提示输入数字命令!");
test();
}catch (ArrayIndexOutOfBoundsException e){
System.out.println("图书不存在!");
test();
}
}
}
记录一下,按照自己的想法写到的代码,留观日后需要。其他同学也可进行参照
package com.imooc.practice;
import java.util.InputMismatchException;
import java.util.Scanner;
/**
* 要求:
* 1、定义字符串数组保存图书信息
* 2、提示用户输入,分别按“书名”和“图书序号”查找图书
* 3、根据输入信息进行适当的异常处理
* a、如果输入类型错误,抛出“错误命令异常”,并提示重新输入
* b、如果书名不存在,抛出“图书不存在异常”,并提示重新输入
* c、如果图书序号超过字符串数组范围,抛出“图书不存在异常”,并提示重新输入
*/
public class BorrowBooks {
public static String[] books = {"C语言", "数据结构", "汇编语言", "高数", "大学语文", "毛概"};
public static void main(String[] args) {
BorrowBooks borrowBooks = new BorrowBooks();
borrowBooks.test();
}
/**
* 调用方法
*/
public void test() {
try {
System.out.println("输入命令:1-按照名称查找图书;2-按照序号查询图书");
int input = new Scanner(System.in).nextInt();
if (input == 1) {
System.out.println("输入图书名称:");
queryBookName();
} else if (input == 2) {
System.out.println("输入图书序号:");
queryBookNum();
}
} catch (InputMismatchException e) {
System.out.println("命令输入错误,请根据提示输入数字命令!");
test();
}
}
/**
* 通过书名进行查询
*/
public void queryBookName() {
String bookname = new Scanner(System.in).next();
int booktype = 0;
for (String book : books
) {
if (bookname.equals(book)) {
System.out.println("书名:" + bookname);
booktype = 1;
break;
}
}
if (booktype == 0) {
System.out.println("图书不存在!");
test();
}
}
/**
* 通过序号进行查询
*/
public void queryBookNum() {
try {
int booknum = new Scanner(System.in).nextInt();
for (int i = 0; i < books.length; i++) {
if (i == booknum) {
System.out.println("书名:" + books[i-1]);
}
}
}catch (InputMismatchException e){
System.out.println("命令输入错误,请根据提示输入数字命令!");
test();
}catch (ArrayIndexOutOfBoundsException e){
System.out.println("图书不存在!");
test();
}
}
}
记录一下,按照自己的想法写到的代码,留观日后需要。其他同学也可进行参照
package com.imooc.practice;
import java.util.InputMismatchException;
import java.util.Scanner;
/**
* 要求:
* 1、定义字符串数组保存图书信息
* 2、提示用户输入,分别按“书名”和“图书序号”查找图书
* 3、根据输入信息进行适当的异常处理
* a、如果输入类型错误,抛出“错误命令异常”,并提示重新输入
* b、如果书名不存在,抛出“图书不存在异常”,并提示重新输入
* c、如果图书序号超过字符串数组范围,抛出“图书不存在异常”,并提示重新输入
*/
public class BorrowBooks {
public static String[] books = {"C语言", "数据结构", "汇编语言", "高数", "大学语文", "毛概"};
public static void main(String[] args) {
BorrowBooks borrowBooks = new BorrowBooks();
borrowBooks.test();
}
/**
* 调用方法
*/
public void test() {
try {
System.out.println("输入命令:1-按照名称查找图书;2-按照序号查询图书");
int input = new Scanner(System.in).nextInt();
if (input == 1) {
System.out.println("输入图书名称:");
queryBookName();
} else if (input == 2) {
System.out.println("输入图书序号:");
queryBookNum();
}
} catch (InputMismatchException e) {
System.out.println("命令输入错误,请根据提示输入数字命令!");
test();
}
}
/**
* 通过书名进行查询
*/
public void queryBookName() {
String bookname = new Scanner(System.in).next();
int booktype = 0;
for (String book : books
) {
if (bookname.equals(book)) {
System.out.println("书名:" + bookname);
booktype = 1;
break;
}
}
if (booktype == 0) {
System.out.println("图书不存在!");
test();
}
}
/**
* 通过序号进行查询
*/
public void queryBookNum() {
try {
int booknum = new Scanner(System.in).nextInt();
for (int i = 0; i < books.length; i++) {
if (i == booknum) {
System.out.println("书名:" + books[i-1]);
}
}
}catch (InputMismatchException e){
System.out.println("命令输入错误,请根据提示输入数字命令!");
test();
}catch (ArrayIndexOutOfBoundsException e){
System.out.println("图书不存在!");
test();
}
}
}
2
1
笔记
运行结果示意图
模拟借书系统
总结与经验
。。
package imooc_homework;
import java.util.InputMismatchException;
import java.util.Scanner;
public class Library_demo1 {
public static void main (String[] main){
Book[] books = {
new Book("论语",1),
new Book("高数",2),
new Book("电路",3),
new Book("大英",4)
};
System.out.println("--------图书系统--------");
System.out.println("输入命令:1-按名称查书;2-按序号查书");
// 驗證命令是否錯誤
int checkStatus = 0;
while (true) {
checkStatus = systemCheckCallack();
if( checkStatus != 1 && checkStatus != 2 )
System.out.println("命令错误,请重新输入!");
else break;
}
while(true) {
boolean exit = false;
// 找name
if(checkStatus == 1) {
System.out.print("请输入图书名称(name):");
Scanner scan = new Scanner(System.in); // 使用者輸入 "大英"
String bookName = scan.next(); // 使用者輸入字串(不包含空格和tag)
for (Book bookData : books) {
if(bookName.equals(bookData.name)) {
System.out.println( "找到图书:" + bookData.name + " 序号为:"+bookData.id );
exit = true;
}
}
if(exit == false) {
System.out.println("您要的图书不存在!");
}
}
// 找id
else if (checkStatus == 2) {
System.out.print("请输入图书序号(id):");
Scanner scan = new Scanner(System.in); // 使用者輸入 1 or 2 or other number
int numId = scan.nextInt();
for (Book bookData : books) {
if(numId == bookData.id) {
System.out.println( "找到图书:" + bookData.name + " 序号为:"+bookData.id );
exit = true;
}
}
if(exit == false) {
System.out.println("您要的图书不存在!");
}
}
System.out.println("请问是否继续查书?1-是 2-否");
int continueOrNot = 0;
while(true){
continueOrNot = systemCheckCallack();
if(continueOrNot != 1 && continueOrNot != 2) {
System.out.println("命令错误,请重新输入!");
} else {
break;
}
}
if(continueOrNot == 2) {
System.out.println("感谢您的使用,再见!");
break;
}
}
}
// 使用者輸入內容
public static int systemCheckCallack () {
Scanner scan = new Scanner(System.in);
while(true) {
try {
// next() 字串(不包含空白字元、空白鍵、Tab)
// nextInt() 整數
// nextFloat() 取得使用者輸入的浮點數
// nextLine() 使用者輸入的字串(包含空白字元、空白鍵、Tab)
int num = scan.nextInt();
return num;
} catch(InputMismatchException e) {
System.out.println("请根据提示输入数字命令!");
scan.next();
// throw e;
}
}
}
}
package imooc_homework;
public class Book {
public String name;
public int id;
public Book(String name, int id){
this.name = name;
this.id = id;
};
}
经验·与总结
package com.stx.librarySystem;
import com.stx.Test.Demo2;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class library {
public int input(){
System.out.println("输入命令:1-按照名称查找图书;2-按照序号查找图书;");
Scanner in = new Scanner(System.in);
int i=0;
try{
i=in.nextInt();
return i;
}catch (Exception e){
System.out.println("命令输入错误!请根据提示重新输入数字命令!");
return -1;
}
}
public static void main(String[] args) {
List<String> list=new ArrayList<String>();
list.add("数据结构");
list.add("高数");
list.add("化学");
list.add("物理");
// list.forEach((e)->{
// System.out.println(e);
// });
library lib = new library();
int i=lib.input();
while (i==-1){
i=lib.input();
}
if (i==1){
System.out.println("输入图书名称:");
Scanner in = new Scanner(System.in);
String bookname=in.next();
int rs=list.indexOf(bookname);
if (rs==-1){
try {
throw new Demo2("图书不存在!");
} catch (Demo2 demo2) {
demo2.printStackTrace();
}
}else {
System.out.println("book:"+list.get(rs));
}
}else if (i==2){
System.out.println("输入图书序号:");
Scanner in = new Scanner(System.in);
int bookid=in.nextInt();
if (bookid>list.size()){
try {
throw new Demo2("图书不存在!");
} catch (Demo2 demo2) {
demo2.printStackTrace();
}
}else{
System.out.println("book:"+list.get(bookid-1));
}
}
}
}模拟借书系统代码,仅供参考!
异常
处理运行时异常时,采用逻辑去合理规避同时辅助try—catch处理
在多重catch块后面,可以加一个catch(Exception)来处理可能会被遗漏的异常
对于不确定的代码,也可以加上try—catch,处理潜在的异常
尽量去处理异常,切忌只是简单的调用printStackTrace()去打印输出
具体如何处理异常,要根据不同的业务需求和异常类型去决定
尽量添加finally语句块去释放占用的资源
异常在实际应用中的经验与总结
练习题运行结果:
