1. 处理异常的两种方式:
1)try{ }catch(Exception e){ }finally{ }
2)自己不处理,抛出去。在方法头上使用throws Exception,方法内部使用throw new Exception().
3) 两种异常处理方式区别:使用throws方式,程序走到异常点就终止了;使用try…catch,处理了异常,程序还可以继续走下去。
2.对于两大异常:Checked Exception(非运行时异常),一定得处理,且有两种方式;Uchecked Exception(运行时异常),可处理也可不处理,推荐不处理。
3. try块放置的是可能出现异常的代码,会动态生成异常对象,并将该异常对象赋给catch
括号中的异常引用e,如catch(Exception e).
4.出现NullPointerException空指针异常的原因:某个引用指向null,但还去调用null的方法,就会出现空指针异常。
6.使用try…catch…finally…方式处理异常,不管有没发生异常,finally中的代码都会执行。
7.自定义异常类:只要一个类直接或是间接的继承Exception类,就是一个自定义的异常类。如:public class MyException extends Exception{
Public MyException(){
Super();
}
Public MyException(String s){
Super(s);
}
}
8.如何使用自定义的异常类:当使用throws方式时,可以throws MyException,也可以通过多态这样写:throws Exception;当使用try…catch()..方式时,可以这样写catch(MyException e),也可以通过多态这样写catch(Exception e).
9. 一个方法中可以抛出多个异常,异常之间没有先后之分,如: throws MyException, MyException1.那么调用这个带有多个异常的方法时,必须得将所有的异常都处理,那么就得有多个catch代码块,每一个catch代码块捕获一个异常。
10. 方法定义中声明的异常(throws Exception),其作用是让编译器知道这个方法可能会抛出异常,为了消除这个编译错误,在catch代码块中必须的捕获该类型的异常。
11. 当多个catch代码块中的异常存在着继承关系时,捕获父类的异常的catch必须的放在捕获子类异常的catch代码块后面。这是因为在执行catch代码块时是按顺序执行的,当把捕获父类的异常的catch放在最前面时,就会处理所有的异常。这样捕获子类的异常的catch代码块就不会执行到。
12. 如果try…catch..finally中的try块中存在return语句,也会先执行完finally中的代码块,再执行return语句。
13. 如果try…catch..finally中的try块中存在exit(0)语句,就不会执行finally中的代码块。因为当运行到exit(0)方法的时候,就停止了jvm,整个程序就终止了。
14. 在catch代码块中也可以抛出新的异常,那么方法头中必须声明这个新的异常(throws Exception),在项目中经常这么用,如:
catch(Exception e){
throw new Exception();
}
15.内部类(inner class):
1)静态内部类:在一个类中用关键字static再定义一个类。如:
class OuterClass{
private static int a=2;
public static class Inner{
public void test(){
System.out.println(a)}}}
Public class InnerClassTest{
OuterClass.Inner inner =new OuterClass.Inner();
Inner.test();
}
a.静态内部类生成实例的方式:OuterClass.Inner inner= new OuterClass.Inner();
b.静态内部类只能访问静态成员变量和静态方法。
2)成员内部类:在定义内部类时,没有使用关键字static,该内部类就是成员内部类。如:
class OuterClass{
private int a=2;
public class Inner{
public void test(){
System.out.println(a)}}}
Public class InnerClassTest{
OuterClass.Inner inner =new OuterClass().new Inner();
Inner.test();
}
a) 成员内部类生成对象的方式:
A. 当在外部类之外的类中创建对象:OuterClass.Inner inner =new OuterClass().new Inner();
B. 当在外部类中其他方法中创建对象: Inner inner =this.new Inner();
b) 成员内部类对象访问外部类同名变量方式:OuterClass.this.a;
1) 局部内部类:定义在方法中的内部类,是最少使用的一种内部类,该类不能用public,private,protect,static 修饰,该内部类对象只能访问方法中final变量。外部类不能直接访问局部内部类对象,所以只能在局部内部类中自己创建对象new Inner(),然后通过外部类对象调用方法,间接调用内部类对象。如:new OuterClass().fangfa();
2) 匿名内部类:没有类名,没有构造方法,最重要的特点是它会隐式的继承类或实现接口。
String str = test.get(new Date(){
});
这里就会创建一个匿名内部类,隐式继承了Date类,并且没有重写Date的任何方法。方法体中是可以重写父类Date的方法的。
匿名内部类用在方法里面,一般作为方法参数。
16. java I/O中的File类:它是java I/O包中的一个类,一个File类的对象表示磁盘上的文件或目录。常用的构造方法是File(String pathname),pathname表示文件的路径+文件的名字。
创建文件的方式:
1)File file = new File(“c:\\text.txt”);表示通过pathname 指定好一个文件。
2)file.createNewFile();文件不存在就会创建成功并返回一个true.
17.file类的第二种构造方法:File(File parent, String child)其本质就是拼接的创建一个pathname。如:File file = new File(“c:\\abc”); File file2 = new File(file, “d.txt”); file2.createNewFile();就会在c:\abc目录下创建一个d.txt文件。
18. File类中创建目录的方法:public bookean mikdr(),如:File file = new File(“c:/abc/d/e”);
File.mikdr();就会创建一个目录c:\abc\d\e,前提是目录abc和d必须得都存在。如果中间任何一个目录,假如是d,不存在,就会创建失败。要想创建目录成功,绝对目录不能出现中断。而方法mikdirs()就不会有这种限制。
19. File类中的public String[] list()方法的作用是返回抽象路径名(abstract pathname)中的子目录名和文件名。如:File file = new File(“c:\\abc”); String[] names = file.list(); for(String name:names){System.out.println(name);}就会打印出c盘abc目录下的所有的子目录名和文件名。
20.File类中的delete()方法:File类型引用file.delete(),用于删除文件。
21.File类中String getName(),返回文件名。File.getName().
22.File类中文件过滤方法:String[] list(FilenameFilter FFObj),其中FilenameFilter是一个接口,该接口中有唯一一个方法accept(File dir,String name),该方法的作用是测试一个指定的文件是否应包含在一个file 列表中,包含就返回一个真。其中File类型引用dir表示带测试文件对应的目录,name表示的是待测试的一个个文件名。FFObjt是一个实现了FilenameFilter接口的对象引用。
代码如下: File file = new File(“d:/aaa/bbb”);
String[] names = file.list(new Filename(){
Public Boolean accept(File dir, String name){
If(name.endWith(“.txt”)){//过滤的条件
Return true;}
Return false;
});
22.File类中的isDirectory(),isFile()用来判断file类对象是否是一个目录或文件。