包(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程序设计》,笔记中的部分例子和释义是基于这两本书写的,也有部分来自网络渠道。
收工,明天新学期就要开始了,要做出一些改变了。虽然时间会很紧张,还是要好好加油<( ̄ˇ ̄)/。