首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java内部类和静态嵌套类

内部类和静态嵌套类是Java编程语言中的两个重要概念,它们都是在类中定义的类。

Java内部类是一个嵌套在另一个类中的类,它可以访问外部类的成员和方法,并且可以在外部类的方法中定义和使用。内部类可以是静态的或非静态的,如果内部类是静态的,那么它就是静态嵌套类。

静态嵌套类是一个静态的内部类,它不依赖于外部类的实例,因此可以直接通过外部类名来访问它。静态嵌套类通常用于定义工具类或者实现单例模式等场景。

Java内部类和静态嵌套类都是Java编程语言中非常重要的概念,它们可以帮助开发人员更好地组织和管理代码,提高代码的可读性和可维护性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Java 的嵌套类(内部类和静态嵌套类)

参考链接: Java嵌套静态类 嵌套类   Java允许在一个类定义另一个类,称为嵌套类 (Nested Classes),类似下面的形式   class OuterClass {     ...    ...class NestedClass {        ...    } } 复制代码  内部类与静态嵌套类    嵌套类有静态和非静态两种,其中静态的称为静态嵌套类(static nested classes...),非静态的称为内部类(Inner Classes)  一个嵌套类是包含它的外部类的一个成员,内部类能够访问外部类的其他成员,而静态嵌套类没有访问外部类的权限  作为外部类的成员,嵌套类能被声明为private...静态嵌套类   静态嵌套类与静态类里面的方法类似,一个静态嵌套类不能直接调用外部类里面的实例变量或者方法,它只能通过对象引用访问他们。  ...实际上,为了封装的便利性,一个静态嵌套类的作用机制和其他被封装的 top-level class相同。

88320

Java中的嵌套类、内部类、静态内部类

参考链接: Java中的嵌套类 在Java中我们在一个类的内部再定义一个类,如下所示:  class OuterClass {     ...    ...嵌套类可以分为两种,静态的和非静态的,即静态嵌套类和非静态嵌套类。非静态嵌套类又叫做内部类(Inner Class)。...这样innerObject就可以访问outerObject内的所有成员属性以及方法了。  那如果想直接跳过外围类去初始化内部类会怎么样呢?...静态嵌套类   有些人把静态嵌套类成为静态内部类,其实静态内部类这个称呼不严谨,因为内部类都是非静态的。...由于静态嵌套类没有像内部类那样绑定外部类对象,所以也就不存在静态嵌套类不能访问其外围类的成员这种说法。

1.7K50
  • java的内部类和静态内部类(嵌套类)

    背景 开发新项目,写Swager的mode的时候用到了嵌套Model,于是在代码中,出现了静态内部类。在codeReview的时候稍微和大家聊了一下。...尤其是Static 修饰类和修饰对象和变量不一样呢? 定义 1. 内部类 可以将一个类的定义放在另一个类的定义内部,这就是内部类; 嵌套类是其封闭类的成员。...非静态嵌套类(内部类)可以访问封闭类的其他成员,即使它们被声明为私有的也是如此。静态嵌套类无权访问封闭类的其他成员。...静态内部类 再一个普通类里面,给内部类加上static关键字的修饰; 与类方法和变量一样,静态嵌套类与其外部类相关联。...总结 嵌套类:内部类和静态内部类 内部类属于外部类的成员,必须依赖与外部对象来实现,静态内部类,不依赖,可以自己单独实现。 static 的修饰 变量,类,方法,代码块。 共性全局性。

    1.7K20

    Effective Java-嵌套类(内部类)

    嵌套类是指被定义在另一个类内部的类。 概念 嵌套类(nested class)是指被定义在另一个类内部的类。嵌套类的存在目的应该只是为外围类(enclosing class)提供服务。...嵌套类有四种: 静态成员类(static member class); 非静态成员类(nonstatic member class); 匿名类(anonymous class); 局部类(local class...除了第一种外,其他三种都被成为内部类(inner class)。静态嵌套类, 就是用static修饰的成员嵌套类。...只能在使用的同时被声明和实例化,没有构造方法。 当且仅当匿名类出现在非静态的环境中时,才有外围实例。 即使匿名类出现在静态的环境中,也不可能拥有任何静态成员。 匿名类不能实现接口或者扩展一个类。...是四种嵌套类中用的最少的。 局部类不能有访问控制符(private,public,protected修饰),可以是抽象的,也可以定义为final。

    66120

    java 内部类 静态内部类_java外部类和内部类

    今天我们分析内部类和静态内部类的区别,首先我们写一个InnerClassTest类,其中有一个内部类InnerClass和静态内部类StaticInnerClass。...倒数5行,StaticInnerClass的innerMethod()报错,显示d() Q:什么是内部类?有什么作用?静态内部类和非静态内部类的区别? 总结 内部类就是定义在另外一个类里面的类。...它隐藏在外部类中,封装性更强,不允许除外部类外的其他类访问它;但它可直接访问外部类的成员。...静态内部类和非静态内部类的区别有: 静态内部类是指被声明为static的内部类,可不依赖外部类实例化;而非静态内部类需要通过生成外部类来间接生成。...静态内部类只能访问外部类的静态成员变量和静态方法,而非静态内部类由于持有对外部类的引用,可以访问外部类的所用成员 参考: 从一道面试题开始说起 枚举、动态代理的原理 java内部类有什么好处?

    74350

    Java 内部静态类_静态内部类特点

    Java中的内部类是在Jdk1.1版本之后增加的,内部类是Java语言中一个比较重要的概念,如果能把内部类运用好,那么会明显增强Java程序的灵活性。...要想清楚static内部类和非static内部类的区别,首先要了解内部类的概念及特点,然后再进行一个全面的对比。 什么是内部类呢?...,看一个例子: 第三,可以在方法体内定义一个内部类,方法体内的内部类可以完成一个基于虚方法形式的回调操作,看一个例子: 第四,内部类不能定义static元素,看一个例子: 第五,内部类可以多嵌套,...看一个例子: static内部类是内部类中一个比较特殊的情况,Java文档中是这样描述static内部类的:一旦内部类使用static修饰,那么此时这个内部类就升级为顶级类。...与static内部类不同,内部接口自动具备静态属性,也就是说,普通类是可以直接实现内部接口的,看一个例子: 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。

    62720

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

    嵌套类与内部类在java中使用的很广泛,为了避免难以理解,这里用了几个小例子,说明它的用法。   ...嵌套类与内部类的结构如下图   静态嵌套类     静态嵌套类,是一种在类之外声明的嵌套类,由于是静态的,所以不经过初始化,就可以通过类名,直接调用。...void printOuter(){ System.out.println("name:"+out2.name); } } } /** * 静态嵌套类...  成员内部类,即该类作为另一个类的成员,因此只有引用另一个类,才能创建这个类。...  局部类的声明之作用与某个代码块内,因此如果某个声明的类仅仅被一段程序所使用,其他地方再也用不到,就可以用这种实现方式。

    62380

    Java学习笔记:深入理解嵌套类和内部类

    1.1.1 什么是嵌套类及内部类? 可以在一个类的内部定义另一个类,这种类称为嵌套类(nested classes),它有两种类型: 静态嵌套类和非静态嵌套类。...静态嵌套类使用很少,最重要的是非静态嵌套类,也即是被称作为内部类(inner)。嵌套类从JDK1.1开始引入。...staticTest = new StaticTest(); staticTest.printInfo(); } } 在静态嵌套类内部,不能访问外部类的非静态成员,这是由Java语法中"静态方法不能直接访问非静态成员...若想访问外部类的变量,必须通过其它方法解决,由于这个原因,静态嵌套类使用很少。...注意,外部类访问内部类的的成员有些特别,不能直接访问,但可以通过内部类来访问,这是因为静态嵌套内的所有成员和方法默认为静态的了。

    69520

    08 内部类(嵌套类)

    这种类型是嵌套类型(nested type),一般称为“内部类”,是 Java 语言的一个强大功能。 嵌套类型的使用目的,都和封装有关。...嵌套的接口、枚举和注解始终都是静态成员类型(就算不使用 static 关键字也是)。 2. 非静态成员类/成员内部类 “非静态成员类型”就是没使用 static 声明的成员类型。...只有类才能作为非静态成员类型。 3. 局部类/方法内部类 局部类是在 Java 代码块中定义的类,只在这个块中可见。接口、枚举和注解不能定义为局部类型。 4....方法局部类 局部类在一个 Java 代码块中声明,不是类的成员。只有类才能局部定义,接口、枚举类型和注解类型都必须是顶层类型或静态成员类型。...局部类往往在方法中定义,但也可以在类的静态初始化程序或实例初始化程序中定义。 因为所有 Java 代码块都在类中,所以局部类都嵌套在外层类中。因此,局部类和成员类有很多共同的特性。

    67210

    Java内部类——静态和非静态内部类、匿名内部类、方法内部类

    https://www.sxt.cn/Java_jQuery_in_action/five-inner-class.html 内部类的分类https://www.sxt.cn/Java_jQuery_in_action...,并没有外部类的引用,也就无法调用外部类自己的方法,同时也就屏蔽了外部类的操作 但是如果在内部类中写上外部类的引用和get方法,就可以在这种定义方式的前提下获得外部类的引用了。...静态内部类被执行了! 静态内部类被执行了!...静态内部类和非静态内部类是有区别的: 内部类有外部类的this指针,但是静态内部类是没有外部类的this指针的,毕竟两者创建的时间也不用。...静态内部类和内部类的调用方法也不同(这是当然的) image.png image.png 匿名内部类 public class NoNameInnerClass { public static

    92430

    【小家java】静态类、静态方法、内部类、匿名内部类、非静态类的一些实践

    但如果这个类是内部类,是可以这样写的:public static class A 静态内部类的作用:只是为了降低包的深度,方便类的使用,实现高内聚。...静态内部类适用于不依赖于外部类,不用使用外在类的非静态属性和方法,只是为了方便管理类结构而定义。在创建静态内部类的时候,不需要外部类对象的引用。...非静态内部类有一个很大的优点:可以自由使用外部类的所有变量和方法,对其外部类有个引用 有了这两个区别,各位看官应该知道什么时候使用什么样的类了吧 下面是静态方法和非静态方法的区别: 静态方法(Static...静态内部类和非静态内部类在创建时有区别 //假设类A有静态内部类B和非静态内部类C,创建B和C的区别为: A a=new A(); //创建B A.B b=new A.B(); //创建C A.C...我们会发现java的设计者在设计内部类的时候用心良苦,学会使用内部类,是掌握java高级编程的一部分,它可以让你更优雅的设计你的程序结构。

    3.1K30

    JAVA静态内部类_java静态内部类实例化

    //一些属性和方法 }   发现在许多实际应用的工程文件中,静态内部类和静态变量的使用很普遍。于是翻阅了一些书籍资料,深入学习了静态内部类,在此做个总结。...静态内部类的使用限制   对于在外部类的各个方法间定义的内部类,静态与非静态在使用时有不同的限制,主要总结为以下的几个区别:     (1)在方法间定义的非静态内部类:       ● 外围类和内部类可互相访问自己的私有成员...● 在创建静态内部类实例时不需要将静态内部类的实例绑定在外部类的实例上。(即内部类可以单独创建实例) /** * 声明静态内部类实例与非静态内部类实例的区别示例。...Inner i = o.new Inner(); 静态内部类的使用样例   关于静态内部类,《Effective Java》一书中还给出了一个这样的使用例子: public class Outer...:   1.如果类的构造器或静态工厂中有多个参数,设计这样类时,最好使用Builder模式,特别是当大多数参数都是可选的时候。

    1.2K10

    java静态内部类和成员内部类的区别

    嵌套类的对象,并不需要其外围类的对象。 2. 不能从嵌套类的对象中访问非静态的外围类对象。 ..., 不能访问外部类的非静态成员, 这是由Java语法中"静态方法不能直接访问非静态成员"所限定.注意, 外部类访问内部类的的成员有些特别, 不能直接访问, 但可以通过内部类实例来访问, 这是因为静态嵌套内的所有成员和方法默认为静态的了....同时注意, 内部静态类Person只在类StaticTest 范围内可见, 若在其它类中引用或初始化, 均是错误的....非静态内部类的非静态成员可以访问外部类的非静态变量。     生成一个静态内部类不需要外部类成员:这是静态内部类和成员内部类的区别。...这样实际上使静态内部类成为了一个顶级类(正常情况下,你不能在接口内部放置任何代码,但嵌套类可以作为接口的一部分,因为它是static 的。只是将嵌套类置于接口的命名空间内,这并不违反接口的规则)

    1K10

    java静态内部类和非静态内部类的区别_静态内部类有什么问题

    一、非静态内部类: 1、变量和方法不能声明为静态的。(类的编译顺序:外部类–静态方法或属性–内部类,如果内部类声明为静态的,造成编译顺序冲突。...二、静态内部类: 1、属性和方法可以声明为静态的或者非静态的。 2、实例化静态内部类:比如:B是A的静态内部类,A.B b = new A.B(); 3、内部类只能引用外部类的静态的属性或者方法。...比如B是A的静态内部类,b()是B中的一个静态属性,则可以:A.B.b(); 三、关于java静态方法的相关总结: 一个类的静态方法只能访问静态属性(静态方法是属于类的,而普通方法是属于对象的。)...一个类的静态方法不能够直接调用非静态方法; 如访问控制权限允许,static 属性和方法可以使用类名加“.”方式调用;当然也可以使用实例加“.”方式调用; 静态方法中不存在当前对象,因而不能使用“this...当我们访问调用静态方法的时候(使用类名.静态方法名)这个时候就没有对象创建,所以普通方法是访问不到的。 为了避免这种错误,所以java就不允许在静态方法中访问非静态方法。可以想一下main方法。

    64210

    静态类、静态方法、内部类、匿名内部类、非静态类的一些实践

    正文 首先介绍静态类和非静态类内部类。先普及一个常识:一个文件里可以有多个类,但public的类只能有一个且必须和文件名一样。...但如果这个类是内部类,是可以这样写的:public static class A 静态内部类 vs 内部类 静态内部类:只是为了降低包的深度,方便类的使用,实现高内聚。...静态内部类适用于不依赖于外部类,不用使用外在类的非静态属性和方法,只是为了方便管理类结构而定义。在创建静态内部类的时候,不需要外部类对象的引用。...静态内部类和非静态内部类在创建时有区别 //假设类A有静态内部类B和非静态内部类C,创建B和C的区别为: A a=new A(); //创建B A.B b=new A.B(); //创建C A.C...我们会发现java的设计者在设计内部类的时候用心良苦,学会使用内部类,是掌握java高级编程的一部分,它可以让你更优雅的设计你的程序结构。

    95050

    Java静态内部类

    ,当然final另当别论 2、修饰成员方法                 static修饰成员方法最大的作用,就是可以使用"类名.方法名"的方式操作方法,避免了先要new出对象的繁琐和资源消耗 3、静态代码块...他们和构造函数的运行顺序如下所示:                 静态块总是最先执行的,第二执行的是普通代码块,第三执行的是构造方法。...并且构造块和构造方法在每次new的时候都会创建新的,static方法只会在第一次new时运行 什么是内部类 大部分时候,类被定义成一个独立的程序单元。...在某些情况下,也会把一个类放在另一个类的内部定义,这个定义在其他类内部的类就被称为内部类(有些地方也叫做嵌套类),包含内部类的类也被称为外部类(有些地方也叫做宿主类) 作用??...称为静态内部类(也可称为类内部类),这样的内部类是类级别的,static关键字的作用是把类的成员变成类相关,而不是实例相关 注意:  1.非静态内部类中不允许定义静态成员  2.外部类的静态成员不可以直接使用非静态内部类

    11010

    C++嵌套类与局部类

    这样可以提高类的抽象能力,并且强调了两个类(外围类和嵌套类)之间的主从关系。...如果将嵌套类B的访问权限设置为private,那么只能在外围类内使用。 (3)嵌套类中的成员函数可以在它的类体外定义。...(4)嵌套类可以访问外围类的静态成员变量,即使它的访问权限是私有的,访问方式通过”ClassName::staticVarName”来直接访问。...2.局部类 2.1局部类的定义 在一个函数体内定义的类称为局部类。局部类可以定义自己的数据成员和函数成员。它也是一种作用域受限的类。...(4)局部类中不能定义静态数据成员,因为这种数据成员的初始化无法完成,静态成员数据的定义和初始化必须放在全局作用域。 在实践过程中,局部类很少使用。

    1.4K10

    静态内部类和内部类的区别_内部类不能定义为抽象类

    今天稍微复习一下 静态内部类和 内部类的相关知识,平常很少用 静态内部类 静态内部类,不能访问外部类的非静态成员 静态内部类 不需要创建外部类的对象就可访问(外部类名.内部类 比如new MyMain.Person...public void display() { // System.out.println(num);//不能直接访问外部类的非静态成员 // 静态内部类不能访问外部类的非静态成员(包括非静态变量和非静态方法...(外部类名.this.变量名) 可以定义在方法外(可以有访问修饰符)和方法内(不能有访问修饰符,这个就是匿名内部类了) public class TestInner { private static...正常情况下,你不能在接口内部放置任何代码,但嵌套类可以作为接口的一部分,因为它是static 的。...只是将嵌套类置于接口的命名空间内,这并不违反接口的规则,我试验了一下 ,无论是静态类还是非静态类都可以写在接口里。

    34820

    java内部类和静态内部类区别_静态内部类对象的创建

    在阅读Java Collection Framwork时,LinkedList中有个静态内部类: private static class Node { E item...从之前的学习中,我们应该对静态这个关键字有一定的了解,静态代表它是属于类的,而不是属于实例的。我们可以通过类名直接对静态的玩意儿直接进行引用,但这里的Node静态内部类却是私有的。...为了找到静态内部类和普通内部类的区别,我使用jad工具,自己重写一个类似的Node类,对其进行反编译后发现: 普通内部类版本: private class List$Node { List...每次生成一个非静态的内部类实例,都会有这样的操作。 恰巧Node类只是外部类的一个组件,他不需要引用外部类的任何字段,所以,把它声明成静态的能减小不必要的消耗。...所以,在定义一个内部类时,如果该内部类不需要引用外部类的非静态属性/方法,则应该将它声明为静态的。 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。

    65810
    领券