异常&正则表达式习题作业

一、异常作业:

1.简述什么是异常、异常的继承体系?

异常:在java程序运行过程中,出现的不正常的情况,出现的错误,称为异常。

Java异常体系

|——Throwable:可抛出的,异常的顶层父类,异常类都是它的子类  (实现类描述java的错误和异常)

  |——Error 错误,用于描述那些无法捕获和处理的错误情况,属于非常严重的错误。 StackOverflowError(错误)一般不通过代码去处理。

  |——Exceprion (异常)

 |——RuntimeException 异常,用于描述那些可以捕获和处理的异常情况,属于不太严重的错误,ArraysIndexOutOfBoundsException

(运行时异常)

 |——非运行时异常(受检查异常)

 

  1. 简述异常的处理方式?

1在jvm中默认处理异常的机制

在代码的某个位置,出现和正常情况不同的情况,就将异常封装到一个异常对象。

将异常对象抛给调用该方法的方法。

某个方法接收到抛过来的异常,也没有办法自己处理,继续向上抛出,最终抛给主方法,主方法也没有办法处理,抛给调用自己的jvm虚拟机。

JVM只能将错误信息通过错误流打印出来。

2手动处理异常的方式(两种方式)

①异常的声明:某个方法有编译时异常,编译就会无法通过,需要在异常所在的方法声明上,声明该方法可能出现的编译异常。

②异常的处理:出现异常之后,可以通过某些格式来捕获和处理异常,可以定义自己处理异常的逻辑。

 

  1. throw和throws关键字的使用位置和格式?

throws关键字在方法声明时,进行异常的抛出,交给方法的调用者去处理。当方法的调用者也不知道如何处理,或不想处理时,可以继续向上抛出。

 格式:throws 异常类名

类型   方法名(参数列表) throws  异常列表{  

  代码

 }

throw方法中可能出现异常的语句下面抛出抛出异常对象

throw new 异常名称()

格式为:throw  ThrowableObject

例如:throw  new ArithmeticException();

 

  1. 多个catch处理的注意事项?

异常捕获的先后顺序应该“从小到大”。catch(Exception e)模块一般都写在catch块的最下面

单个try块能有许多catch块,当try块有“可能引起不同类型异常”的语句时,多个catch块是必须的。

 

 

  1. 简述finally关键字的特点和作用?

Final修饰的代码无论会不会出现异常都一定会执行,除非虚拟机挂掉了

代码中有必须要执行的代码(比如释放资源)的情况可以使用finally

 

  1. Throwable类的常见方法及方法描述?
  1. toString() 输出该异常的类名。
  2. getMessage() 输出异常的信息,需要通过构造方法传入异常信息。
  3. printStackTrace() 打印栈信息。

 

 

  1. 自定义异常的步骤?

定义一个异常类继承Exception 或 RuntimeException

重写父类的方法

public class 异常类名称 extends Exception/RuntimeException{

//无参构造方法

public 异常类名称(){

 

}

//有参构造

public 异常类名称(String message){

super(message);

}

}

 

8 首先预测下列程序的运行结果,然后编译、执行以验证你的预测: 

  import java.io.*;

  public class C11{

       public static void main(String args[]) {

              for(int i = 0; i < 4;i++) {

                     int k;

                     try {

                           switch( i ) {

                                   case 0:       

                                          int zero = 0;

                                          k = 911 / zero;

                                          break;

                                   case 1:       

                                          int b[ ] = null;

                                          k = b[0];

                                          break;

                                   case 2:      

                                          int c[ ] = new int[2];

                                          k = c[9];

                                          break;

                                   case 3:       

                                          char ch = "abc".charAt(99);

                                          break;

                              }

                     }catch(Exception e) {

                            System.out.println("\nTestcase #" + i + "\n");

                            System.out.println(e);

                 }

              }

           }

}

运行结果:

Testcase #0

java.lang.ArithmeticException: / by zero

Testcase #1

java.lang.NullPointerException

Testcase #2

java.lang.ArrayIndexOutOfBoundsException: 9

Testcase #3

java.lang.StringIndexOutOfBoundsException: String index out of range: 99

 

  1. 将上述程序中catch(Exception e)更改为catch(ArithmeticException e),预测程序运行的结果并验证之。

Testcase #0

Exception in thread "main" java.lang.ArithmeticException: / by zero

java.lang.NullPointerException

at com.cc.exception.Demo09.main(Demo09.java:15)

 

  1. 将上述程序中catch(Exception e)更改为catch(NullPointerException e),预测程序运行的结果并验证之。

Exception in thread "main" java.lang.ArithmeticException: / by zero

at com.cc.exception.Demo09.main(Demo09.java:11)

 

(4)在(3)的程序中添加一些语句,使得程序能够输出Exception Test Finished!的信息。(提示:使用finally语句)

 public static void main(String args[]) {

          for(int i = 0; i < 4;i++) {

                 int k;

                 try {

                       switch( i ) {

                               case 0:       

                                      int zero = 0;

                                      k = 911 / zero;//除数为0,算术异常

                                      break;

                               case 1:       

                                      int b[ ] = null;//空指针异常

                                      k = b[0];

                                      break;

                               case 2:      

                                      int c[ ] = new int[2];

                                      k = c[9];//索引越界异常

                                      break;

                               case 3:       

                                      char ch = "abc".charAt(99);

                                      break;//类型不匹配

                          }

                 }catch(NullPointerException e) {

                        System.out.println("\nTestcase #" + i + "\n");

                        System.out.println(e);

             }finally{

              System.out.println("Exception Test Finished!");

             }

          }

       }

}

 

正则表达式:

1猜数游戏,随机生成一个1 到100之间的整数,从键盘输入数字进行猜数,一共可以猜5次,如果猜小了在控制台输出猜小了,如果猜大了,在控制台输出猜大了,如果猜

对了在控制台输入 恭喜你猜对了,并结束游戏。 注意当输入的不是数字或数字不合服规则时,不算次数

package com.cc.regex;



import java.util.Random;

import java.util.Scanner;



/*9 猜数游戏,随机生成一个1 到100之间的整数,从键盘输入数字进行猜数,一共可以猜5次,如果猜小了在控制台输出猜小了,如果猜大了,在控制台输出猜大了,如果猜

对了在控制台输入 恭喜你猜对了,并结束游戏。 注意当输入的不是数字或数字不合服规则时,不算次数*/

public class GuessNumberGame {



public static void main(String[] args) {

// 创建Scanner对象,并关联键盘,导包,Scanner在util包下面

Scanner sc = new Scanner(System.in);

// 创建Random 对象 Random 也是在util包下面

Random r = new Random();

System.out.println("********欢迎进入猜数字小游戏********");



int count = 1;

while (true) {

// [1,5] 或者 [0,5)都是5次,当大于5次的时候就提示用户免费次数已使用完,并使用break结束循环

if (count > 5) {

System.out.println("很遗憾☹,您的免费猜测次数已经使用完毕,若要继续猜测,请充值!");

break;

} else {

// 生成随机数

int rn = r.nextInt(100) + 1;

System.out.println("请输入您猜测的数字:");

// 使用字符串接收输入的数字,方便后面使用正则表达式的判断

String line = sc.nextLine();

// 定义正则表达式:[1-9]出现一次,[0-9]可以出现一次也可以不出现,也就是个位数和两位数

String regex = "[1-9][0-9]{0,1}";

// "\\D+"代表出现一次或者多次非数字,或者以0开头,或者是负数,或者长度大于3,以及等于三的时候不是100都是不合法的输入

if (line.matches("\\D+") || line.startsWith("0") || line.startsWith("-") || line.length() > 3

|| (line.length() == 3 && (!line.equals("100")))) {

System.out.println("您的输入不合法,请重新输入:");

// 输入不合法时,次数不加1

} else if (line.matches(regex) || line.equals("100")) {

// Integer类中的parseInt()方法可以将字符串的数字转换为整型,Integer的toString()方法可以将整型转换为字符串类型

int gn = Integer.parseInt(line);

if (gn > rn) {

System.out.println("猜大了哦^-^");

} else if (gn < rn) {

System.out.println("猜小了哦^-^");

} else {

// 当出现特殊符号时,需要保存为UTF-8格式

System.out.println("恭喜您,猜中了☺");

}

count++;

}

}

}

}



}

2.练习: 键盘录入一个QQ号,判断QQ号是否是合法

      必须全部都是数字

  必须5-15位数

    0不能开头

package com.cc.regex;

import java.util.Scanner;

/*键盘录入一个QQ号,判断QQ号是否是合法
      必须全部都是数字
     必须5-15位数
     0不能开头*/
public class TestQQNum {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入您的QQ号:");
		String line = sc.nextLine();
		String regex = "[1-9][0-9]{4,14}";// 一定记得不可以有空格哦,大括号里面以逗号分隔
		if (line.matches(regex)) {
			System.out.println("您输入的是一个合法的QQ号");
		} else {
			System.out.println("您输入的QQ号码不合法");
		}
	}

}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值