教你使用Java的静态内部类

12.3.4  静态内部类

在上一小节我们讨论了内部类,即在一个类中包含有另外一个或者多个类(见本书12.3.3小节)。与 内部类相似,静态内部类指在一个类的内部包含有另外一个或者多个静态类。例如:

public class OuterClass {
    ...
    static class StaticInnerClass1 {             //内部静态类
        //只可以访问OuterClass的静态成员
         ...
    }                                            //StaticInnerClass结束
    ...                             
    static class StaticInnerClassN {            // 更多静态内部类
       //只可以访问OuterClass的静态成员
       ...
    }                                           //StaticInnerClassN结束
}  //OuterClass结束

与一般内部类不同,在静态代码中不能够使用this操作,所以在静态内部类中只可以访问外部类的静 态变量和静态方法。使用静态内部类的目的和使用内部类相同。如果一个内部类不依赖于其外部类的实例 变量,或与实例变量无关,则选择应用静态内部类。

如下例子演示怎样使用静态内部类:

///完整程序存在本书配套资源目录Ch12名为StaticInnerClassTest.java
public class StaticInnerClassTest {
    public static void main( String args[] ) {
         OuterClass2 outer = new OuterClass2();
        OuterClass2.StaticInnerClass.innerMethod();  
                                                 //调用静态内部类的静态方法
        OuterClass2.outerMethod();
        //创建静态内部类对象
        OuterClass2.StaticInnerClass staticInner = new OuterClass2.StaticInnerClass();
         int num = staticInner.innerMethod2();   //调用静态内部类实例方法
    }
}
class OuterClass2 {                             //外部类
    private double x = 0.0;                     //内部静态类不可以访问 外部类实                                               例变量
    static private int n = 10;                  //外部类 静态变量
    static void outerMethod() {                 //外部类静态 方法
        System.out.println("from OuterClass...");
    }
    void outerMethod2() {
        System.out.println("from OuterClass’ instance method2 ()...");
    }
    static class StaticInnerClass {             //静 态内部类
        static private int m = 5;               //静态内部类静 态变量
        static void innerMethod() {             //静态内部类静态 方法
            int sum;
            n = 20;                              //只可以访问外部类静态变量
            sum = n + m;
            System.out.println("from InnerClass sum = " + sum);
            outerMethod();                      //只可以调用外部类静态 方法
       }
        int innerMethod2() {
            n = 100;
            outerMethod();
            System.out.println("from InnerMethod2() n = " + n);
            return n;
        }
   }        //静态内部类结束
}           //外部类结束

时间: 2024-10-29 12:31:04

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

java的静态内部类

只是一个简单的记录.因为一直排斥java这个东西.java跟c++比是很不错的一个语言,至少内存管理这么麻烦的东西不用操心了.但是和不断崛起的脚本语言比起来,效率差的太多.无论如何做android还是需要java的,所以遇到什么就看点什么. 既然要用静态内部类,那么就看看为什么不用非静态内部类: package com.company; class Company { private String theCEO = "stupid"; private static String com

教你设置Java环境变量

JDK安装成功之后,测试是否真的已成功安装,在命令提示符里面输入"java -version"并按回车键,若出现如下版本信息: java version "1.6.0_26" Java(TM) SE Runtime Environment (build 1.6.0_26-b03) Java HotSpot(TM) Client VM (build 20.1-b02, mixed mode, sharing) 则表明JDK已安装成功. 下面是说明怎么设置Java环境变

教你使用Java中的RowSet

ResultSet是使用Jdbc编程的人入门和常用的操作数据库的类,自 JDK 1.4 开始,易于使用RowSet接 口被引入.RowSet 接口扩展了标准 java.sql.ResultSet 接口.RowSetMetaData 接口扩展了 java.sql.ResultSetMetaData 接口.因此,熟悉 JDBC API 的开发人员必须学习少数几个新 API 才能使 用 rowset.此外,与 JDBC ResultSet 对象配套使用的第三方软件工具也可以方便地用于 rowset.但

教你在java中使用dll方法

Java语言本身具有跨平台性,如果通过Java调用DLL的技术方便易用,使用Java开发前台界面可以更快 速,也能带来跨平台性. Java调用C/C写好的DLL库时,由于基本数据类型不同.使用字节序列可能有差异,所以在参数传递过 程中容易出现问题. 使用Java调用DLL动态链接库的方案通常有三种:JNI, Jawin, Jacob. 其中JNI(Java Native Interface)是Java语言本身提供的调用本地已编译的函数库的方法,本身具有跨平台性,可以在不同的机 器上调用不同的本地

教你在Java中执行其它程序

在编写Java程序时,有时候需要在Java程序中执行另外一个程序. 1.启动程序Java提供了两种方法用来启动其它程序: (1)使用Runtime的exec()方法 (2)使用ProcessBuilder的start()方法 不管在哪种操作系统下,程序具有基本类似的一些属性.一个程序启动后就程序操作系统的一个进程 ,进程在执行的时候有自己的环境变量.有自己的工作目录.Runtime和ProcessBuilder提供了不同的方 式来启动程序,设置启动参数.环境变量和工作目录. 能够在Java中执行

教你在Java中玩转单链表

学会了单链表的基本操作之后,我们就可以自定义一些非常有意思的功能了,例如对单链表中的元素进行排序,(排序规则可以由自己定),将链表翻转等等,这里主要是讲老师布置的几个问题,我觉得也非常有趣,大家也可以思考一下,由于这些方法几天前就写完了,五一假在家中也没有对之前的链表进行更多的修改了,所以还是用之前所写过的单链表结构继续添加功能吧. 在实现所有功能之前先来个前言,接下来的这两个方法对后面的每一步都是至关重要的,第一个是获取链表长度的方法: 获取链表长度的方法其实可以是打印链表方法的翻版,我最开始

5招教你把握Java性能监控(转自51testing)

很多开发者觉得自己懂Java编程,事实是大多数开发人员都只领会到了Java平台的皮毛,所学也只够应付工作.作者将深度挖掘Java平台的核心功能,揭示一些鲜为人知的事实,帮助您解决最棘手的编程困难. 当应用程序性能受到损害时,大多数开发人员都惊慌失措,这在情理之中.跟踪Java应用程序瓶颈来源一直以来都是很麻烦的,因为Java虚拟机有黑盒效应,而且Java平台分析工具一贯就有缺陷. 然而,随着Java5中JConsole的引入,一切都发生了改变.JConsole是一个内置Java性能分析器,可以从

[教程]西秦的ACE-JAVA教程一、JAVA MAVEN环境搭建

首先是配置JDK 1.7      1.        到Oracle 官网下载 JDK 1.7 安装包.  下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html     2.        下载好JDK安装包,并安装.一路Next装下去     3.        安装完成后,需要设置变量环境,首先设置JAVA_HOME.右键单击计算机->属性->高级系统设置->

classloader-请教大神Java类加载与对象访问的问题

问题描述 请教大神Java类加载与对象访问的问题 当前线程的classloader为classloaderA的一个对象,然后加载了class B,然后我修改了Class B,给B添加了一个新的方法get,我要怎么样才能在不重启JVM的情况下访问到get方法呢?我之前试过把当前线程的classloader换成新的classloaderA对象,但是无法访问到B对象的新方法. 解决方案 JAVA类加载,对象Java类加载与对象调用java之类对象的加载 解决方案二: 类加载器只有在类加载时会起到指示安