广义上的异常:程序中出现的任何不正常的
狭义上的异常:指的是程序在运行时出现的不正常的情况,可以使用异常处理机制来处理的
package exception;
//广义上的异常:程序中出现的任何不异常的 错误
//狭义上的异常:指的是程序中在运行时出现的不正常情况,可以使用异常处理机制来处理的
//一般的运行时异常,可以处理的,虚拟机默认处理方式是停止运行
public class Demo1 {
//错误 一旦程序运行时出现错误,程序是无法解决
/*public static void main(String[] args) {
Demo1 m=new Demo1();
m.sum(10);
}
public int sum(int num){
return sum(num-1);
}*/
public static void main(String[] args) {
//数组异常
/* int []a=new int[6];
a[6]=10;
*/
//算术异常
/* int a=10;
int b=0;
System.out.println(a/b);*/
//类型转换异常
Object obj="asd";
Integer m=(Integer)obj;
System.out.println(m);
//空指针异常 使用的对象值为null关键值
/* String s=null;
s.length();
System.out.println(s.length());*/
System.out.println(123);
}
}
异常处理
package exception;
//异常处理
public class Demo2 {
public static void main(String[] args) {
int a=10;
int b=0;
String s=null;
try {
//可能出现异常的代码
int c = a / b;
//捕获的异常类型
}catch (ArithmeticException e){
//异常处理
System.out.println("算术异常,除数不能为0");
}
try {
s.length();
}catch (NullPointerException e){
System.out.println("空指针异常");
}
System.out.println("asdfg");
}
}
package exception;
public class Demo3 {
public static void main(String[] args) {
int a=10;
int b=2;
int []arr=new int[4];
try {
int c=a/b;
arr[4]=8;
}catch (ArithmeticException e){
System.out.println("算数异常");
}catch (Exception e){//当有多个catch时,父类异常的类型需要放在下面
System.out.println("系统繁忙");
}
System.out.println(123);
}
}
package exception;
public class Demo4 {
public static void main(String[] args) {
System.out.println(Demo4.test());
/* try{
System.out.println(10/0);
}catch(ArithmeticException e){
System.out.println("算数异常");
}finally {
System.out.println("后面的代码");
}*/
//finally的第一种使用情况
/*try {
System.out.println(10/0);//发生异常,但是没有处理,程序不能继续向后执行,但是finally中的代码可以执行
}finally {
System.out.println("finally");
}
System.out.println("后面的代码");*/
}
//如有异常先catch再执行finally的,最后再执行return的
public static int test(){
try {
int a=10;
int b=0;
int c=a/b;
return c;
}catch (Exception e){
System.out.println("算数异常");
return -1;
}finally {//即使出现异常,finally总会执行
System.out.println("finally");
}
}
}
package exception;
import java.io.UnsupportedEncodingException;
public class Demo5 {
//在顶层不能再抛出,必须进行处理
public static void main(String[] args) {
try {
Demo5.test1();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
System.out.println("不支持");
}
}
//声明test1()可能抛出异常
public static void test1() throws UnsupportedEncodingException {
Demo5.test2();
}
//模拟是一个偏底层方法,这样的一般不try{} catch(){} 继续声明此方法可能会出现异常,作为方法的声明(定义)
//throws UnsupportedEncodingException(编译期异常)提示方法调用的地方在编译期间就要做出处理
//throws NullPointerException (运行期异常) 在编译期间不显示的提示处理
public static void test2() throws UnsupportedEncodingException,NullPointerException {
String s="asd";
s.getBytes("utf-88");
System.out.println("asd");
}
}
package exception;
import java.io.UnsupportedEncodingException;
public class Demo6 {
public static void main(String[] args) {
try {
Demo6.trans(101);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();//在控制台打印出异常的信息
System.out.println(e.getMessage());//获得下面异常的原因
}
}
public static String trans(int score) throws UnsupportedEncodingException {
if(score>100||score<0){
//throw在方法中显示的抛出个异常,类的对象表示此处实际发生的异常
//new+有参构造方法描述了异常的原因
throw new UnsupportedEncodingException("非法分数");
}
if(score>90){
return "A";
}else{
return "B";
}
}
}