package test7;

public class InvalidScroreException extends Exception {

    public InvalidScroreException(String message) {
super(message);
} }
这是我自己定义的异常!
package test7;

import java.util.Scanner;

public class Demo {
public static void main(String[] args) throws InvalidScroreException {
Scanner sc = new Scanner(System.in);
String line = sc.nextLine();
int num = 0;
try {
num = Integer.parseInt(line);
System.out.println(num);
if (num > 100 || num < 0) {
throw new InvalidScroreException("请输入0-100");
} if (num < 60) {
System.out.println("您没有通过考试!");
}
if (num >= 60) {
System.out.println(" 恭喜您通过了考试!");
}
} catch (InvalidScroreException e) {
e.printStackTrace();
InvalidScroreException e1=new InvalidScroreException("您输入的数字无效");
e1.printStackTrace(); }
}
}

发现:无论是自己new出来的异常,还是系统抛出来的异常,打印时都附带了异常对象出现的代码行数。


catch语句修改:

} catch (InvalidScroreException e) {
throw e; }



发现:已经生成的异常,即使被抛出,但是打印出的异常信息中,出现异常的代码并非手动再次抛出的代码行数,而是异常第一次出现的代码行数

有一个需求:

当输入不是数字时,会生成一个异常,但是我想返回一个带有“您输入的不是一个有效的整数!”异常信息的异常,那么该怎么修改呢?源代码中,当输入非数字时,会抛出一个无异常信息的异常被catch捕捉,这显然不是我想要的。那如果在catch语句块中重新throw一个带有“您输入的不是一个有效的整数!”的异常,这样打印异常信息时出现异常的代码行数就不是真正异常(即passInt()代码行数)出现的地方,而是在chtch语句块,所以这个方法不行。

那岂不是在出现异常的地方抛出不就行了?尝试一下,可以。

public static void main(String[] args) throws InvalidScroreException {

        Scanner sc = new Scanner(System.in);
String line = sc.nextLine();
int num = 0;
try {
try {
num = Integer.parseInt(line);
} catch (Exception e) {
throw new InvalidScroreException("您输入的不是一个有效的整数!");
} if (num > 100 || num < 0) {
throw new InvalidScroreException("请输入0-100");
}
} catch (InvalidScroreException e) {
e.printStackTrace();
}
}

这样打印信息就可以完全正确了。

注意:这里有个小问题,嵌入try的try-catch语句中,catch语句中写(InvalidScroreException e)会显示无法到达,



改成Exception就行了。


虽然上一种方式可以实现需求,但是将可能出现异常的代码封装在一个函数里,用来调用,会显得更好一点,

    public static int getScore() throws InvalidScroreException {
Scanner sc = new Scanner(System.in);
String line = sc.nextLine();
int num = 0;
try {
num = Integer.parseInt(line);
} catch (Exception e) {
throw new InvalidScroreException("您输入的不是一个有效的整数!");
} if (num > 100 || num < 0) {
throw new InvalidScroreException("请输入0-100");
}
return num; } public static void main(String[] args) throws InvalidScroreException { System.out.println("请输入成绩:");
try {
System.out.println(Demo.getScore());
}catch(InvalidScroreException e){
e.printStackTrace();
}
}

这样层次就更加分明了。这里也有和上一种方式一样的问题,catch()语句块中写InvalidScroreException e 会显示无法到达,改成Exception就好了


总结:如果想抛出带有异常信息的异常,就必须自己手动抛出,其实自己抛出的带有异常信息的异常再被捕获时,会被重新赋值给用以捕获的异常,所以打印出来的异常是带有异常信息的。而jvm自己是不会抛出带有异常信息的异常的!

java基础学习日志--异常案例的更多相关文章

  1. Java基础学习补充 -- 异常处理和log4j日志

    Java中的异常处理 异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的. Java中所有异常的基类Throwable:Throwable又分为Error类和Excepti ...

  2. java基础学习日志--String、StringBuffer方法案例

    package StringDemo; import java.util.Arrays; /* * 常用String.StringBufer类的方法 */ public class Demo1 { p ...

  3. java基础学习日志--Stirng内存案例

    案例一: public class test1 { public static void mb_swap(String Str1,String Str2) { String temp=Str1; St ...

  4. java基础学习日志---File方法分析

    package FunDemo; import java.io.File; import java.io.IOException; import java.util.Arrays; public cl ...

  5. 尚学堂JAVA基础学习笔记

    目录 尚学堂JAVA基础学习笔记 写在前面 第1章 JAVA入门 第2章 数据类型和运算符 第3章 控制语句 第4章 Java面向对象基础 1. 面向对象基础 2. 面向对象的内存分析 3. 构造方法 ...

  6. Java基础学习(3)

    Java基础学习(三) Java异常 Throwable类:所有异常的祖先类 Error:虚拟机异常.内存错误.没法处理 Exception:编码.环境.用户操作输入出现问题 非检查异常(自动捕获): ...

  7. 070 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 02 综合案例-数组移位-从键盘接收数据

    070 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 02 综合案例-数组移位-从键盘接收数据 本文知识点:综合案例-数组移位-从键盘接收数据 说明:因为时间紧张 ...

  8. Java基础学习-- 继承 的简单总结

    代码参考:Java基础学习小记--多态 为什么要引入继承? 还是做一个媒体库,里面可以放CD,可以放DVD.如果把CD和DVD做成两个没有联系的类的话,那么在管理这个媒体库的时候,要单独做一个添加CD ...

  9. Java基础学习中一些词语和语句的使用

    在Java基础学习中,我们刚接触Java会遇到一些词和语句的使用不清的情况,不能很清楚的理解它的运行效果会是怎么样的,如:break,continue在程序中运行效果及跳转位置, 1.先来看看brea ...

随机推荐

  1. centos ifconfig 无法使用问题

    centos ifconfig 无法使用问题 # ifconfig bash: ifconfig: command not found # yum search ifconfig Loaded plu ...

  2. MyBatis高级查询 存储过程

    1.第一个存储过程  根据用户id查询用户其他信息 #第一个存储过程 #根据用户id查询用户其他信息 DROP PROCEDURE IF EXISTS `select_user_by_id`; DEL ...

  3. 清北考前刷题day2下午好

    #include<iostream> #include<cstdio> #include<cstring> #include<stack> #defin ...

  4. [App Store Connect帮助]六、测试 Beta 版本(4.2) 管理 Beta 版构建版本:查看构建版本状态和指标

    必要职能:“帐户持有人”职能.“管理”职能.“App 管理”职能.“开发者”职能或“营销”职能.请参见职能权限. 在首页上,点按“我的 App”,选择您的 App,然后在工具栏中点按“TestFlig ...

  5. [Swift通天遁地]一、超级工具-(8)地图视图MKMapView的常用代理方法

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  6. [Qt及Qt Quick开发实战精解] 第1章 多文档编辑器

      这一章的例子是对<Qt Creator快速人门>基础应用篇各章节知识的综合应用, 也是一个规范的实例程序.之所以说其规范,是因为在这个程序中,我们对菜单什么时候可用/什么时候不可用.关 ...

  7. C++ 类中的3种权限作用范围

    三种访问权限 public:可以被任意实体访问 protected:只允许子类及本类的成员函数访问 private:只允许本类的成员函数访问 #include <iostream> #in ...

  8. Poj 3177 Redundant Paths (双连通分支+节点统计)

    题目描述: 给出一个无向的连通图,问最少加入几条边,才能使所给的图变为无桥的双连通图? 解题思路: 可以求出原图中所有的不包含桥的所有最大连通子图,然后对连通子图进行标记缩点,统计度为1的叶子节点le ...

  9. 题解报告:poj 1426 Find The Multiple(bfs、dfs)

    Description Given a positive integer n, write a program to find out a nonzero multiple m of n whose ...

  10. .net中RSA加密解密

    1.产生密钥: private static void CreateKey() { using (RSACryptoServiceProvider rsa = new RSACryptoService ...