Java 静态内部类的使用

以前一直以为静态内部类没用,现在发现在特定条件下使用静态内部类会更加方便.

静态内部类的使用最佳的示例莫过于jdk里面的LinkedList类了.

查看LinkedList的源码,LinkedList的节点用一个静态内部类Node表示,代码如下

   private static class Node<E> {
        E item;
        Node<E> next;
        Node<E> prev;

        Node(Node<E> prev, E element, Node<E> next) {
            this.item = element;
            this.next = next;
            this.prev = prev;
        }
    }

为什么节点要用静态内部类?

1.首先,用内部类是因为内部类与所在外部类有一定的关系,往往只有该外部类调用此内部类。所以没有必要专门用一个Java文件存放这个类。

2.随着类的加载而产生

3.由于LinkedList实现了Serializable接口,而内部类使用的是编译器产生的合成域来保存指向外围实例的引用,以及保存来自外围作用域的局部变量的值.这些域如何对应到类中是没有明确规定的,因此内部类的内部实现是定义不清楚的.[1]

[1] Effective Java 2nd Edition

时间: 2024-11-05 02:24:27

Java 静态内部类的使用的相关文章

Java静态内部类

两种内部类 Java的内部类有两种,一种是静态内部类,另一种是普通内部类,普通内部类可以获得外部对象的引用, 所以在普通内部类能够访问外部对象的成员变量 ,也就能够使用外部类的资源,可以说普通内部类依赖 于外部类,普通内部类与外部类是共生共死的,创建普通内部类的对象之前,必须先创建外部类的对象. 创建普通内部类的代码如下: Outer o = new Outer(); Outer.Inner inner = o.new Inner(); Outer.Inner inner = new o.Inn

Java静态内部类详解

从事Java开发的人对内部类相信不陌生.什么是内部类呢?定义在一个类内部的类就叫做内部类.比较常见的是非静态内部类,使用相当广泛.而其实静态内部类在某些情况下也有很大的用处,只是它在使用的时候会有一些限制,所以在软件开发中静态内部类不太常见.本文就详解下Java静态内部类使用的相关知识,以帮助大家了解它的意义和使用限制,更好的使用静态内部类. 一.静态内部类的使用目的 在定义内部类的时候,可以在其前面加上一个权限修饰符static.此时这个内部类就变为了静态内部类.不过由于种种的原因,如使用上的

Java 静态内部类与非静态内部类 学习记录.

目的 为什么会有这篇文章呢,是因为我在学习各种框架的时候发现很多框架都用到了这些内部类的小技巧,虽然我平时写代码的时候基本不用,但是看别人代码的话至少要了解基本知识吧,另外到底内部类应该应用在哪些场合,我并不是很清楚,留下一些值得思考的问题作为记录,说不定以后能自己来填.于是就会有这篇文章啦. 常规使用方法我也不想介绍,网上一大把,我就说说比较容易错的,值得注意的地方. 注意 这篇文章只是分享一下我对内部类的一些研究与困惑吧,说不定对大家有帮助,说不定能引导大家一起思考学习.Java语法知识其实

JAVA 静态内部类--转自http://bbs.csdn.net/topics/350021609

内部类其实并不是非要声明成static的..主要还是要看实际情况决定..静态和非静态有不同的作用.. 引用一篇文章给楼主参考下吧. 在一个类中创建另外一个类,叫做成员内部类.这个成员内部类可以静态的(利用static关键字修饰),也可以是非静态的.由于静态的内部类在定义.使用的时候会有种种的限制.所以在实际工作中用到的并不多.  在开发过程中,内部类中使用的最多的还是非静态地成员内部类.不过在特定的情况下,静态内部类也能够发挥其独特的作用.  一.静态内部类的使用目的.  在定义内部类的时候,可

Java静态内部类的作用

在一个类中创建另外一个类,叫做成员内部类.这个成员内部类可以静态的(利用static关键字修饰),也可以是非静态的.由于静态的内部类在定义.使用的时候会有种种的限制.所以在实际工作中用到的并不多. 在开发过程中,内部类中使用的最多的还是非静态地成员内部类.不过在特定的情况下,静态内部类也能够发挥其独特的作用. 一.静态内部类的使用目的. 在定义内部类的时候,可以在其前面加上一个权限修饰符static.此时这个内部类就变为了静态内部类.不过由于种种的原因,如使用上的限制等等因素(具体的使用限制,笔

Java 静态内部类 Static

编写一个静态内部类 1 public class Staticlei 2 { 3 public int age = 20; 4 public static int whit = 30; 5 6 public void test() 7 { 8 System.out.println("test"); 9 } 10 public static void test1() 11 { 12 System.out.println("test1"); 13 } 14 public

JAVA基础整理-50.Java继承和多态

Java类的封装 封装就是将对象的属性和方法相结合,通过方法将对象的属性和实现细节保护起来,实现对象的属性隐藏. Java类的继承:Java简单的继承及单继承和多继承的区别 简单继承 注意:类的继承并不改变类成员的访问权限.也就是说,如果父类的成员是公有的.被保护的或默认的,它的子类仍具有相应的这些特性. extends 关键字直接跟在子类名之后,其后面是该类要继承的父类名称.例如: public class Student extends Person{} 注意:如果在父类中存在有参的构造方法

9种Java单例模式详解(推荐)

单例模式的特点 一个类只允许产生一个实例化对象. 单例类构造方法私有化,不允许外部创建对象. 单例类向外提供静态方法,调用方法返回内部创建的实例化对象.  懒汉式(线程不安全) 其主要表现在单例类在外部需要创建实例化对象时再进行实例化,进而达到Lazy Loading 的效果. 通过静态方法 getSingleton() 和private 权限构造方法为创建一个实例化对象提供唯一的途径. 不足:未考虑到多线程的情况下可能会存在多个访问者同时访问,发生构造出多个对象的问题,所以在多线程下不可用这种

设计模式总结篇系列:单例模式(SingleTon)

在Java设计模式中,单例模式相对来说算是比较简单的一种构建模式.适用的场景在于:对于定义的一个类,在整个应用程序执行期间只有唯一的一个实例对象.如Android中常见的Application对象. 通过单例模式,自行实例化并向这个系统提供这个单一实例的访问方法. 根据此单一实例产生的时机不同(当然,都是指第一次,也是唯一一次产生此单一实例时),可以将其分为懒汉式.饿汉式和登记式. 一.懒汉式: 其特点是延迟加载,即当需要用到此单一实例的时候,才去初始化此单一实例.常见经典的写法如下: 1 pa