Java学习笔记15(详细代码讲解异常)

news/2024/6/3 22:10:24 标签: java, exception, jdk, jvm, eclipse

文章目录

  • 异常
    • 异常概述
    • 异常处理机制
    • 使用 try…catch…finally 处理异常
    • 声明抛出异常
    • 人工抛出异常
    • 创建用户自定义异常类

异常

RuntimeException

错误的类型转换
数组下标越界
空指针访问

IOExeption

从一个不存在的文件中读取数据**FileNotFoundException**
越过文件结尾继续读取EOFException
连接一个不存在的URL

异常概述

例如除数为0,数组下标越界,要读写的文件不存在等等。
除数为0
Exception in thread “main” java.lang.ArithmeticException: / by zero
at day10.Test.main(Test.java:13)

java">public class Test {
	
	public static void main(String[] args) {
		
	int a = 0;
	int b = 4/a;
	System.out.println(b);
	}

}

数组下标越界
Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3
at day10.Test.main(Test.java:9)

java">public class Test {
	
	public static void main(String[] args) {
		String[] str1 = new String[] {"10","20","30"};
		for(int i =0 ; i < 4; i ++) {
			//,i <3,才正确,这种是数组越界异常
			System.out.println(str1[i]);
		}
	}
	

}

空指针异常:
Exception in thread “main” java.lang.NullPointerException
at day10.Test.main(Test.java:9)

java">public class Test {
	
	public static void main(String[] args) {
		
//		A a = new A();
		A a = null;
		System.out.println(a.i);
	}
	

}


class A{
	int i;
}

异常处理机制

try
捕获异常的第一步是用try{…}语句块选定捕获异常的范围,将可能出现异常的代码放在try语句块中。
如果明确知道产生的是何种异常,可以用该异常类作为catch的参数;也可以用其父类父类Exception类作为catch的参数。
可以用ArithmeticException类作为参数,也可以用RuntimeException类作为参数,或者用所有异常的父类Exception类作为参数**。但不能是与ArithmeticException类无关的异常,如NullPointerException,那么,catch中的语句将不会执行。**

使用 try…catch…finally 处理异常

异常处理是通过try-catch-finally语句实现的。

try
{
… //可能产生异常的代码
}
catch( ExceptionName1 e )
{
… //当产生ExceptionName1型异常时的处置措施
}
catch( ExceptionName2 e )
{
… //当产生ExceptionName2型异常时的处置措施
}
[ finally{
… //无条件执行的语句
} ]

不论在try、catch代码块中是否发生了异常事件,finally块中的语句都会被执行。

声明抛出异常

java">package day10;

public class Test1 {
	public static void main(String[] args) {
		B b  = new B();
		try{
			b.test();
		
		}catch(Exception e) {
			e.printStackTrace();
		}
		
	}

}

class B {
	int i;
	public void test() throws Exception{
		B b = null;
		System.out.println(b.i);
	}
}

java.lang.NullPointerException
at day10.B.test(Test1.java:21)
at day10.Test1.main(Test1.java:7)

告诉你是第七行,main方法里面有异常,test里面第21行有异常。

重写方法不能抛出比被重写方法范围更大的异常类型
子类不能抛出比父类更大的异常

人工抛出异常

java">package day10;

public class Test1 {
	public static void main(String[] args) {
		B b  = new B();
		try{b.test1(-100);
		
		}catch(Exception e) {
			e.printStackTrace();
		}

	}

}

class B {	
	int age;
	public void test1(int age) throws Exception{
		if(age > 0 && age< 150) {
			this.age = age;
			System.out.println("年龄是"+ this.age);
		}else {
			throw new Exception("年龄不在1·150");
		}
	}
		
}

java.lang.Exception: 年龄不在1·150
at day10.B.test1(Test1.java:29)
at day10.Test1.main(Test1.java:6)

创建用户自定义异常类

了解性内容,因为只有特殊情况才需要自己定义异常类!!!

java">package day10;

public class Test1 {
	public static void main(String[] args) {
		B b  = new B();
		//打印异常
		try{
//			b.test1(-100);
			b.test2(-10);
		}catch(Exception e) {
			e.printStackTrace();
		}

	}

}

class B {	
	int age;
	public void test1(int age) throws Exception{
		if(age > 0 && age< 150) {
			this.age = age;
			System.out.println("年龄是"+ this.age);
		}else {
			throw new Exception("年龄不在1·150");
		}
	}
	
	//自定义异常类MyException
	public void test2(int age) throws MyException{
		if(age > 0 && age< 150) {
			this.age = age;
			System.out.println("年龄是"+ this.age);
		}else {
			throw new MyException("年龄不在1·150");
		}
	}
		
}

//自定义异常类MyException
class MyException extends Exception{
	//构造方法
	public MyException(String msg) {
		//子类调用父类的构造方法
		super(msg);
	}
}

day10.MyException: 年龄不在1·150
at day10.B.test2(Test1.java:35)
at day10.Test1.main(Test1.java:9)


http://www.niftyadmin.cn/n/1707960.html

相关文章

undertow_进入Undertow Web服务器

undertow随着Java EE 7的到来以及处理诸如Web Sockets API和HTTP升级(例如EJB over HTTP)之类的高级功能的要求&#xff0c;WildFly开发团队已经做出了重要决定。 在长期致力于JBoss Web服务器(Apache Tomcat的一个分支)之后&#xff0c;新版本的应用程序服务器现在基于名为Und…

Python科学计算(Numpy基础练习题)

Numpy 练习题 1、arr11 5-np.arange(1,13).reshape(4,3), 计算所有元素及每一列的和&#xff1b;对每一 个元素、每一列求累积和&#xff1b;计算每一行的累计积&#xff1b;计算所有元素的最小值&#xff1b;计算 每一列的最大值&#xff1b;计算所有元素、每一行的均值&…

linux下pkg.tar,Linux packages 的本地打包

首先生成对应程序PKGBUILD脚本&#xff0c;并将需要的程序放到同级目录下。在PKGBUILD脚本所在目录执行makepkg&#xff0c;因为程序已经存在&#xff0c;所以直接就开始编译了。如果安装程序不存在的话&#xff0c;makepkg开始自动下载linux-fetion的源码&#xff0c;并开始编…

linux怎么管理iphone,有用iPhone的吗?Linux下怎么管理iPhone里的照片?

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼终于搞定iOS 7的连接要从git上拖源码来编译不过AUR上的libimobiledevice-git依赖libusbmuxd-git&#xff0c;但是……dantdant-pc ~ % pacman -Ql libusbmuxd-gitlibusbmuxd-git /usr/libusbmuxd-git /usr/bin/libusbmuxd-git /usr…

装饰图片_装饰图案

装饰图片装饰图案 我不经常使用的一种设计模式是Decorator 。 我不确定为什么这种模式不受欢迎&#xff0c;因为它很方便。 装饰器模式允许以受控方式向对象添加功能。 即使在使用静态类型的语言时&#xff0c;也可以在运行时运行&#xff01; 装饰器模式是子类的替代方法。 子…

jpa vue管理系统_使用Spring Data REST将Spring Data JPA存储库导出为REST服务

jpa vue管理系统Spring Data模块提供了各种模块&#xff0c;以统一的方式处理各种类型的数据源&#xff0c;例如RDBMS&#xff0c;NOSQL存储等。 在我以前的文章SpringMVC4 Spring Data JPA 使用JavaConfig的SpringSecurity配置中&#xff0c;我已经解释了如何使用JavaConfig配…

递归c语言三个数输出最小值,【C语言】使用递归的整数输出(高位到低位)/输出一个菱形(能够确定行数)...

//递归的整数输出#include void output(int x);int main(){int a;printf("请输出一个数");scanf("%d",&a);output(a);return 0;}void output(int x){if( x > 10){output(x / 10);}printf("%d ",x % 10);}//菱形的输出#include int main()…

spring_使用Spring跟踪异常–第2部分–委托模式

spring在上一个博客中&#xff0c;我开始谈论需要弄清楚您的应用程序在生产环境中是否行为异常。 我说过&#xff0c;监视应用程序的一种方法是检查其日志文件是否存在异常&#xff0c;如果发现异常&#xff0c;则采取适当的措施。 显然&#xff0c;日志文件会占用数百兆的磁盘…