【Java学习笔记】6:Java中的包(package)与Exception类异常处理

(package)是在使用多个类或接口时,为了避免名称重复而采用的一种措施。

package的声明如下:

package package的名称;

如果几个类分别属于不同的package,在某个类要访问到其他类的成员时(显然要访问的类需要是public的),在程序代码内必须明确地指明“被访问package的名称.类名称”。

package的导入如下:

import package 名称.类名称;

如果要导入包中的所有类:

import package 名称.*;

*加包示例(以下是同一工程的两个子包中的两个文件)

//包pc1中的Person.java文件
package pc1;
public class Person {
		public String talk()
		{
			return "Person->>talk()";
		}
}
//包pc2中的TestPackage.java文件
package pc2;
import pc1.*;
public class TestPackage {
	public static void main(String[] args) {
		System.out.println(new Person().talk());
	}
}

JAVA中成员变量和成员方法有4种访问控制权限:

①private:只能在本类中被使用

②default:还可以被同一包中的其它类访问

③protected:还可以被其它包中的子类访问

④public:还可以被其他包中的任何类访问

 

JAVA命名习惯:

①包名中的字母一律小写,如demo.java

②类名、接口名应当使用名词,每个单词的首字母大写,如TestPerson

③变量名(属性名)第一个单词小写,后面的每个单词首字母大写,如newSum

④方法名的第一个单词小写,后面每个单词的首字母大写,如talkPerson()

⑤常量名中的每个字母一律大写,如COUNTRY

jar文件和jar命令:

Jar文件(jar包)是java中的class文件打包而成的,相当于类库。如果开发者开发了许多类,但更需要把这些类提供给用户使用时,通常都会将这些类压缩到一个jar文件中,以jar包的方式提供给用户使用。只要别人的classpath环境变量的设置中包含这个jar文件,Java虚拟机就只能自动在内存中解压这个jar文件,把这个jar文件当做一个目录,在这个jar文件中去寻找需要的类名及包名所对应的目录结构。

 

 

异常可以分为两大类:java.lang.Exception类与java.lang.Error类,它们均继承自java.lang.Throwable类,本章笔记只讨论前者。

Java通过面向对象的方法来处理异常,在一个方法的运行中如果发生异常,则这个方法生成代表该异常的一个对象,并把它交给运行时系统,运行时系统寻找相应的代码来处理这个异常。把生成异常对象并提交给运行时系统的过程称为抛掷(throw)一个异常。运行时系统在方法的调用栈中查找,从生成异常的方法开始进行回溯,直到找到包含相应异常处理的方法为止,这一个过程称为捕获(catch)一个异常。

 

异常处理由以下三个程序块组成:

try

{

//要检查的语句

}

catch(异常类 对象名称)

{

//异常发生时的处理语句

}

finally

{

//一定会运行到的程序代码

}

语法规则:

①try程序块若是有异常发生,程序的运行便中断,并抛出“异常类所产生的对象”。

②抛出的对象如果属于catch()括号内要捕获的异常类,catch则会捕获此异常,然后进到catch的块里继续执行。

③无论try程序块里是否捕获到异常,或者捕获到异常是否与catch()括号里的异常相同,最后一定会运行finally快里的程序代码。


*抛掷异常和异常处理的例子

package day6;
public class TestException1 {
	public static void main(String[] args) {
		int a=4,b=0;
		try
		{
			if(b==0)
				throw new ArithmeticException("一个算数异常");//抛出异常
			else
				System.out.println(a+"/"+b+"="+a/b);
		}
		catch(ArithmeticException e)
		{
			System.out.println("抛出异常为:"+e);
		}
	}
}

运行结果:

抛出异常为:java.lang.ArithmeticException: 一个算数异常

 

*指定方法抛出异常

package day6;
class Test
{
	//throw	在制定方法中中不处理异常,在调用此方法的地方处理
	void add(int a,int b) throws Exception
	{
		int c;
		c=a/b;
		System.out.println(a+"/"+b+"="+c);
	}
}

public class TestException2 {
	public static void main(String[] args) {
		Test t=new Test();
		try
		{
			t.add(4,0);
		}
		catch(Exception e)//注意不能用Exception类的子类
		{
			System.out.println(e);
		}
	}
}

运行结果:

java.lang.ArithmeticException: / by zero


*定义自己的异常类

package day6;
class MyException extends Exception//必须继承异常父类
{
	public MyException(String msg)
	{
		//调用Exception类的构造方法,存入异常信息
		super(msg);
	}
}
public class TestException3 {

	public static void main(String[] args) {
		try
		{
			//在这里用throw直接抛出一个MyException异常
			throw new MyException("自定义异常");
		}
		catch(Exception e)
		{
			System.out.println(e);
		}
	}
}

运行结果:

day6.MyException: 自定义异常


throw和throws都是java的关键字,注意区分:

①throw是在方法内部抛出一个异常,语法:

throw 异常对象

throw要么和try-catch-finally语句配套使用,要么与throws配套使用。

②throws是在方法定义时告诉编译器该方法可能会发生异常,语法:

thorws 异常类

其中异常类可以声明多个,不同的异常类之间用逗号分隔。


*自定义异常的使用

//MyExc包中的RadiuException.java文件
package MyExc;
public class RadiuException extends Exception{
	public RadiuException(String msg)
	{
		//调用Exception类的构造方法,存入异常信息
		super(msg);
	}
	public String toString()
	{
		return "半径不合法";
	}
}
//同工程的MyProj包中的UseMyException.java文件
package MyProj;
import MyExc.*;
class Circle
{
	private double r;
	public void setR(double r1) throws RadiuException
	{
		if(r1<0)
			throw new RadiuException(null);//抛出异常实例
		else
			r=r1;
	}
	public void printArea()
	{
		System.out.println("Area is "+Math.PI*r*r);
	}
}

public class UseMyException {
	public static void main(String[] args) {
		Circle c1=new Circle();
		try
		{
			c1.setR(-2);
		}
		catch(Exception e)
		{
			System.out.println(e.toString());
		}
		finally
		{
			c1.printArea();
		}
	}
}

运行结果:

半径不合法

Area is 0.0

在调用throws抛出异常的方法时,可以将整个异常在方法中再向上传递,main()方法作为整个程序的起点,如果在main()方法处用throws抛出异常,则此异常就将交给JVM(Java虚拟机)进行处理。


参考书籍是人民邮电的《Java从入门到精通》与吉林大学的《Java程序设计》,笔记中的部分例子和释义是基于这两本书写的,也有部分来自网络渠道。

收工,明天新学期就要开始了,要做出一些改变了。虽然时间会很紧张,还是要好好加油<( ̄ˇ ̄)/。


你可能感兴趣的:(Java)