内部类的创建
public class FileDisplay {
public static void main(String[] args){
File path = new File("//home//scarlett");
if(!path.exists()){
System.out.print("wrong");
}
String[] lists = null;
String regex=".*\\.pdf";
FileDisplay fc = new FileDisplay();
lists=path.list(fc.FileFilter(regex));
for(String item : lists){
System.out.println(item);
}
}
public FileFilter FileFilter(String regex){
return new FileFilter(regex);
}
class FileFilter implements FilenameFilter{
Pattern pattern = null;
public FileFilter(String regex) {
this.pattern = Pattern.compile(regex);
}
@Override
public boolean accept(File dir, String name) {
// TODO Auto-generated method stub
return pattern.matcher(name).matches();
}
}
}
这里创建了一个目录文件显示的类FileDisplay,在该类里面又定义了一个内部类FileFilter来对目录下的文件进行筛选。
内部类对象的创建
/*创建内部类*/
public FileFilter FileFilter(String regex){
return new FileFilter(regex);
}
可以看到,为了得到内部类,在外部类编写类方法FileFilter来得到内部类的引用。
另一种方法是使用.new语法
FileCreate fc = new FileCreate();
lists=path.list(fc.new FileFilter(regex)); //创建内部类
要想创建内部类对象,不能直接使用外部类对象的名字,而是使用外部类对象来创建内部类对象。在得到外部类引用之前是不可能创建内部类的。因为内部类对象会暗暗的联系到创建它的外部类上。如果创建的是嵌套类(静态内部类)就不需要对外部类对象的引用。
定义内部类的作用
1、为了解决一个复杂的问题,为了创建一个类来辅助自己的解决方案,但是又不希望这个类是可以公共访问的。如本文第一个例子。为了读取某一目录下的文件,并按照给定的正则表达式过滤文件以显示。创建了FileFilter这一内部类来实现判断文件名是否符合要求的功能。
2.设计了实现某一接口的内部类,在外部类创建并返回该接口的引用。
使用实例
内部类可以访问外围类的所有资源。
静态内部类只能访问外部类的静态资源。
public class outer {
public static String path = null;
public int count=0;
public static class staticInner {
public void innerTest(){
path=new String("hello"); //静态内部类可以访问外部静态资源
//! System.out.println(count);//不能访问非静态资源
}
}
private class innner {
public void test(){
path=new String("hello");//所有资源都可以访问
System.out.println(count);
}
}
}