嵌套类

Java中final与static的使用

一世执手 提交于 2020-03-02 06:52:16
Final关键字 根据使用环境不同,final的含义会有细微的区别,但通常是指无法改变的内容。final关键字可以修饰变量、方法和类。 Final变量 final数据是用来向编译器告知变量是恒定不变的。对使用基本类型数据的常量,在定义时必须对其赋值。一个既是static又是final的域只会占据一段不能改变的存储空间。当对象使用引用而不是基本类型时使用final修饰,final使引用恒定不变,但其引用的内容可变。 空白的final允许的,但在使用前必须初始化,一旦初始化,将不能再更改。一般应用于类中,在定义处或构造方法中初始化。方法的参数也可以被final修饰,final参数不能更改参数引用指定的对象,主要用来向匿名内部类传递数据。 接口中定义的域不能是空白final的,因为接口中的域都是static final,所以必须在定义时进行初始化。其他位置的static final也一样。 Final方法 final方法的使用原因有两个: 锁定方法,防止继承类修改和覆盖方法。 加强效率,将调用转换为内嵌,该条仅限于小方法使用。 类中所有私有方法都隐式的指定为final的,虽然可以给私有方法加final修饰,但不会有任何意义。 Final类 final类表示该类无法被继承。final类中的域可根据选择是否成为final域,但类中的方法都将隐式的指定为final的

向大师学习怎样使用嵌套类

爷,独闯天下 提交于 2020-02-28 11:46:09
图1 嵌套类 如上图一所示是嵌套类的分类和一些使用策略,主要需要注意的就是,嵌套类主要是为外部类服务的,最好是仅仅在外部类中使用,如在其他类中需要使用另外一个类的嵌套类,那么该嵌套类就应该做为顶级类,而不是嵌套类。 如果需要使用嵌套类,那么优秀考虑静态成员类,可以参考 effictive java 2版 22节 优先考虑静态成员类 。因为每一个非静态成员类的实例会维护一个外部类的实例,所以有空间和时间的开销。如果确实需要外部类的实例引用,例如要直接访问外部类的飞静态成员变量等,那么就可以考虑非静态成员类。 如果只需要类的一个实例,并且有预置类型,例如很多继承Thread的类,或者实现Runnable的类就可以做成匿名类。如果没有预置类型就可以考虑局部类。 上面讲了一些原因和策略,下面来看一下具体的应用,我们以LinkedList的源码为例,LinkedList也是Josh Block写的,代码里面对于嵌套类使用应该是对嵌套类使用的最佳实践了。 package java.util; /** * * List 和 Deque双向链表的实现 * */ public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.io

new和反射产生java内部类的实例化详解

自作多情 提交于 2019-12-07 15:48:37
前两天看到一道口试题,是关于内部类的知识,觉得很有意思。 这道题是这样的: 根据注释填写(1),(2),(3)处的代码 public class Test{ ?????? public static void main(String[] args){ ????????????? // 初始化Bean1 ????????????? (1) ????????????? bean1.I++; ????????????? // 初始化Bean2 ????????????? (2) ????????????? bean2.J++; ????????????? //初始化Bean3 ????????????? (3) ????????????? bean3.k++; ?????? } ? ?????? class Bean1{ ????????????? public int I = 0; ?????? } ? ?????? static class Bean2{ ????????????? public int?J = 0; ?????? } } public class Bean{ ?????? public class Bean3{ ????????????? public int k = 0; ?????? } } ? 这实在就是实例化内部类对象的题。 从上面的题可以看出