java第四节 异常/访问控制/jar包
/* 异常 异常定义了程序中遇到的非致命的错误,而不是编译时的语法错误,如程序要打开一个不存在的文件 网络连接中断,操作数越界,装载一个不存在的类等 try, catch语句 throws关键字 自定义异常与Throw关键字 如何对多个异常进行处理 我们可以在一个方法中使用throw,try...catch语句来实现程序的跳转 一个方法被覆盖时,覆盖它的方法必须扔出相同的异常或异常的子类 如果父类扔出了多个异常,那么重写(覆盖)方法必须扔出那些异常的一个子集, 也就是说不能扔出新的异常 包 1 package语句及应用 2 package语句作为java源文件的第一条语句,如果没有package语句,则为缺少无名包 3 import语句及应用 4 jdk常用的包 java.lang...包含一些java语言的核心类,如String, Math, Integer, System.和Thread,提供常用功能 java.awt..包含了构成抽象窗口工具集(abstract window toolkits)的多个类,这些类被用来构建和管理应用程序的图形用户界面(GUI) java.applet...包含applet运行所需的一些类 java.net...包含执行与网络相关的操作类 java.io...包含能提供多种输入/输入功能的类 java.util...包含一些实用工具类,如定义系统特性,使用与日期日历相关的函数 javac -d . Lesson44.java 如果存在包名的话,那么就按目录生成编译文件 找不到类的三个排错方法 1: 类名写错了 2: 包名错误,是否import这个类所在的包名 3: 查看classpath是否设置类型 访问控制 private default protected public 同一类----------- 可 可 可 可 同一包中的类------ 可 可 可 子类------------- 可 可 其他包中的类----- 可 类本身也有访问控制,即在定义类的class关键字前加上访问 控制符,但类本身只有两种访问控制, 即public和 默认,父类不能是private 和protected 否则子类无法继承,public修饰的类能被所有的类访问 默认修饰(即class关键字前没有访问控制符)的类 只能被同一个懈中的所有类访问 java的命名习惯 下面是java中的一些命名习惯,假设xxx, yyy, zzz分别是一个英文单词的拼写 1 包名中的字母一律小写,如:xxxyyyzzz 2 类名,接口名应当使用名词,每个单词的首字母大写,如XxxYyyZzz 3 方法名,第一个单词小写,后面的每个单词的首字母大写,如:xxxYyyZzz 4 变量名,第一个单词小写,后面每个单词的首字母大写,如xxxYyyZzz 5 常量名中的第个字母一律大写,如XXXYYYZZZ 使用jar文件 jar -cvf jar -tvf jar -xvf jar -tvf > a.txt 用rar查看jar文件中的内容 注意压缩后的jar文件中的目录结构 快速查看jar包中是否有我们想找的类 jar查看帮助 jar -cf lesson4.jar org 将org目录生成一个lesson4.jar的包文件 jar -cvf lesson4.jar org jar -tf lesson4.jar 查看包内容 jar -xvf lesson4.jar 解压包 jar -xvf rt.jar > 1.txt 重写向 */ package org.it315; //import java.awt.*; //import java.awt.event.*; //import java.sql.*; //import java.util.*; /*class SubTest extends Test { //在子类中只能扔出父类的异常,只能比父类的少,不能比父类的异常多 public int devide(int x, int y) throws NullPointerException { } };*/ //定义自己的异常类 import org.it315.*; import org.it315.example.*; class TestException { public static void main(String[] args) //throws Exception { try { new org.it315.example.Test().devide(3,1); //new org.it315.example.Test().fun1(); //现在不能访问了,因为TestSub是Test类的子类,但TextException类的子类,所以不能访问 //如果为如果fun1()为public将可以被其它包中的类访问 //new Test().fun1(); //int i=1+1; } catch(ArithmeticException e) { System.out.println("ArithmeticException"); e.printStackTrace(); } catch(org.it315.DevideByMinusException e) { System.out.println("DevideByMinusException"); e.printStackTrace(); return; //System.exit(0); //程序到此结束了, //finally将不被执行了 } catch(Exception e) { System.out.println(e.getMessage()); } finally { System.out.println("不管是否有异常,finally的代码都要执行"); } System.out.println("program is running here!"); } } class TestSub extends Test { public void fun3() { fun1(); } };
package org.it315; public class DevideByMinusException extends Exception { public DevideByMinusException(String msg) { super(msg); } };
package org.it315.example; //import org.it315.*; import org.it315.DevideByMinusException; public class Test { //throws Exception加上该throws Exception 在调用该函数时,那么必须实现try...catch //多个异常类的处理 //public int devide(int x, int y) throws ArithmeticException, org.it315.DevideByMinusException public int devide(int x, int y) throws ArithmeticException, DevideByMinusException { if(y<0) { //throw new org.it315.DevideByMinusException("devisor is "+y); throw new DevideByMinusException("devisor is "+y); } int result = x/y; return result; } //throw try...catch还可以实现话句的跳转 /*void fun() { try{ if(x==0) { throw new XxxException("xxx"); }else{ throw new YyyException("yyy"); } }catch(XxxException e) { //...... } catch(YyyException e) { //..... } }*/ //private void fun1() protected void fun1() //没有访问修饰的叫做包类型的访问修饰符. 在其它的包中是不可以访问 { } private void fun2() { fun1(); } } class Test1 { public static void main(String[] args) { new Test().fun1(); } };