java学习笔记——内部类
2011-11-02 22:47
274 查看
内部类是定义在另一个类中的类。使用内部类的主要原因有以下三点:
内部类方法可以访问该类定义所在的作用域的数据,包括私有的数据;
内部类可以对同一个包中的其他类隐藏起来;
当想要定义一个回调函数且不想编写大量代码时,使用匿名内部类比较便捷。
内部类包括:普通内部类、局部内部类、匿名内部类、静态内部类。
这里我们不去讨论内部类的实现原理,就看下不同的内部类和普通的类有哪些差别。
下面是一个计时器的类,实现了ActionListener接口,实现的效果是每过10s输出一个提示。
普通类实现:
View Code
但是有个问题,Pair是一个大众化的名字,很可能会产生冲突,将其设置为内部类,通过ArrayAlg.Pair来访问很好的解决了这个问题,不然命名可能会让你破费脑筋。
另一个为什么其必须是静态内部类的原因,是因为minmax方法被定义为了static方法,而static方法是不能访问对象状态的,只能访问类的静态域。所以,如果不生, Pair为static的话,编译器就会报错:没有隐式的ArrayAlg类型对象初始化内部类对象。
这些就是我们的内部类了,怎么去使用它要根据具体情况分析。
内部类方法可以访问该类定义所在的作用域的数据,包括私有的数据;
内部类可以对同一个包中的其他类隐藏起来;
当想要定义一个回调函数且不想编写大量代码时,使用匿名内部类比较便捷。
内部类包括:普通内部类、局部内部类、匿名内部类、静态内部类。
这里我们不去讨论内部类的实现原理,就看下不同的内部类和普通的类有哪些差别。
下面是一个计时器的类,实现了ActionListener接口,实现的效果是每过10s输出一个提示。
普通类实现:
View Code
package com.test.www; import java.security.PublicKey; public class StaticInnerClassTest { public static void main(String[] args) { double [] d=new double[20]; for(int i=0;i<d.length;i++) { d[i]=100*Math.random(); } Pair pair=ArrayAlg.minmax(d); System.out.println("min="+pair.getFirst()); System.out.println("max="+pair.getSecond()); } } class ArrayAlg { public static Pair minmax(double[] values) { double min=Double.MAX_VALUE; double max=Double.MIN_VALUE; System.out.println(min+"----"+max); for(double v:values) { if(min>v) min=v; if(max<v) max=v; } return new Pair(min,max); } } class Pair { public Pair(double f,double s) { first=f; second=s; } public double getFirst() { return first; } public double getSecond() { return second; } private double first; private double second; }
但是有个问题,Pair是一个大众化的名字,很可能会产生冲突,将其设置为内部类,通过ArrayAlg.Pair来访问很好的解决了这个问题,不然命名可能会让你破费脑筋。
另一个为什么其必须是静态内部类的原因,是因为minmax方法被定义为了static方法,而static方法是不能访问对象状态的,只能访问类的静态域。所以,如果不生, Pair为static的话,编译器就会报错:没有隐式的ArrayAlg类型对象初始化内部类对象。
这些就是我们的内部类了,怎么去使用它要根据具体情况分析。
相关文章推荐
- java学习笔记 4种内部类小结
- 黑马程序员 Java基础学习笔记10 内部类
- 【原】Java学习笔记025 - 内部类
- Java基础学习笔记10——(形参和返回值,包,导包,权限修饰符,常见修饰符,内部类)
- 黑马程序员--Java学习笔记之面向对象思想(多态、内部类、匿名内部类、异常类)
- 我的java学习笔记(18)关于内部类(part 3)
- 【Java学习笔记】object,内部类,形参和返回值问题
- Java学习笔记(七)反射及内部类
- java学习笔记7——java局部内部类
- C\C++ 程序员从零开始学习Android - 个人学习笔记(八) - java基础 - 继承、抽象类、接口、内部类(待续)
- 内部类--毕向东Java基础教程学习笔记
- java 从零开始,学习笔记之基础入门<内部类>(十四)
- Java学习笔记【内部类】
- 面向对象 (内部类)+JAVA学习笔记-DAY10
- 黑马程序员java学习笔记——内部类、异常、包
- 【Java学习笔记】内部类
- Java学习笔记四——接口与内部类
- Java学习笔记 08 内部类的使用
- Java学习笔记(4):接口与内部类
- 【Java学习笔记】静态嵌套类和内部类