异常
l 异常定义了程序中遇到的非致命的错误, 而不是编译时的语法错误,如程序要打开一个不存的文件、网络连接中断、操作数越界、装载一个不存在的类等。异常是一个对象。
例如:
class Test
{
publicint devide(int x,int y)
{
intresult=x/y;
returnresult;
}
}
class TestException
{
publicstatic void main(String args[])
{
try
{
new Test().devide(3,0);//这个语句可能有异常,因为除数不能为0
}
catch(Exception e)
{
System.out.println(e.getMessage());//这里是出现异常后执行的语句
}
}
System.out.println(“Programis running here”);
}
l 当在一个声明的函数后面加了“throws Exception”,则调用该函数时必须用try,catch语句,如:
public int devide(int x,int y) throws Exception
{ }
//注:如果在调用这个方法的方法后也加上“throws Exception”则系统不会再要求使用try,catch语句
l 自定义异常类 (自定义的异常类必须继承自Exception)
class Test
{
public int devide (int x,int y) throws Exception
{
if(y<0)
throw new DevideByMinusException(“devisoris ”+y);//手动抛出一个异常
int result=x/y;
return result;
}
}
classDevideByMinusException extends Exception//自定义异常类
{
public DevideByMinusException(String msg)//构造函数
{
super(smg);//调用父类的构造函数
}
}
class TestException
{
public static void main(String args[ ])
{
try
{
new Test().devide(3,-1)
}
catch(Exception ex)
{
System.out.println(ex.getMessage());
}
System.out.println(“program is running here!”);
}
}
l ArithMeticException 算术异常
l 可以抛出个体的异常,如:
public int devide (int x,int y) throws ArithMeticException,DevideByMinusException
{ }
则在调用devide函数的时候就可以有多条catch语句,如:
try {}
catch(ArithMeticException e){ e.printStackTrace(); } //将异常信息打印到屏幕上
catch(DevideByMinusException e){ e.printStackTrace(); } /
catch(Exception e){ e.printStackTrace(); }
//系统会根据所抛出的异常类型自动匹配执行那个catch语句
n try,catch的应用:
收下代码为实现语句的跳转
void fun( )
{
try
{
if(x==0)
throw new XxxException(“Xxx”);
else
throw new YyyException(“Yyy”);
}
catch(XxxException e)
{ ....}
catch(YyyException e)
{ ....}
}
可以在所有的catch语句后加上finally语句,该语句不管有没有发生异常都会执行(除非用“System.exit(0);”语句才不执行),即使使用了return语句也会执行,格式如下:
catch(Exception e)
{ }
finally
{
}
包
假设有:D:\java\aa\bb这样的目录,在D:\java目录下新建一个Test.java,代码如下:
package aa.bb
class Test
{
static int y=54;
}
class running
{
public static void main(String args [ ])
{
System.out.println(Test.y);
}
}
l 我们在编译这个java 文件时,在D:\java目录下输入“javacTest.java”,运行该类时,需要手动把Test.class、running.class 移动到bb目录下,然后在D:\java目录下输入java aa.bb.running来运行类
l 假设在D:\java目录下没有aa与bb目录,则编译时输入:“javac –d . Test.java”,则系统会自动创建aa\bb目录,并自动把Test.class、running.class放到bb目录下。
l 如果把Test.class剪切到E:\aa\bb目录下,则会提示找不到Test.class类,这时可以设置一下classpath环境变量:“setclasspath=E:\;.;”即可正常运行。
l 通过上述例子说明同一个包中的类可以在不同目录下,并且不论类是否是public都可以直接访问,无需加包名
l package语句作为Java源文件的第一条语句。如果没有package语句,则为缺省无名包。
l package语句只能有一条,import语句可以有多条
l 不同的包在调用类时必须指定包名,如果是同一个包下则不用。(在多次调用时如果不想在每次都加上包名,如aa.bb等,则可以在package语句后加入importaa.bb.*; //导入aa.bb包的所有类)
l 同一个包不同类,在调用方法时要加类名。
l 当导入的两个包中有相同的类,则调用这个类时要用完整的形式调用:如:
import java.sql.*;
import java.util.*;
假如在上面的两个包中都有一个test类,则调用时必须指定包名,如:java.sql.test
l 父包和子包没有关系,所以要分别用import导入,如:
import java.sql.*;
import java.sql.abc.*;
l java中默认引入了:import java.lang.*包下的所有类
n jdk中常用的包
l java.lang----包含一些Java语言的核心类,如String、Math、Integer、System和Thread,提供常用功能。
l java.awt----包含了构成抽象窗口工具集(abstract window toolkits)的多个类,这些类被用来构建和管理应用程序的图形用户界面(GUI)。
l java.applet----包含applet运行所需的一些类。
l java.net----包含执行与网络相关的操作的类。
l java.io----包含能提供多种输入/输出功能的类。
l java.util----包含一些实用工具类,如定义系统特性、使用与日期日历相关的函数。
l 在编译时如果出现找不到类的异常时可分3个步骤查找原因:
1. 类名是否正常
2. 是否import了那个类
3. classpath的设置是否正确
访问控制
解释:
1. private类型的方法只能被在同一类中调用
2. default类型的方法能被同一包中的所有类调用
3. protected类型的方法能被同一包中的所有类调用,还能被子类调用(不论子类、父类是否在同一个包)
4. public类型的方法能被所有的类调用
类本身也有访问控制,即在定义类的class关键字前加上访问控制符,但类本身只有两种访问控制,即public 和默认,父类不能是private 和 protected,否则子类无法继承。public修饰的类能被所有的类访问,default默认修饰(即class关键字前没有访问控制符)的类,只能被同一包中的所有类访问。
java的命名习惯
假设xxx,yyy,zzz分别是一个英文单词的拼写。
l 包名中的字母一律小写,如:xxxyyyzzz。
l 类名、接口名应当使用名词,每个单词的首字母大写,如:XxxYyyZzz。
l 方法名,第一个单词小写,后面每个单词的首字母大写,如:xxxYyyZzz。
l 变量名,第一个单词小写,后面每个单词的首字母大写,如:xxxYyyZzz。
l 常量名中的每个字母一律大写,如:XXXYYYZZZ
使用jar文件
l jar文件通常称呼为jar包,jar文件其实就是一个压缩文件,与zip文件差不多
l jdk提供的许多类也是放在jar包中的(jre\lib\rt.jar)
l jar文件可以用RAR软件打开
l jar –cf abc.jar aa //压缩aa目录为abc.jar文件
l jar –cf abc.jar aabb //将aa 目录与bb目录压缩成abc.jar文件
l jar –tf abc.jar //显示该包中的所有目录和文件
l //字母v显示详细信息
l jar –xf abc.jar //解压该包中的内容
l jar –tvfD:\abc.jar > 1.txt //把该包中的内容清单保存到1.txt文件中
l 假如在D:\aa\目录下有abc.jar文件,当要使用这个包里的类时则需要设置classpath指向abc目录,如:setclasspath=D:\aa\abc\abc.jar;