第二十二条:优先考虑静态成员类
来源:互联网 发布:centos 6.7 安装cacti 编辑:程序博客网 时间:2024/05/16 08:42
一、嵌套类的种类
1、静态成员类(在类内部的类)
public class MyClass{ \\... public static class MyMember{ \\... }}
2、成员类(静态与非静态的区别在于static)
public class MyClass{ \\... public class MyMember{ \\... }}
3、局部类(在方法内的类)
public class MyClass {//...public void myMethod(){//...class Memeber{//...}}}
4、匿名类(在调用方法内的类)
mBtn.setOnClickListener{new OnClickListener(){@Overridepublic void onClick(){//...}}};
二、静态成员类与非静态成员的区别
①、持有外部类的引用
非静态成员类隐含持有外部类的引用,通过XXClass.this来获取外部类的引用。
也就是说能够获取外部类的所用成员变量与成员方法。
public class MyType {private int firstData;private int secondData;private int getFirstData(){return firstData;}private int getSecondData(){return secondData;}public class Style{public void getStyle(){//获取外围类成员变量int first = firstData;//获取外围了的方法int second = getFirstData();//获取外围了的引用MyType type = MyType.this;}}}然而静态成员变量就无法持有外围类的引用。只能获取外围类的static的成员变量和方法。
public class MyType {private static int firstData;private int secondData;private static int getFirstData(){return firstData;}private int getSecondData(){return secondData;}public static class Style{public void getStyle(){int first = firstData;int f = getFirstData();//报错:int second = secondData;//报错:MyType myType = MyType.this;}}}②、静态成员类能够脱离外围实例独立存在。
就是说:不用创建外围类,就可以创建静态成员类。但是普通成员类就必须先创建外围实例。
静态成员类:
public static void main(String[] args) {// TODO Auto-generated method stub//不用创建MyType就能单独创建实例MyType.Style style = new MyType.Style();}普通成员类:
public static void main(String[] args) {// TODO Auto-generated method stub//必须要先创建MyType才能创建StyleMyType.Style style = new MyType().new Style();}
三、静态与非静态成员类的实例
静态成员类:(作为枚举类)
public class Main {private Fruit mFruit = Fruit.APPLE;public void setFruit(Fruit fruit){mFruit = fruit;}public enum Fruit{APPLE,ORANGE,BANANA}}非静态成员类:(作为容器的迭代器)
public class MyList <E> extends AbstractList<E>{@Overridepublic E get(int index) {// TODO Auto-generated method stubreturn null;}@Overridepublic int size() {// TODO Auto-generated method stubreturn 0;}@Overridepublic Iterator<E> iterator() {// TODO Auto-generated method stubreturn new MyIterator<E>();}private class MyIterator<T> implements Iterator<T>{private int current;@Overridepublic boolean hasNext() {// TODO Auto-generated method stub//设定一个计时器,与List的数量比较if (current < size()){return true;}return false;}@Overridepublic T next() {// TODO Auto-generated method stubreturn null;}}}
四、何时使用静态成员与非静态成员类
当成员类不要求访问外围成员的时候,就需要将嵌套类设置成静态成员类。
因为非静态成员类会持有外围类的引用,这样会导致,当外围类可以被垃圾回收机制回收的时候,由于非静态成员持有外围实例,导致外围类无法释放,占用内存。
0 0
- 第二十二条:优先考虑静态成员类
- 第22条:优先考虑静态成员类
- Effective Java 第 22 条:优先考虑静态成员类
- 第22条:优先考虑静态成员类
- 优先考虑静态成员类。
- (22):优先考虑静态成员类
- 第22条 类与接口——优先考虑静态成员类
- 《Effective java》读书记录-第22条-优先考虑静态成员类
- EffectiveJava之18-优先考虑静态成员类
- effective java(22) 之优先考虑静态成员类
- 第22条:优先使用静态成员类
- 学习effective java-22类和接口之优先考虑静态成员类
- 第26条:优先考虑泛型
- 第二十六条:优先考虑泛型
- 第27条:优先考虑泛型方法
- Effective Java学习--第26条:优先考虑泛型
- Effective Java Item1:优先考虑使用静态工厂方法
- 网恋第二十二条军规
- 前端复习--javascript 任务队列 与 setTimeout()的深入学习
- Java面象对向的基本思想(三)
- 1021. 个位数统计 (15)
- POJ-3041 Asteroids(匈牙利算法)
- 事件处理程序
- 第二十二条:优先考虑静态成员类
- ubuntu16.04安装搜狗输入法
- 要求新的加密后门法,法、德政客对数据加密的博弈
- html5实现对试题图片批改效果,类似盖章效果
- windows安装yii2.0.9
- 我的第一篇博客
- 读后感---ABC:基于体系结构、面向构件的软件开发方法
- python循环引用的解决办法
- 7复用类-Java编程思想