`

静态内部类与非静态内部类的区别

阅读更多
     今天看到一本书中举例使用了,静态内部类,
不是太了解静态内部类,
一般内部类的使用基本都是与设计模式相结合实现特定属性的处理。
然后网上查了一下,主要区别在于与外部实例的绑定关系

静态内部类:不与外部实例相互绑定,静态内部类只能引用静态的属性。
非静态内部类:与外部实例相互绑定,实现特定属性方法处理。引用属性中没有特殊限定

下面贴一下网上找到的比较明显的代码例子:


/* 下面程序演示如何在java中创建静态内部类和非静态内部类 */
class OuterClass{
   private static String msg = "GeeksForGeeks";

   // 静态内部类
   public static class NestedStaticClass{

       // 静态内部类只能访问外部类的静态成员
       public void printMessage() {

         // 试着将msg改成非静态的,这将导致编译错误
         System.out.println("Message from nested static class: " + msg);
       }
    }

    // 非静态内部类
    public class InnerClass{

       // 不管是静态方法还是非静态方法都可以在非静态内部类中访问
       public void display(){
          System.out.println("Message from non-static nested class: "+ msg);
       }
    }
}

class Main
{
    // 怎么创建静态内部类和非静态内部类的实例
    public static void main(String args[]){

       // 创建静态内部类的实例
       OuterClass.NestedStaticClass printer = new OuterClass.NestedStaticClass();

       // 创建静态内部类的非静态方法
       printer.printMessage();  

       // 为了创建非静态内部类,我们需要外部类的实例
       OuterClass outer = new OuterClass();       
       OuterClass.InnerClass inner  = outer.new InnerClass();

       // 调用非静态内部类的非静态方法
       inner.display();

       // 我们也可以结合以上步骤,一步创建的内部类实例
       OuterClass.InnerClass innerObject = new OuterClass().new InnerClass();

       // 同样我们现在可以调用内部类方法
       innerObject.display();
    }
}
分享到:
评论

相关推荐

    Handler对象中使用匿名内部类或非静态内部类正确地释放消息避免内存泄漏或增加Native内存

    Handler对象中使用匿名内部类或非静态内部类正确地释放消息避免内存泄漏或增加Native内存,在Android中,Handler对象通常会被用来在主线程(UI线程)中处理消息,以更新UI界面。当我们在Handler对象中使用匿名内部类...

    java静态内部类(嵌套类)

    java静态内部类(嵌套类)的实例 。嵌套类意味着: 1. 要创建嵌套类的对象,并不需要其外围类的对象。 2. 不能从嵌套类的对象中访问非静态的外围类对象。

    深入浅析Java中Static Class及静态内部类和非静态内部类的不同

    上次有朋友问我,java中的类可以是static吗?我给他肯定的回答是可以的,在java中我们可以有静态实例变量、...当然类也可以是静态的,下面小编整理了些关于java中的static class相关资料分享在脚本之家平台供大家参考

    几行代码带你彻底搞懂Java内部类

    内部类基本概述语法格式成员内部类局部内部类匿名内部类静态嵌套类静态嵌套类和非静态嵌套类的区别 内部类 基本概述 当一个类的定义放在另一个类的实体时,则该类叫做内部类,该类所在的类叫做外部类 在一个类体中...

    C#静态static的用法实例分析

    静态类与非静态类的重要区别在于静态类不能实例化,也就是说,不能使用 new 关键字创建静态类类型的变量。在声明一个类时使用static关键字,具有两个方面的意义:首先,它防止程序员写代码来实例化该静态类;其次,...

    Java的内部类和匿名类剖析

    Java 1.1通过对Java语言规范进行修改,显着简化了...为实现这一行为,非静态内部类存储着对外部类的实例的一个隐式引用。所以,对一个非静态内部类进行实例化需要采用不同语法的new语句:  2、引用内部类  内部类

    java中的内部类内部接口详解

    文章目录简介内部类静态内部类非静态内部类静态方法内部类非静态方法的内部类匿名类内部接口总结 简介 一般来说,我们创建类和接口的时候都是一个类一个文件,一个接口一个文件,但有时候为了方便或者某些特殊的原因...

    java内部类1

    内部类一般情况下, 类与类之间是相互独立的,内部类的意思是打破这样的独立,让一个类成为另一个类的内部信息,和成员变量,成员方法同等级别。非静态内部类的使用就是将

    C#静态方法与非静态方法实例分析

    本文实例分析了C#静态方法与非静态方法,并对其用法进行了较为全面的分析。分享给大家供大家参考。具体分析如下: 通常来说,C#的类中可以包含两种方法:静态方法和非静态方法。 使用了static 修饰符的方法为静态...

    c#静态方法和非静态方法详细介绍

    C#的类中可以包含两种方法:静态方法和非静态方法。 使用了static 修饰符的方法为静态方法,反之则是非静态方法。 静态方法是一种 特殊的成员方法,它不属于类的某一个具体的实例,而是属于类本身。所以对静态方法不...

    理解C#编程中的静态类和静态成员以及密封类

    静态类与非静态类基本相同,但存在一个区别:静态类不能实例化。也就是说,不能使用 new 关键字创建静态类类型的变量。因为没有实例变量,所以要使用类名本身访问静态类的成员。例如,如果名为 UtilityClass 的静态...

    正儿八经的详细讲java内部类

    咳咳咳!!!!! 博主真的是正儿八经的...定义在类的内部,成员位置上的非静态类 例子: package untl1; public class outer { private static int a = 1; private int b = 2; class inner { public int c=3; pu

    Java static关键字解析

    非静态内部类(默认public),称为实例内部类,使用时需要先实例化外部类 NonStaticNestedNClass nonStaticNestedClass = new OuterClass().new NonStaticNestedClass(); 静态内部类,使用: 引入所在外部类 import ...

    项目中用到的jdbc连接 单例模式

    在该方法中,Singleton有一个private类型静态内部类, * 内部类在外部类加载的时候并不会加载,只有在调用getInstance方法的时候加载SingletonHolder类。 * 分析: * 类载入到jvm的时候,会进行初始化,但是只会...

    【05-面向对象(下)】

    •静态内部类的对象寄存在外部类里,非静态内部类的对象寄存在外部类实例里 使用内部类 •1.在外部类内部使用内部类-不要在外部类的静态成员中使用非静态内部类,因为静态成员不能访问非静态成 员。 ...

    安卓java读取网页源码-android:安卓开发相关

    静态内部类只能访问外部类的静态成员,非静态内部类可以访问外部类所有成员 静态内部类可由外部类进行创建,非静态内部类依赖于实例创建, 如何使一个类不被继承 构造函数带private属性 加final关键字 设计为匿名类 ...

    Java内部类原理与用法实例总结

    主要介绍了Java内部类原理与用法,结合实例形式总结分析了非静态内部类、静态内部类、局部类等相关概念、原理、用法及相关操作注意事项,需要的朋友可以参考下

    利用反射生成泛型类对象

    对于框架设计者来说,便捷的代码,是很重要的一部分。 反射和泛型是一种重要的解决途径。 此代码是一个生成泛型对象的类。...希望能帮助那些为查找泛型构造器、非静态内部泛型类的对象生成而烦恼的童鞋。

    reflect.rar

    Java反射详解——一篇文章读懂java反射机制(源码) 包含内容: 1. 非静态成员和非静态方法的访问和调用 1.1 关于构造方法 1.2 关于成员变量 ...3. 静态内部类、非静态内部类、匿名类 4. 关于注解Annotation

    zhuhuan0122#SiberiaDanteLib#常见内存泄露解决办法1

    1.非静态内部类,匿名内部类:内部类静态化,内部类里面的资源及时关闭不要静态化 2.Android WebView常见问题及解决方案汇总:http://www.

Global site tag (gtag.js) - Google Analytics