静态成员类型 语法上,静态内部类除了位置放在其他类内部外,它与一个独立的类差别不大,可以有静态变量、静态方法、成员方法、成员变量、构造方法等。...我们也可以看一些在 Java API 中使用静态内部类的例子: ❑ Integer 类内部有一个私有静态内部类 IntegerCache,用于支持整数的自动装箱。...❑ Character 类内部有一个 public 静态内部类 UnicodeBlock,用于表示一个 Unicode block。...局部类往往在方法中定义,但也可以在类的静态初始化程序或实例初始化程序中定义。 因为所有 Java 代码块都在类中,所以局部类都嵌套在外层类中。因此,局部类和成员类有很多共同的特性。...不过,如果类只在某个方法内被使用,使用方法内部类,可以实现更好的封装。 匿名局部类 / 匿名内部类 匿名内部类只能被使用一次,用来创建一个对象。
嵌套类可以分为两种,静态的和非静态的,即静态嵌套类和非静态嵌套类。非静态嵌套类又叫做内部类(Inner Class)。...这样innerObject就可以访问outerObject内的所有成员属性以及方法了。 那如果想直接跳过外围类去初始化内部类会怎么样呢?...静态嵌套类 有些人把静态嵌套类成为静态内部类,其实静态内部类这个称呼不严谨,因为内部类都是非静态的。...由于静态嵌套类没有像内部类那样绑定外部类对象,所以也就不存在静态嵌套类不能访问其外围类的成员这种说法。 ...综上所述,虽然内部类和静态嵌套类都属于嵌套类,但是二者有本质区别:内部类的实例化对象需要绑定一个外围类的实例化对象,而静态嵌套类的实例化对象不能也无法绑定外围类的实例化对象。
尤其是Static 修饰类和修饰对象和变量不一样呢? 定义 1. 内部类 可以将一个类的定义放在另一个类的定义内部,这就是内部类; 嵌套类是其封闭类的成员。...非静态嵌套类(内部类)可以访问封闭类的其他成员,即使它们被声明为私有的也是如此。静态嵌套类无权访问封闭类的其他成员。...静态内部类 再一个普通类里面,给内部类加上static关键字的修饰; 与类方法和变量一样,静态嵌套类与其外部类相关联。...与静态类方法一样,静态嵌套类不能直接引用其封闭类中定义的实例变量或方法:它只能通过对象引用来使用它们。(就和两个普通不同的类之间的使用) 3....总结 嵌套类:内部类和静态内部类 内部类属于外部类的成员,必须依赖与外部对象来实现,静态内部类,不依赖,可以自己单独实现。 static 的修饰 变量,类,方法,代码块。 共性全局性。
class NestedClass { ... } } 复制代码 内部类与静态嵌套类 嵌套类有静态和非静态两种,其中静态的称为静态嵌套类(static nested classes...),非静态的称为内部类(Inner Classes) 一个嵌套类是包含它的外部类的一个成员,内部类能够访问外部类的其他成员,而静态嵌套类没有访问外部类的权限 作为外部类的成员,嵌套类能被声明为private..., public, protected或者包内访问的访问权限。 ...静态嵌套类 静态嵌套类与静态类里面的方法类似,一个静态嵌套类不能直接调用外部类里面的实例变量或者方法,它只能通过对象引用访问他们。 ...,所以内部类自身不能包含任何静态成员变量 (static)。
嵌套类是指被定义在另一个类内部的类。 概念 嵌套类(nested class)是指被定义在另一个类内部的类。嵌套类的存在目的应该只是为外围类(enclosing class)提供服务。...嵌套类有四种: 静态成员类(static member class); 非静态成员类(nonstatic member class); 匿名类(anonymous class); 局部类(local class...除了第一种外,其他三种都被成为内部类(inner class)。静态嵌套类, 就是用static修饰的成员嵌套类。...在任何“可以声明局部变量”的地方,都可以声明局部类。...是四种嵌套类中用的最少的。 局部类不能有访问控制符(private,public,protected修饰),可以是抽象的,也可以定义为final。
代码编译运行环境:VS2012+Debug+Win32 ---- 1.嵌套类 1.1嵌套类的定义 在一个类体中定义的类叫作嵌套类。拥有嵌套类的类叫外围类。...如果将嵌套类B的访问权限设置为private,那么只能在外围类内使用。 (3)嵌套类中的成员函数可以在它的类体外定义。...(4)嵌套类可以访问外围类的静态成员变量,即使它的访问权限是私有的,访问方式通过”ClassName::staticVarName”来直接访问。...2.局部类 2.1局部类的定义 在一个函数体内定义的类称为局部类。局部类可以定义自己的数据成员和函数成员。它也是一种作用域受限的类。...(2)局部类的所有成员函数都必须定义在类体内,因此在结构上不是特别灵活。 (3)在局部类的成员函数中,可以访问上级作用域的所有变量,如函数局部变量、全局变量等。
嵌套类与内部类在java中使用的很广泛,为了避免难以理解,这里用了几个小例子,说明它的用法。 ...嵌套类与内部类的结构如下图 静态嵌套类 静态嵌套类,是一种在类之外声明的嵌套类,由于是静态的,所以不经过初始化,就可以通过类名,直接调用。... 成员内部类,即该类作为另一个类的成员,因此只有引用另一个类,才能创建这个类。... 局部类的声明之作用与某个代码块内,因此如果某个声明的类仅仅被一段程序所使用,其他地方再也用不到,就可以用这种实现方式。...; 26 } 27 } 匿名内部类 在使用new创建对象时,直接在后面创建它的实现类。
参考链接: Java静态嵌套类 一. 什么是嵌套类及内部类? ...可以在一个类的内部定义另一个类, 这种类称为嵌套类(nested classes), 它有两种类型: 静态嵌套类和非静态嵌套类。 ...静态嵌套类使用很少, 最重要的是非静态嵌套类, 也即是被称作为内部类(inner). 嵌套类从JDK1.1开始引入. ...其中inner类又可分为三种: (1) 在一个类(外部类)中直接定义的内部类; (2) 在一个方法(外部类的方法)中定义的内部类; (3) 匿名内部类. ...true : false; /** 系统数字变量 */ public static class SYS_NUMBER { /** token 失效时长 秒 */
1.1.1 什么是嵌套类及内部类? 可以在一个类的内部定义另一个类,这种类称为嵌套类(nested classes),它有两种类型: 静态嵌套类和非静态嵌套类。...若想访问外部类的变量,必须通过其它方法解决,由于这个原因,静态嵌套类使用很少。...注意,外部类访问内部类的的成员有些特别,不能直接访问,但可以通过内部类来访问,这是因为静态嵌套内的所有成员和方法默认为静态的了。...另外,就是要注意,内部类Inner及 InnterTwo只在类Outer的作用域内是可知的,如果类Outer外的任何代码尝试初始化类Inner或使用它,编译就不会通过。...同时,内部类的变量成员只在内部内内部可见,若外部类或同层次的内部类需要访问,需采用示例程序中的方法,不可直接访问内部类的变量。
我们知道如果一个变量是私有的,它应该就不希望别人去访问它。 隐秘的访问方法需要拥有包的可见性,所有攻击代码需要与被攻击类放在同一个包中。...当使用了内部类的时候,编译器做了这样一件事: 它在外围类添加了一个静态方法 static boolean access$0(外部类); 内部类方法将调用这个函数 这个是有风险的,因为任何人都可以通过access...$0方法很容易的读取到外围类的私有域 黑客可以使用十六进制编辑器轻松创建一个用虚拟机指令调用这个函数的类文件。...结论就是: 如果内部类访问了私有数据域,就有可能通过附加在外围类所在的包中的其他类访问它们。 请慎用!
一、什么是嵌套类及内部类 可以在一个类的内部定义另一个类,这种类称为嵌套类(nested classes),它有两种类型:静态嵌套类和非静态嵌套类。...静态嵌套类使用很少,最重要的是非静态嵌套类,也即是被称作为内部类(inner)。嵌套类从JDK1.1开始引入。...若想访问外部类的变量,必须通过其它方法解决,由于这个原因,静态嵌套类使用很少。...3、另外,就是要注意,内部类Inner及InnterTwo只在类Outer的作用域内是可知的,如果类Outer外的任何代码尝试初始化类Inner或使用它,编译就不会通过。...同时,内部类的变量成员只在内部内内部可见,若外部类或同层次的内部类需要访问,需采用示例程序中的方法,不可直接访问内部类的变量。 四、方法内部类 顾名思义,把类放在方法内。
内部类可以分为四种: 成员内部类:和成员变量一个级别 局部内部类:在方法里的内部类(方法域内生效 或者 方法内某一段代码块域内生效) 匿名内部类:基本上属于接口的实现类,一次性使用的场景。...举例子3:静态内部类的创建 /** * * 静态内部类:声明为static的内部类 * 不需要外围类的对象即可以创建嵌套类 * 嵌套类对象不可访问非静态的外围类对象...与普通的内部类还有一个区别:普通内部类的字段与方法,只能放在类的外部层次上,所以普通的内部类不能有static数据和static字段, 也不能包含嵌套类。但是在嵌套类里可以包含所有这些东西。...多重嵌套内部类 内部类还可以继续嵌套内部类。...; InnerClasses 属性表:用于记录内部类和宿主类的关联,是编译器为外围类和内部类生成的InnerClass属性。
Outer 类的一个内部类,所以它可以直接访问 Outer 类的变量和方法。...答案我们还是可以从 class 文件中找到: 当我们给 inner 类加上 static 之后,它就不在持有外部内的引用了。 此时我们又可以得到一个结论了: 静态内部类不持有外部类的引用。...非静态的嵌套类被称为内部类(inner classes)。被声明为静态的嵌套类被称为静态嵌套类(static nested classes)。 看到这句话的时候,我一下就反应过来了。...没有加 static 的嵌套类被称为内部类,从使用上来说,要实例化内部类,必须首先实例化外部类。...加了 static 的嵌套类被称为静态嵌套类,和 Inner 完全就不沾边。
如果你不需要内部类对象与其外围类对象之间有联系,那你可以将内部类声明为static。这通常称为嵌套类(nested class)。...想要理解static应用于内部类时的含义,你就必须记住,普通的内部类对象隐含地保存了一个引用,指向创建它的外围类对象。然而,当内部类是static的时,就不是这样了。嵌套类意味着: 1....嵌套类的对象,并不需要其外围类的对象。 2. 不能从嵌套类的对象中访问非静态的外围类对象。 ..., 不能访问外部类的非静态成员, 这是由Java语法中"静态方法不能直接访问非静态成员"所限定.注意, 外部类访问内部类的的成员有些特别, 不能直接访问, 但可以通过内部类实例来访问, 这是因为静态嵌套内的所有成员和方法默认为静态的了....同时注意, 内部静态类Person只在类StaticTest 范围内可见, 若在其它类中引用或初始化, 均是错误的.
class NestedClass { ... } } 术语:嵌套类分为两种:静态或非静态。嵌套类声明为static称为静态嵌套类。非静态嵌套类都称为内部类。 ...就像外部类的一个成员一样,嵌套类可以声明为private,public,protected,包内私有(回顾外部类只能声明为public或者是包内私有) 为什么使用嵌套类 使用嵌套类,其中有几个令人信服的理由...更可读性,可维护性的代码—在顶级类里嵌套小类,让代码更靠近使用的地方。 静态嵌套类 和类方法,类变量一样,一个静态嵌套类是和它的外部类关联的。...就像静态类方法一样,一个静态嵌套类不能直接引用封装类的实例变量或者方法—它只能通过封装类的引用访问它们。 注意:一个静态嵌套类访问它的封装类(和其他类)的实例成员,就像访问其他顶级类一样。...迭代器用于遍历一个数据结果,典型的是判断是否到了最后一个元素,检索当前元素,移动到下一个元素。
这里的Java.util.Map.Entry可以认为是 Map 类的 Entry。 2. 嵌套接口一般使用逻辑 在学习嵌套接口之前,可以参照嵌套类。 嵌套类可以视为在外部类中声明的常规方法。...由于可以将方法声明为静态或非静态,因此类似的嵌套类可以是静态和非静态的。 静态类就像静态方法一样,它只能通过对象访问外部类成员(非静态)。 非静态类可以访问外部类的任何成员。...嵌套接口为何默认为 static 在 Java 中,当 static 关键字用于修饰域以及方法时,其主要用于强调与特定的实例无关的特性。但是 static 用于修饰接口以及类时,其含义还是如此吗?...所以 static 关键字用于方法、域与作用于接口和类有着不同的含义。当 static 作用于内部类时,用于强调内部类的实现细节相对于外部类独立,比如说想要创建嵌套类对象并不需要外部类的对象。...static 就是用于强调接口的这个特点。 可以认为嵌套接口和外部接口区别并不大,嵌套接口主要提供了一层内外的逻辑关系:内作为外的一共功能组成,且并不希望直接暴露给外部。
2、方法内部类 编译之后会生成两个class文件:OuterClass.class和OuterClass$1InnerClass.class 只能在定义该内部类的方法内实例化,方法内部类对象不能使用该内部类所在方法的非...但该方法结束后,在方法内创建的内部类对象可能仍然存在于堆中 class OuterClass { public void doSomething(){ class Inner{...; } }; fish.swim(); } } 4、静态内部类 静态嵌套类,并没有对实例的共享关系,仅仅是代码块在外部类内部...静态的含义是该内部类可以像其他静态成员一样,没有外部类对象时,也能够访问它 静态嵌套类仅能访问外部类的静态成员和方法 在静态方法中定义的内部类也是静态嵌套类,这时候不能在类前面加static关键字 class...内部类是外部类的一个成员,因此内部类可以自由地访问外部类的成员变量,无论是否是private的 6、内部类声明成静态的,就不能随便的访问外部类的成员变量了,此时内部类只能访问外部类的静态成员变量 Java
Java 内部类分为: 1)成员内部类 2)静态嵌套类 3)方法内部类 4)匿名内部类 内部类的共性 1、内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的.class文件,但是前面冠以外部类的类名和...方法内部类 把类放在方法内 package cn.internal; /** * * @author: 房上的猫 * * @time: 下午9:08:33 * * @博客地址: https...但是该方法结束之后,在方法内创建的内部类对象可能仍然存在于堆中!例如,如果对它的引用被传递到其他某些代码,并存储在一个成员变量内。...从技术上讲,静态嵌套类不属于内部类。因为内部类与外部类共享一种特殊关系,更确切地说是对实例的共享关系。而静态嵌套类则没有上述关系。它只是位置在另一个类的内部,因此也被称为顶级嵌套类。...静态的含义是该内部类可以像其他静态成员一样,没有外部类对象时,也能够访问它。静态嵌套类仅能访问外部类的静态成员和方法。
与局部变量类似,局部内部类不能有访问说明符,因为它不是外围类的一部分,但是它可以访问当前代码块内的常量,和此外围类所有的成员。...(即方法内的变量),但是变量必须是final的 System.out.println(j); //System.out.println(i); //如果内部类中有与外部类同名的变量,直接用变量名访问的是内部类的变量...Outer out = new Outer(); out.f(3); } } C:静态内部类(嵌套类):(注意:前两种内部类与变量类似,所以可以对照参考变量)...这通常称为嵌套类(nested class)。想要理解static应用于内部类时的含义,你就必须记住,普通的内部类对象隐含地保存了一个引用,指向创建它的外围类对象。...然而,当内部类是static的时,就不是这样了。嵌套类意味着: 1. 要创建嵌套类的对象,并不需要其外围类的对象。 2. 不能从嵌套类的对象中访问非静态的外围类对象。
内部类 内部类(nested classes),面向对象程序设计中,可以在一个类的内部定义另一个类。嵌套类分为两种,即静态嵌套类和非静态嵌套类。...内部类几乎可以处于一个类内部任何位置,可以与实例变量处于同一级,或处于方法之内,甚至是一个表达式的一部分。 注意:以上是从百度上copy的,因为现在很多人都认为内部类包含了静态嵌套类。...静态嵌套类 关键字static可以修饰成员变量、方法、代码块,其实它还可以修饰内部类,使用static修饰的内部类我们称之为静态嵌套类。静态嵌套类与非静态嵌套类之间存在一个最大的区别。...我们知道非静态嵌套类在编译完成之后会隐含地保存着一个引用,该引用是指向创建它的外围内,但是静态嵌套类却没有。没有这个引用就意味着。 1....静态嵌套类的创建是不需要依赖于外围类,可以直接创建 2. 静态嵌套类不可以使用任何外围类的非static成员变量和方法,而内部类(即为非静态嵌套类)则都可以。
领取专属 10元无门槛券
手把手带您无忧上云