java中的内部类的总结
来源:互联网 发布:sql server怎么导入表 编辑:程序博客网 时间:2024/06/09 16:14
一,介绍
java中的内部类主要分为普通内部类,静态内部类,匿名内部类,局部内部类四种,其中匿名内部类较为常用,大家最好可以掌握它的使用方法,以便在以后的编程中使用它,下面分别介绍下这些内部类
1.普通内部类
public class Outer { private String name="zhangsan"; public void test() { InnerClass innerClass = new InnerClass(); System.out.println("内部类的属性:"+innerClass.name); innerClass.test();} //内部类 class InnerClass{ private String name="lisi"; public void test(){ //在内部类中使用外部类属性 System.out.println(Outer.this.name); } }}
如上是一个普通的内部类,就是在一个public修饰的类中,放置一个其他的类,称之为内部类,类可以用public,default来修饰,内部类可以用public,default,protected,
private 来修饰,内部类可以继承其他类,也可以使用其他接口,可以与外部类的属性名,方法名相同,这是一个成员内部类,
如果要在成员内部类中访问外部类属性:可以用OuterClass.this.属性
如果在外部类中创建内部类对象:OuterClass.innerClass 变量名 = new OuterClass().new InnerClass();
2.静态内部类
public class StaticOuter { private String name="zhangsan"; private static int age = 23; public void test(){ InnerClass ic = new InnerClass(); } static class InnerClass{ private String name="lisi"; private static int age = 21; public void test() {System.out.println(StaticOuter.age );StaticOuter so = new StaticOuter();so.test();} }}
这是静态内部类,静态内部就是在成员内部类上加了一个static ,值得注意的是在静态内部类中,不能访问外部类非静态的属性,还有创建内部类的方式如下
StaticOuter.InnerClass innerClass2 = new StaticOuter.InnerClass();在lucene6.6中构建布尔查询时,就是用的这种方式来构建的
3.匿名内部类
匿名内部类是常用的一种内部类,主要用于接口,因为对于有些接口的实现,我们只在某一个地方使用,如果为他特意创建一个类,显得太过于麻烦和臃肿,所以使用匿名内部类,代码如下
//Arrays.sort(stus,new StuComparator());Arrays.sort(stus,new Comparator<Student>() {@Overridepublic int compare(Student o1, Student o2) {if(o1.getAge() > o2.getAge()){return 1;}else {if(o1.getAge() < o2.getAge()){return -1;}}return 0;}});
在这个Arrays.sort方法中是要传入一个接口的实现类,的但是现在使用了匿名内部类来解决这个问题,这种方式经常在编程中使用,需要掌握
4.局部内部类
即在方法中定义的内部类,与局部变量类似,在局部内部类前不加修饰符public或private,其范围为定义它的代码块。局部内部类在编程中是很少会用到的代码如下
public void method(){ int num2 = 44; class JuIn{ public void zhanshi(){ /* * 按理说局部内部类访问局部变量,局部变量应该用final修饰,但是不用final修饰也是可以访问的, * 这是因为在JDK8以下必须用final修饰,不然会报错, * Cannot refer to a non-final variable a inside an inner class defined in a different method, * 但是在JDK8之后就不会出现这种状况 * */ System.out.print(num2); } } System.out.println("访问局部变量"+num2); //在局部创建内部类对象 JuIn ji = new JuIn(); ji.zhanshi(); }}
- java中的内部类的总结
- Java中的内部类总结
- java中的内部类总结
- java中的内部类总结
- java中的内部类总结
- java中的内部类总结
- java中的内部类总结
- java中的内部类总结
- java中的内部类总结
- java中的内部类总结
- java中的内部类总结
- java中的内部类总结
- java中的内部类总结
- java中的内部类总结
- java中的内部类总结
- java中的内部类总结
- java中的内部类总结
- java中的内部类总结
- BroadcastReceiver Hook
- oracle实用知识(二)
- 【数据结构 四】---队列
- 关于减少电脑辐射的小招数!
- [学习笔记]BZOJ3224 普通平衡树
- java中的内部类的总结
- Python爬虫学习纪要(五):正则表达式2
- C++编程学习52个经典网站 强力推荐
- JFinal之旅——Maven下搭建项目
- 百度地图自定义覆盖物
- Tarjan 求割边割点
- Tensorflow深度学习之十一:基础图像处理
- HDU 1166 敌兵布阵 (树状数组)
- C