答:

  Static Nested Class是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化,其语法看起来挺诡异的,如下所示。

/**
 * 扑克类(一副扑克)
 * @author 骆昊
 *
 */
public class Poker {
    private static String[] suites = {"黑桃", "红桃", "草花", "方块"};
    private static int[] faces = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};

private Card[] cards;

/**
     * 构造器
     *
     */
    public Poker() {
        cards = new Card[52];
        for(int i = 0; i < suites.length; i++) {
            for(int j = 0; j < faces.length; j++) {
                cards[i * 13 + j] = new Card(suites[i], faces[j]);
            }
        }
    }

/**
     * 洗牌 (随机乱序)
     *
     */
    public void shuffle() {
        for(int i = 0, len = cards.length; i < len; i++) {
            int index = (int) (Math.random() * len);
            Card temp = cards[index];
            cards[index] = cards[i];
            cards[i] = temp;
        }
    }

/**
     * 发牌
     * @param index 发牌的位置
     *
     */
    public Card deal(int index) {
        return cards[index];
    }

/**
     * 卡片类(一张扑克)
     * [内部类]
     * @author 骆昊
     *
     */
    public class Card {
        private String suite;   // 花色
        private int face;       // 点数

public Card(String suite, int face) {
            this.suite = suite;
            this.face = face;
        }

@Override
        public String toString() {
            String faceStr = "";
            switch(face) {
            case 1: faceStr = "A"; break;
            case 11: faceStr = "J"; break;
            case 12: faceStr = "Q"; break;
            case 13: faceStr = "K"; break;
            default: faceStr = String.valueOf(face);
            }
            return suite + faceStr;
        }
    }
}
测试代码:

class PokerTest {

public static void main(String[] args) {
        Poker poker = new Poker();
        poker.shuffle();                // 洗牌
        Poker.Card c1 = poker.deal(0);  // 发第一张牌
        // 对于非静态内部类Card
        // 只有通过其外部类Poker对象才能创建Card对象
        Poker.Card c2 = poker.new Card("红心", 1);    // 自己创建一张牌

System.out.println(c1);     // 洗牌后的第一张
        System.out.println(c2);     // 打印: 红心A
    }
}
面试题 - 下面的代码哪些地方会产生编译错误?

class Outer {

class Inner {}

public static void foo() { new Inner(); }

public void bar() { new Inner(); }

public static void main(String[] args) {
        new Inner();
    }
}
注意:Java中非静态内部类对象的创建要依赖其外部类对象,上面的面试题中foo和main方法都是静态方法,静态方法中没有this,也就是说没有所谓的外部类对象,因此无法创建内部类对象,如果要在静态方法中创建内部类对象,可以这样做:

new Outer().new Inner();

转载于:https://www.cnblogs.com/zhangkai0106/p/5011083.html

静态嵌套类(Static Nested Class)和内部类(Inner Class)的不同?相关推荐

  1. 【Java 面向对象】基础、Java程序的内存划分、嵌套类(内部类、静态嵌套类)、局部类、接口的升级问题(默认方法、静态方法)、instanceof

    面向对象 对象的内存 复杂对象的内存 对象数组的内存 思考:方法存储在哪里? Java程序的内存划分 this.super 注解(Annotation) 访问控制(Access Control) to ...

  2. java嵌套类与内部类

    一.嵌套类(Nested Classes) 使用嵌套类减少了命名冲突,一个内部类可以定义在一个类中,一个方法中甚至一个表达式中. (1)定义 A nested(嵌套) class is any cla ...

  3. java 嵌套类: Nested classes

    java 嵌套类: Nested classes 嵌套类分类 静态嵌套类 非静态嵌套类 普通内部类: Common classes 局部内部类: Local classes 匿名内部类: Anonym ...

  4. Java嵌套类(Nested Classes)总结

    Nested Classes定义 在java语言规范里面,嵌套类(Nested Classes)定义是: A nested class is any class whose declaration o ...

  5. Java 嵌套类和内部类演示样例lt;二gt;

    嵌套类(nested class)是一个在还有一个类或接口内部声明的类. 嵌套类分为两种:静态内部类(static inner class)和非静态嵌套类(non-static nested clas ...

  6. java 内部类_java的内部类和静态内部类(嵌套类)

    背景 开发新项目,写Swager的mode的时候用到了嵌套Model,于是在代码中,出现了静态内部类.在codeReview的时候稍微和大家聊了一下.尤其是Static 修饰类和修饰对象和变量不一样呢 ...

  7. 【java开发系列】—— 嵌套类与内部类

    嵌套类与内部类在java中使用的很广泛,为了避免难以理解,这里用了几个小例子,说明它的用法. 嵌套类与内部类的结构如下图 静态嵌套类 静态嵌套类,是一种在类之外声明的嵌套类,由于是静态的,所以不经过初 ...

  8. c++ 嵌套类 内部类

    转自:http://www.cnblogs.com/charley_yang/archive/2011/04/05/2005897.html 一.嵌套类 在一个类的内部定义另一个类,我们称之为嵌套类( ...

  9. Java基础篇:介绍嵌套类和内部类

    在另一个类中定义的类就是嵌套类(nested classes).嵌套类的范围由装入它的类的范围限制.这样,如果类B被定义在类A之内,那么B为A所知,然而不被A的外面所知. 嵌套类可以访问嵌套它的类的成 ...

最新文章

  1. Linux下的Shell工作原理
  2. 从 no-code 到 low-code 再到 pro-code
  3. python nose(二)
  4. Numpy中array和matrix转换
  5. * 完成随机点名案例;学生姓名都提前写在文件中;:每次敲回车,随机显示一个学生姓名,每人最多显示一次,所有人都显示完了就结束程序;
  6. mysql内部_MySQL SQL语句内部剖析
  7. PRML-系列一之1.2.5~1.2.6
  8. Sublime中查找重复行的正则表达式
  9. 7.25 Ext JS下拉单选框(Combobox,TagFied)使用及疑难问题解决
  10. Codejock Suite Pro ActiveX 20.0 Crack
  11. 软件测试报告模板怎么写,这篇文章告诉你
  12. rp:linux debug tools - 摄心神,致虚极,守静笃
  13. IDEA设置版权信息
  14. 腾讯2016实习招聘-安全岗笔试题答案详细解释
  15. 如何解决Mac电脑中的“AppStore无法下载软件”问题?
  16. java--与君初相识之jdk的环境配置
  17. git fatal: detected dubious ownership in repository
  18. MATLAB设置图片输出的尺寸大小与字体(适用科研论文)
  19. ROS学习笔记之小乌龟跟随
  20. 谷歌推出以太坊区块链的大数据视图

热门文章

  1. 基matlab的水果识别的应用,基于MATLAB的水果识别的数字图像处理
  2. Excel数组公式从入门到精通之精通篇
  3. 难点电路详解之负反馈放大器电路(3)
  4. 张量功率谱CAMB参数调试
  5. 强化学习之贝尔曼方程中文解释
  6. pyqt5实战之简陋的计算器
  7. Zabbix poller processes more than 75% busy
  8. 部署Nagios监控系统(一)
  9. 批量导入数据到hive表中:假设我有60张主子表如何批量创建导入数据
  10. 《Adobe Photoshop CC经典教程》—第1课1.2节使用工具