java 异常 包

异常:编译时没有错误,运行时出现各种错误。

Error和Exception的区别:

Error:指的是JVM错误,这个时候程序并没有执行,无法处理。

Exception:指的是程序中出现的错误信息,可以进行异常处理。

 

异常处理流程:

(1)     如果程序中产生了异常,那么会自动地由JVM根据异常的类型实例化一个指定异常类的对象

(2)     如果程序中没有任何异常处理操作,则这个异常的实例化对象将交给JVM进行处理,而JVM的默认处理方式就是进行异常信息的输出,而后中断程序的执行。

(3)     如果程序中存在异常处理,会由try语句捕获产生的异常类对象

(4)     与try之后的每一个catch进行匹配,如果匹配成功,则使用指定的catch进行处理,如果没有匹配成功,则向后面的catch继续匹配,如果没有任何catch匹配成功,将交给JVM执行默认处理

(5)      不管是否有异常都会执行finally程序,如果此时没有异常,执行完finally会继续执行程序中的其他代码,如果此时有异常但没有一个catch匹配成功,那么也会执行finally,但是执行完finally后,将默认交给JVM进行异常信息输出,并且程序中断

 

所有异常都是Exception的子类,那么所有异常都可以用Exception来接收

例:

public class test {
	public static void main(String args[]){
		System.out.println("1、除法计算开始");
		try{
			int x=Integer.parseInt(args[0]);
			int y=Integer.parseInt(args[1]);
			int result=x/y;
			System.out.println("2、除法计算结果:"+ result);
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			System.out.println("不管是否出现异常都执行");
		}
		System.out.println("3.除法计算结束");
	}

}

throws关键字与throw关键字

throws是用来声明一个方法可能抛出的所有异常信息

throw则是指抛出的一个具体的异常类型。

通常在一个方法(类)的声明处通过throws声明方法(类)可能抛出的异常信息,而在方法(类)内部通过throw声明一个具体的异常信息。

throws通常不用显示的捕获异常,可由系统自动将所有捕获的异常信息抛给上级方法;

throw则需要用户自己捕获相关的异常,而后在对其进行相关包装,最后在将包装后的异常信息抛出。

 

 

异常处理的标准格式

try…catch、finally、throws、throw

例:

class MyMath{
	public int div(int x,int y)throws Exception{  //出现异常要交给被调用处处理
		System.out.println("===计算开始===");
		int result=0;
		try{
			result=x/y;     //除法计算
			return result;
		}catch(Exception e){
			throw e;        //向上抛
		}finally{
			System.out.println("===计算结束===");
		}
		//return result;
	}
}
public class test {
	public static void main(String args[]){
		try{
			System.out.println(new MyMath().div(10,0));   //被调用处处理异常
		}catch(Exception e){
			e.printStackTrace();
		}
	}
}

问题:try语句中有一个return语句,那么紧跟在try后面的finally语句会不会被执行??什么时候执行,在return前还是后?

finally语句一定会执行,且在return前执行

 

异常最大的父类是Throwable,它分为两个子类:Exception和Error。Exception表示程序处理的异常,而Error表示JVM错误,一般不由程序开发人员处理。

 

 

使用package关键字来定义包,如:package cn.mldn.demo;

一旦包定义完成后,类名称就是:包.类

 

包的导入

不同包之间一定会存在包的导入问题,导入包在程序中用import完成。

Ø  一个包中的类若想要被其他包中的类使用,那这个类一定要定义为publicclass

Ø  class声明的类只能在同一个包中使用

Ø  在一个*.java文件中,只能存在一个public class定义,且文件名和类名称保持一致

Ø  在一个*.java文件中,可以有多个class定义,文件名称可以和类名称不一致

 

 

[1]     Import 包.类;

[2]     Import 包.*;

在java中使用“*”导入类或者是单独导入,从实际的操作性能上来讲是没有任何区别的,因为即使是使用了“*”也表示只导入所需要的类,不需要的不导入。

在导入包时会导入不同包的同名类,所以在实例化对象时一定要使用完整的类名称(包.类)

 

例:

package cn.mldn.util;
public class Message {
	public String getInfo(){
		return "hello world!";
	}

}

package cn.mldn.test;
import cn.mldn.util.*;
public class Test {
	public static void main(String args[]){
			Message msg=new Message();
			System.out.println(msg.getInfo());
	}

}

Java的常用包

Applet和Applacation的区别:

Applet是不需要主方法运行的

Applacation是需要通过主方法执行的

现在所写的代码都应该是Application程序

 

 

四种访问权限

²  Private只能在同一包的同一类中访问

²  Default只能在同一个包中访问

²  Protected在不同的子类中可以访问(extends)

²  Public所以都可以



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值