皇冠体育app:Java异常

admin 2个月前 (10-01) 科技 61 1

一、异常?

java系统中将java.lang.Throwable类作为异常的最根类

[java.lang.Throwable是所有异常或错误的顶级类,可以处置任何异常]

* java.lang.Throwable
 * 		|-----java.lang.Error:一样平常不编写针对性的代码举行处置。
 * 		|-----java.lang.Exception:可以举行异常的处置
 * 			|------编译时异常(checked)
 * 					|-----IOException
 * 						|-----FileNotFoundException
 * 					|-----ClassNotFoundException
 * 			|------运行时异常(unchecked,RuntimeException)
 * 					|-----NullPointerException
 * 					|-----ArrayIndexOutOfBoundsException
 * 					|-----ClassCastException
 * 					|-----NumberFormatException
 * 					|-----InputMismatchException
 * 					|-----ArithmeticException

二、异常分类

Throwable是所有异常或错误的顶级类,可以处置任何异常.

由于处置局限过大,操作不方便,Java提供两个子类:Exception和Error

异常分为: Exception(可以治疗) 和 Error(不治之症)

1. Error:

通常指 java系统泛起的错误,与java程序无关. 无法使用代码举行维护或修改错误.

2. Exception:

通常指 java程序泛起的错误,可以使用代码举行修改或维护.[通常值学习/研究 Exception.]

Exception的分类: [凭据 编译时 是否检查 含有XX异常分类]

须查异常[非运行时异常]: 指 java文件编译为class文件时, 需要检查的异常.

不须查异常[运行时异常]: 指 java文件编译为class文件时, 不需要检查的异常.

3. 哪些异常属于须查异常,哪些异常属于不须查异常?

Exception及其子类[不含RuntimeException]都属于须查异常[非运行时异常]

RuntimeException及子类属于不须查异常也就是运行时异常

4. 常见的须查异常(编译时异常):

语法错误 路径错误 等等

5. 常见的不须查异常(运行时异常):

数组下标越界:java.lang.ArrayIndexOutOfBoundsException,Java程序试图接见不存在的索引对应的元素.

被除数为0: java.lang.ArithmeticException: / by zero,在计算机中,被除数不能为0.

空指针:java.lang.NullPointerException,Java程序试图去接见不存在的工具的属性或方式,因此报错.

三、异常处置

使用try-catch-finally处置编译时异常,使得程序在编译时就不报错,然则运行是仍然可能报错

开发中由于运行时异常常见,通常不针对运行时异常try-catch-finally处置,而针对编译时异常,一定要思量异常的处置

throws的方式知识将异常抛给了方式的挪用者,并没有真正的将异常处置

1. 第一种: [努力处置]

try{

存放可能发生异常的代码,try代码块将自动捕捉异常

}catch(异常类型  参数){

与发生的异常举行匹配,匹配上后将执行此处代码

}catch(异常类型  参数){

与发生的异常举行匹配,匹配上后将执行此处代码

}finally{

作为程序最后执行的代码,一定会执行,纵然try和catch内里有return或异常

}

说明:

  • try,catch,finally代码块不能单独使用,必须夹杂. 常见组合方式:try,catch,finally 或 try catch 或 try finally
  • try代码块必须含有,catch代码可以含有N个.finally代码块可以含有0或1个,且必须放在try和catch的后面.

原理:

  • java程序执行try代码块中的代码,若是发生异常,将被try代码块捕捉,
  • try代码块捕捉异常后, 将于之后的catch代码块举行异常类型匹配,若是匹配上异常类型,将执行执行此处的catch代码块,不再向下继续匹配.
  • try代码块捕捉异常后,与所有的catch代码块的异常类型都不匹配,该异常将交给java系统处置[直接竣事程序的执行]无论程序是否发生异常,异常是否处置乐成,都将执行finally代码块[通常用于执行关键性的代码: 关闭资源等等,降低程序的损失

注重: 当有多个catch代码块时,将处置局限大的异常放在后面.

try中的异常工具匹配到某一个catch时,就会进入到catch中举行异常的处置,一旦处置完成,就退出当前的try-catch结构(在没有写finally的时刻),继续执行厥后的代码

常用的处置方式:

都是打印错误信息,方式差别

public void test1() {
		String str = "abc";
		try {
			int num = Integer.parseInt(str);
		}catch(Exception e) {
			// 1. System.out.println(e.getMessage());
            
			// 2. e.printStackTrace();
		}
	}

快捷操作

2. 第二种: [消极处置]

花样: 

权限.... 方式名(参数类型 参数名,参数类型 参数名,...) throws 异常类型,...{

方式体

}

原理:

  • 当前方式体中将异常抛出到方式挪用处,在方式挪用的地方必须处置当前异常.
  • 方式挪用处可以处置该异常,也可以继续向方式外抛出异常.[若是main函数中也没有处置该异常,该异常将抛给Java系统,Java系统将以"粗暴的方式"处置,直接竣事程序的执行]
  • 异常后面的代码就不会再执行了

方式重写的规则之一:

类重写的方式抛出的异常类型不大于父类被重写的方式抛出的异常类型

import java.io.FileNotFoundException;
import java.io.IOException;

public class OverrideTest {
	
	public static void main(String[] args) {
		OverrideTest test = new OverrideTest();
		test.display(new SubClass());
	}

	
	public void display(SuperClass s){
		try {
			s.method();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

class SuperClass{
	
	public void method() throws IOException{
		
	}	
}

class SubClass extends SuperClass{
	public void method()throws FileNotFoundException{
		
	}
}

3. 开发中若何选择使用try-catch-finally 照样使用throws?

  • 若是父类中被重写的方式没有throws方式处置异常,则子类重写的方式也不能使用throws,意味着若是子类重写的方式中有异常,必须使用try-catch-finally方式处置。

  • 执行的方式a中,先后又挪用了另外的几个方式,这几个方式是递进关系执行的。我们建议这几个方式使用throws的方式举行处置。而执行的方式a可以思量使用try-catch-finally方式举行处置。

四、手动抛出异常

throw

public class StudentTest {
	
	public static void main(String[] args) {
		try {
			Student s = new Student();
			s.regist(-1001);
			System.out.println(s);
		} catch (Exception e) {
//			e.printStackTrace();
			System.out.println(e.getMessage());
		}
	}
	
}


class Student{
	
	private int id;
	
	public void regist(int id) throws Exception {
		if(id > 0){
			this.id = id;
		}else{
//			System.out.println("您输入的数据非法!");
			//手动抛出异常工具,运行时异常,可以不用try-catch
//			throw new RuntimeException("您输入的数据非法!");
            
            // 必须举行try-catch
			throw new Exception("您输入的数据非法!");
            
			//错误的
//			throw new String("不能输入负数");
		}
		
	}

	@Override
	public String toString() {
		return "Student [id=" + id + "]";
	}
	
	
}

五、 自界说异常

若何自界说异常类?

  • 继续于现有的异常结构:RuntimeException 、Exception
  • 提供全局常量:serialVersionUID
  • 提供重载的组织器
public class MyException extends Exception{
	
	static final long serialVersionUID = -7034897193246939L;
	
	public MyException(){
		
	}
	
	public MyException(String msg){
		super(msg);
	}
}

此时使用自己界说的异常类

package com.atguigu.java2;

public class StudentTest {
	
	public static void main(String[] args) {
		try {
			Student s = new Student();
			s.regist(-1001);
			System.out.println(s);
		} catch (Exception e) {
//			e.printStackTrace();
			System.out.println(e.getMessage());
		}
	}
	
}


class Student{
	
	private int id;
	
	public void regist(int id) throws Exception {
		if(id > 0){
			this.id = id;
		}else{
			throw new MyException("不能输入负数");
		}
	}

	@Override
	public String toString() {
		return "Student [id=" + id + "]";
	}
	
	
}

六、问题

进入A----用A方式----制造异常----进入方式B-----挪用B

1. 请注释Error和Exception的区别?

  • Error:指的是JVM错误,这个时刻的程序并没有执行,无法处置;
  • Exception:指的是程序之中泛起的错误信息,可以举行异常处置,主要体贴Exception。

2. 请注释java之中的异常处置流程

  • 若是程序之中发生了异常,那么会自动的由JVM凭据异常的类型,实例化一个指定异常类的工具;
  • 若是这个时刻程序之中没有任何的异常处置操作,则这个异常类的实例化工具将交给JVM举行处置,而JVM的默认处置方式就是举行异常信息的输出,尔后中止程序执行
  • 若是程序之中存在了异常处置,则会由try语句捕捉发生的异常类工具
  • 与try之后的每一个catch举行匹配,若是匹配乐成,则使用指定的catch举行处置,若是没有匹配乐成,则向后面的catch继续匹配,若是没有任何的catch匹配乐成,则这个时刻将交给JVM执行默认处置
  • 不管是否有异常都市执行finally程序,若是此时没有异常,执行完finally,则会继续执行程序之中的其他代码,若是此时有异常没有能够处置(没有一个catch可以知足),那么也会执行finally,然则执行完finally之后,将默认交给JVM举行异常的信息输出,而且程序中止

3. 请注释一下RuntimeException和Exception的区别?请列举出几个常见的RuntimeException

七、总结

throw 和 throws区别:
throw 示意抛出一个异常类的工具,天生异常工具的历程。声明在方式体内。
throws 属于异常处置的一种方式,声明在方式的声明处。

,

apple developer enterprise account for rent

providing apple enterprise developer accounts for rent, rent your own enterprise account for app signing. with high quality, stable performance and affordable price.

皇冠APP声明:该文看法仅代表作者自己,与本平台无关。转载请注明:皇冠体育app:Java异常

网友评论

  • (*)

最新评论

  • 皇冠体育APP 2020-10-01 00:05:12 回复

    Us apple developer accounts for saleAppledeveloper.io is a reputed website selling apple developer account, providing us, China and worldwide developer individual accounts for sale. It's at low price and good quality. Always provides satisfying services!我感觉我升华了,哈哈

    1

文章归档

站点信息

  • 文章总数:631
  • 页面总数:0
  • 分类总数:8
  • 标签总数:1165
  • 评论总数:240
  • 浏览总数:4482