java程序设计13-内部类与异常类

本文详细介绍了Java中的内部类和异常处理机制。对于内部类,讲解了其概念;而对于异常,阐述了异常的定义、分类以及异常处理的关键字如try、catch、finally和throws、throw的使用。同时提到了自定义异常的实现。
摘要由CSDN通过智能技术生成

枚举enum
java中的枚举类型定义包括枚举声明和枚举体

package course9;

public class MyEnum {
	enum Season{
		spring,summer,autumn,winter
	}
	
	public static void main(String[] args){
	//定义一个枚举变量
	Season x;
	x = Season.spring;
	
	//创建一个枚举Season数组,
	Season a[] = Season.values();
	
	//遍历a[]中所有的元素
	for(Season s:Season.values()){
		System.out.println(s);
	}
	}

}

输出结果:

spring
summer
autumn
winter

内部类

package course9;

//红牛农场类,把RedCow类叫做内部类,也可以叫做RedCowForm的内部类,
//RedcowForm类叫做RedCow的外嵌类
public class RedCowForm {
	private String formName;
	
	RedCow cow;
	
	RedCowForm(){
	}
	
	RedCowForm(String s){
		formName = s;
		cow = new RedCow(150,112,5000);
	}
	
	//定义一个红牛内部类,仅供RedCowForm使用
	class RedCow{
		String cowName = "红牛";
		int height, weight, price;
		RedCow(int h,int w,int p){
			height = h;
			weight = w;
			price = p;
		}
		void speak(){
			System.out.println("我的名字是:" + cowName);
			System.out.println("身高:" + height);
			System.out.println("体重:" + weight);
			//内部类可以方便的使用它的外嵌类的属性和方法
			System.out.println("我生活在:" + formName);
			
		}
		
	}

}

异常

指程序在运行时,由于程序使用者没有按照程序的设计规格进行操作或输入所带来的运行问题。

package course9;

public class Test1 {
	//异常:程序在运行时,由于程序使用者(用户)没有按照程序设计规格进行操作或输入所带来的程序的问题。
	public static void main(String[] args){
		
		int r = devide(3,0);
		
	}
	
	//除法操作
	public static int devide(int x,int y){
		int result = x/y;
		return result;
	}
}

Exception in thread "main" java.lang.ArithmeticException: / by zero
	at course9.Test1.devide(Test1.java:15)
	at course9.Test1.main(Test1.java:7)

说明此程序是不健壮的

异常处理机制

异常抛出------>异常捕获------>异常处理

异常处理机制中的模块
1.try模块:捕获异常
2.catch模块:异常处理
3.finally模块

异常出现时,Java运行环境会生成一个该种异常的一个对象(该对象含有异常信息),这个过程称为异常的抛出(throw)。

Java虚拟机接收到异常对象时,会寻找能处理这种异常的代码:
若有,则将上述异常对象交给该代码处理;
若无,则由Java虚拟机做默认处理。
这一过程称为异常的捕获(catch)。

catch和try模块必须成对出现。
try模块
在异常处理中,当主函数需要调用一个可能导致异常的方法或者语句时,可以将其放入try模块中。
若异常发生,整个try模块停止运行,并抛出异常。

catch模块
catch模块与try模块成对出现,发生异常后,try模块停止运行,一场对象交给catch模块进行处理,这个过程也叫做捕获。catch可以有多个。

package course9;

public class Test1 {
	//异常:程序在运行时,由于程序使用者(用户)没有按照程序设计规格进行操作或输入所带来的程序的问题。
	public static void main(String[] args){
		
		int r = devide(3,0);
		
		System.out.println("程序继续运行");
	}
	//除法操作
	public static int devide(int x,int y){
		int result = 0;
		
		try{
			result = x/y;
		}catch(Exception e){//e为异常对象
			System.out.println(e);
		}
		return result;
}
}

输出结果:

java.lang.ArithmeticException: / by zero
程序继续运行

在这里插入图片描述
运行时异常:编译可以通过,可以处理也可以不处理
非运行时异常:编译通不过,必须使用trycatch处理

finally语句为异常提供一个统一的出口,无论是否发生异常,finally模块中的语句都会被执行。

package course9;

public class Test1 {
	//异常:程序在运行时,由于程序使用者(用户)没有按照程序设计规格进行操作或输入所带来的程序的问题。
	public static void main(String[] args){
		
		try{
		int r = devide(3,1);
		}catch(Exception e){
			System.out.println(e);
		}
		System.out.println("程序继续运行");
	}
	//除法操作
	public static int devide(int x,int y){
		int result = 0;
		
		try{
			result = x/y;
		}catch(Exception e){//e为异常对象
			System.out.println(e);
		}finally{
			System.out.println("执行finally模块代码");
		}
		
		return result;
}
}

输出结果:

执行finally模块代码
程序继续运行

package course9;

public class Test1 {
	//异常:程序在运行时,由于程序使用者(用户)没有按照程序设计规格进行操作或输入所带来的程序的问题。
	public static void main(String[] args){
		
		try{
		int r = devide(3,1);
		}catch(Exception e){
			System.out.println(e);
		}
		System.out.println("程序继续运行");
	}
	//除法操作
	public static int devide(int x,int y){
		int result = 0;
		
		try{
			result = x/y;
		}catch(ArithmeticException e){//e为异常对象
			System.out.println(e);
		}catch(NullPointerException e){
		}finally{
			System.out.println("执行finally模块代码");
		}
		
		return result;
}
}
package course9;

public class Test1 {
	//异常:程序在运行时,由于程序使用者(用户)没有按照程序设计规格进行操作或输入所带来的程序的问题。
	public static void main(String[] args){
		//如果方法定义时定义了throws Exception,那么在使用时必须要进行异常处理
		try{
			int r = devide(3,1);
		}catch(Exception e){
			System.out.println(e);
		}
		
		System.out.println("程序继续运行");
	}
	//除法操作
	public static int devide(int x,int y)throws Exception{//抛出异常
		int result = 0;
		
		try{
			result = x/y;
		}catch(ArithmeticException e){//e为异常对象
			System.out.println(e);
		}catch(NullPointerException e){
		}finally{
			System.out.println("执行finally模块代码");
		}
		
		return result;
}
}

自定义异常

package course9;

public class Test1 {
	//异常:程序在运行时,由于程序使用者(用户)没有按照程序设计规格进行操作或输入所带来的程序的问题。
	public static void main(String[] args){
		//如果方法定义时定义了throws Exception,那么在使用时必须要进行异常处理
		try{
			int r = devide(3,0);
		}catch(Exception e){
			System.out.println(e);
		}
		
		System.out.println("程序继续运行");
	}
	//除法操作
	public static int devide(int x,int y)throws Exception{//抛出异常
		int result = 0;
		
		if(y == 0){
			MyException me = new MyException("自定义异常:除数为0");
			//throw关键字抛出异常
			throw me;
		}
		result = x/y;
		
		return result;
}
}
package course9;

public class MyException extends Exception{
	public MyException(String s){
		super(s);
		
	}

}

输出结果:

course9.MyException: 自定义异常:除数为0
程序继续运行

异常处理中的关键字

try:可能导致异常的语句放在try模块中,如果异常停止运行整个try模块中,进入catch模块,如果没有异常则正常执行try中语句。
catch:捕捉异常,接受一个异常种类对象作为参数。try模块中语句出现异常时,运行第一个与异常种类匹配的catch模块,若没有异常则不执行catch中语句。
finally:无论是否发生异常,都执行该模块中代码。
throws:若写于方法声明后,则使用该方法时必须进行异常处理。
throw:用于抛出异常,触发try模块进入工作状态。

package course9;

public class Circle {
	private double r;
	
	public void setRadius(double r) throws Exception{
		if(r>0)
		   this.r = r;
		else 
			throw new CircleException(r);
	}
	public void calculatrArea(){
		System.out.println("面积是:" +(3.14*r*r));
	}

	public static void main(String[] args){
		Circle c = new Circle();
		try{
			c.setRadius(-10);
		}catch(Exception e){
			System.out.println(e);
		}	
		c.calculatrArea();
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力申博的计算机研究生!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值