java基础学习日志--异常案例
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基础学习日志--异常案例的更多相关文章
- Java基础学习补充 -- 异常处理和log4j日志
Java中的异常处理 异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的. Java中所有异常的基类Throwable:Throwable又分为Error类和Excepti ...
- java基础学习日志--String、StringBuffer方法案例
package StringDemo; import java.util.Arrays; /* * 常用String.StringBufer类的方法 */ public class Demo1 { p ...
- java基础学习日志--Stirng内存案例
案例一: public class test1 { public static void mb_swap(String Str1,String Str2) { String temp=Str1; St ...
- java基础学习日志---File方法分析
package FunDemo; import java.io.File; import java.io.IOException; import java.util.Arrays; public cl ...
- 尚学堂JAVA基础学习笔记
目录 尚学堂JAVA基础学习笔记 写在前面 第1章 JAVA入门 第2章 数据类型和运算符 第3章 控制语句 第4章 Java面向对象基础 1. 面向对象基础 2. 面向对象的内存分析 3. 构造方法 ...
- Java基础学习(3)
Java基础学习(三) Java异常 Throwable类:所有异常的祖先类 Error:虚拟机异常.内存错误.没法处理 Exception:编码.环境.用户操作输入出现问题 非检查异常(自动捕获): ...
- 070 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 02 综合案例-数组移位-从键盘接收数据
070 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 02 综合案例-数组移位-从键盘接收数据 本文知识点:综合案例-数组移位-从键盘接收数据 说明:因为时间紧张 ...
- Java基础学习-- 继承 的简单总结
代码参考:Java基础学习小记--多态 为什么要引入继承? 还是做一个媒体库,里面可以放CD,可以放DVD.如果把CD和DVD做成两个没有联系的类的话,那么在管理这个媒体库的时候,要单独做一个添加CD ...
- Java基础学习中一些词语和语句的使用
在Java基础学习中,我们刚接触Java会遇到一些词和语句的使用不清的情况,不能很清楚的理解它的运行效果会是怎么样的,如:break,continue在程序中运行效果及跳转位置, 1.先来看看brea ...
随机推荐
- vijos - P1077克隆龙 (找规律 + 指数型母函数 + python)
P1077克隆龙 Accepted 标签:[显示标签] 描写叙述 如今龙的克隆已成为可能,龙基因由ACTG字母组成,而龙的基因有例如以下特点: 1.A在基因中的出现为偶数次(包含0): 2.C的情况也 ...
- yispider 开源小说採集器 (来源http://git.oschina.net/yispider/yispider 我的改动版由于他的我无法跑)
我的git地址 http://git.oschina.net/yangdc/yispider 小说採集器 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/ ...
- ios33--线程通信
// // ViewController.m // 06-掌握-线程间通信 // // atomic:为set方法加锁,线程安全,需要消耗资源. // nonatomic:不为set方法加锁,非线程安 ...
- H264--1--编码原理以及I帧B帧P帧[4]
---------------------- 前言 ----------------------- H264是新一代的编码标准,以高压缩高质量和支持多种网络的流媒体传输著称,在编码方面,我理解的他的理 ...
- YTU 2542: 弟弟的作业
2542: 弟弟的作业 时间限制: 1 Sec 内存限制: 128 MB 提交: 130 解决: 57 题目描述 你的弟弟刚做完了"100以内数的加减法"这部分的作业,请你帮他 ...
- Python: PS 滤镜--万花筒效果
本文用 Python 实现 PS 的一种滤镜效果,称为万花筒.也是对图像做各种扭曲变换,最后图像呈现的效果就像从万花筒中看到的一样: 图像的效果可以参考之前的博客: http://blog.csdn. ...
- bzoj4264
哈希 cf原题...没见过的话真想不出来 将邻接表排序哈希,判断是否相同,但是会漏掉两点相邻的情况,于是再把自己加入自己的邻接表,然后再哈希判断. #include<bits/stdc++.h& ...
- spring-boot-configuration-processor的作用
spring默认使用yml中的配置,但有时候要用传统的xml或properties配置,就需要使用spring-boot-configuration-processor了 先引入pom依赖 <d ...
- [Swift]通天遁地Swift
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- 牛客网-3 网易编程题(1拓扑&2二叉树的公共最近祖先&3快排找第K大数)
1. 小明陪小红去看钻石,他们从一堆钻石中随机抽取两颗并比较她们的重量.这些钻石的重量各不相同.在他们们比较了一段时间后,它们看中了两颗钻石g1和g2.现在请你根据之前比较的信息判断这两颗钻石的哪颗更 ...