day08(异常处理,创建异常,finally,throws和throw的区别)
异常处理,
异常的产生
运行时异常:程序运行中产生的异常;RuntimeException类。
编译时异常:程序在编译时产生的异常;除了RuntimeException类 其他都是编译时产生的异常。
处理异常两种方式
抛出异常:把异常抛给调用者区解决 throws 抛出异常
捕获异常:编程者自己处理try....catch...finally...
创建异常,
1.自己创建sun公司的异常类对象
public class ClassException {
public static void main(String[] args) {
try {//如果出现异常 用来捕获异常
checkScore(110);
} catch (Exception e) {
e.printStackTrace();//输出 异常类型,异常原因,异常位置。 内部具有多线程
}
}
private static void checkScore(int i) throws RuntimeException {
if (i<0||i>100) {
throw new RuntimeException("不符合要求");//创建运行时异常对象
}
System.out.println("符合要求");
}
}
输出结果 :
java.lang.RuntimeException: 不符合要求
at day08.ClassException.checkScore(ClassException.java:28)
at day08.ClassException.main(ClassException.java:21)
2.自定异常类继承sun公司的异常类(异常名字可以自定义)
定义一个自定义类 (MyException)
public class NotToPrintException extends Exception{//继承Exception类 调用父类构造输出异常信息
public NotToPrintException() {
super();
}
public NotToPrintException(String message) {
super(message);
}
}
public class ClassException {
public static void main(String[] args) {
try {
checkScore(110);
} catch (Exception e) {
e.printStackTrace();//输出异常类型,异常原因,异常位置 内部具有多线程
} }
//使用自定义异常类来抛出异常
private static void checkScore(int i) throws NotToPrintException {//使用自定义类捕获异常
if (i<0||i>100) {
throw new NotToPrintException("不符合要求");//抛出NotToPrintException对象
}
System.out.println("符合要求");
}
}
day08.NotToPrintException: 不符合要求
at day08.ClassException.checkScore(ClassException.java:29)
at day08.ClassException.main(ClassException.java:21)
finally,
作用: 做为程序的善后的工作
执行顺序:try和catch之后
public class FinallyTest {
public static void main(String[] args) {
FileWriter fw=null;
try {
fw=new FileWriter("a.txt");
fw.write("hello");
fw.write("world");
System.out.println(10/0);//报异常 但是fw还没有关闭 数据没有写进去
fw.write("java");
} catch (IOException e) {
e.printStackTrace();
} catch (ArithmeticException e) {
e.printStackTrace();
}finally{
try {
if (fw!=null) {
fw.close();//如果中途出现错误 但为了让数据已经写的数据存在文本中 则在finally中进行关闭流操作。
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
a.txt文件中内容 helloworld
特殊案例:catch中存在return 和System.exit(0);
public class FinallyTest {
public static void main(String[] args) {
System.out.println(method1());
}
private static int method1(){
int a=10;
try{
System.out.println(10/0);
a=20;
}catch(Exception e){
a=30;
return a;//在执行finally之前会 return a时 这时a已经被赋值为30 再执行finally中a=40不会影响return a中的a值
}finally{
a=40;
}
return a;
}
}
输出结果:
30
/*
* return a在程序执行到这一步的时候,这里不是return a而是return 30;这个返回路径就形成了。
* 但是呢,它发现后面还有finally,所以继续执行finally的内容,a=40
* 再次回到以前的返回路径,继续走return 30;
*/
public class FinallyTest {
public static void main(String[] args) {
System.out.println(method1());
}
private static int method1(){
int a=10;
try{
System.out.println(10/0);
a=20;
}catch(Exception e){
a=30;
System.out.println(a);
System.exit(0);//程序退出 不会执行finally
}finally{
System.out.println(1);
a=40;
}
return a;
}
throws和throw的区别
throws:
位置:方法声明上
作用:抛出异常 (处理异常的一种方式)
throw:
位置:方法中
作用:创建一个异常对象 (制造异常)
public class ClassException {
public static void main(String[] args) {
try {
checkScore(110);
} catch (Exception e) {
e.printStackTrace();
}
checkScore(10);
}
private static void checkScore(int i) throws RuntimeException {//抛出异常 抛给调用者进行处理
if (i<0||i>100) {
throw new RuntimeException("不符合要求");//制造异常
}
System.out.println("符合要求");
}
}
day08(异常处理,创建异常,finally,throws和throw的区别)的更多相关文章
- JAVA基础学习之throws和throw的区别、Java中的四种权限、多线程的使用等(2)
1.throws和throw的区别 throws使用在函数外,是编译时的异常,throw使用在函数内,是运行时的异常 使用方法 public int method(int[] arr) throws ...
- Java语言如何进行异常处理,关键字:throws、throw、try、catch、finally分别如何使用?
先上代码再进行分析 public class Test { public static void main(String[] args) { try{ int i = 100 / 0; System. ...
- Java 语言如何进行异常处理,关键字:throws、throw、 try、catch、finally 分别如何使用?
Java 通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的接口.在 Java 中,每个异常都是一个对象,它是 Throwable 类或其子类的实例.当一个方法出现异常后便抛出一 ...
- JAVA中的throws和throw的区别
Java 一直对java中的throws和throw不太理解.最近一直在查这两个方面的资料,算是能明白一点吧.如果我下面的观点哪有不对,希望指出来,我加以改进. throw:( ...
- Java中throws和throw的区别讲解
当然,你需要明白异常在Java中式以一个对象来看待.并且所有系统定义的编译和运行异常都可以由系统自动抛出,称为标准异常,但是一般情况下Java 强烈地要求应用程序进行完整的异常处理,给用户友好的提示, ...
- Java异常throws与throw的区别
throws关键字通常被应用在声明方法时,用来指定可能抛出的异常.多个异常可以使用逗号隔开.当在主函数中调用该方法时,如果发生异常,就会将异常抛给指定异常对象.谁调用谁处理: 抛出异常throws: ...
- Java异常机制关键字总结,及throws 和 throw 的区别
在Java的异常机制中,时常出现五个关键字:try , catch , throw , throws , finally. 下面将总结各个关键字的用法,以及throw和throws的区别: (1) t ...
- throws和throw的区别
throws是声明在方法上,告诉调用者这个方法可能会出现的问题.格式 : 方法() throws 自定义异常类(异常类) 就是在这个方法里面会出问题时,new throw时, ...
- java中的抛出异常throws与throw
throws与throw throws是方法可能抛出异常的声明.(用在声明方法时,表示该方法可能要抛出异常)语法:[(修饰符)](返回值类型)(方法名)([参数列表])[throws(异常类)]{.. ...
随机推荐
- sql一个题的解法分析讲解
本篇讲述的是对一个sql面试题的细致语法讲解.关于执行流程(on where),内连接,外连接(左右)上实用.关于这些基本的语法知识请参考我前面的sql基本语法. S(SNO,SNAME)学生学号,姓 ...
- 面向对象三大特性一一多态(polymorphism)
package com.bjsxt.oop.polymorphism; public class Animal { public void voice(){ System.out.println(&q ...
- git hg提交拉取
工作总结web_acl 535 git clone “ssh://git@outergit.yonyou.com:49622/esn_web/web_acl.git" 600 git bra ...
- 兼容当前五大浏览器的渐变颜色背景gradient的写法
<style type="text/css" media="screen"> #gradient { width: 200px; height: 2 ...
- Ubuntu下Eclipse热键Ctrl+Alt+Up无效的解决
原文链接 :http://rox.iteye.com/blog/875078 现在好多链接都打不开了, Ubuntu下一直用NetBeans开发,改了热键为Eclipse的,复制行不管用,一直认为是N ...
- 两个onCreate方法?你真的了解onCreate()么?
Activity的onCreate方法一直是我们编写一个activity最先重载的方法.细心的小伙伴在编写代码的时候回看到这样一幕: 咦,这里怎么会有两个onCreate提供给我们重载?选择困难症患者 ...
- np.random.seed()
124.np.random.seed()的作用 陈容喜 关注 2018.01.11 21:36 字数 3 阅读 4460评论 0喜欢 6 今天看到一段代码时遇到了np.random.seed(),搞不 ...
- 132. Palindrome Partitioning II (String; DP)
Given a string s, partition s such that every substring of the partition is a palindrome. Return the ...
- 【C基础】之联合体
1.联合体 联合体(union)与结构体(struct)有一些相似之处.但两者有本质上的不同.在结构体中,各成员有各自的内存空间, 一个结构变量的总长度是各成员长度之和.而在联合体中,各成员共享一段内 ...
- 简述Markdown的使用方法
MarkdownPad Document Markdown的使用技巧 一.标题 一个”#“表示H1.“##”表示H2... 二.列表 第一点 第二点 注意1.2. -与文本之间要有一个空格 这一点 三 ...