今天我们分析内部类和静态内部类的区别,首先我们写一个InnerClassTest类,其中有一个内部类InnerClass和静态内部类StaticInnerClass。...倒数5行,StaticInnerClass的innerMethod()报错,显示d() Q:什么是内部类?有什么作用?静态内部类和非静态内部类的区别? 总结 内部类就是定义在另外一个类里面的类。...它隐藏在外部类中,封装性更强,不允许除外部类外的其他类访问它;但它可直接访问外部类的成员。...静态内部类和非静态内部类的区别有: 静态内部类是指被声明为static的内部类,可不依赖外部类实例化;而非静态内部类需要通过生成外部类来间接生成。...静态内部类只能访问外部类的静态成员变量和静态方法,而非静态内部类由于持有对外部类的引用,可以访问外部类的所用成员 参考: 从一道面试题开始说起 枚举、动态代理的原理 java内部类有什么好处?
java内部类作用 为什么在Java中需要内部类?总结一下主要有以下四点: 1.每个内部类都能独立的继承一个接口的实现,所以无论外部类是否已经继承了某个(接口的)实现,对于内部类都没有影响。...3.方便编写事件驱动程序 4.方便编写线程代码 个人觉得第一点是最重要的原因之一,内部类的存在使得Java的多继承机制变得更加完善。...◆Java内部类 一、 含义 ---- 在Java编程语言里,程序是由类(class)构建而成的。在一个类的内部也可以声明类,我们把这样的类叫做内部类。 ?...内部类可以直接访问外部类的字段和方法,即使是用private修饰的,相反的,外部类不能直接访问内部类的成员。...四、 分类 ---- Java内部类可分为成员内部类、局部内部类、匿名内部类、静态内部类。
参考链接: Java注解 Java 注解(Annotation)又称为 Java 标注,是 JDK5.0 引入的一种注释机制。 Java 语言中的类、方法、变量、参数和包等都可以被标注。...这是最常见的,也是java 最早提供的注解。常用的有@see @param @return 等;在编译时进行格式检查。...内置的注解 Java 定义了一套注解,共有 7 个,3 个在 java.lang 中,剩下 4 个在 java.lang.annotation 中。 ...@SuppressWarnings - 指示编译器去忽略注解中声明的警告。 元注解是java API提供的,是用于修饰注解的注解,通常用在注解的定义上。...,所有java类都是Object类的子类,因此所有java对象都具有toString方法。
/* * 内部类 * */ 1 class OutClass{ 2 //定义外部类的成员变量 3 private int x=1; 4 //定义外部类函数 5...{ 10 //定义内部类的变量 11 private int x=2; 12 //定义内部类的函数 13 public void methodInter...=:"+x); 18 //引用内部类变量 19 System.out.println("内部类的x=:"+this.x); 20...//引用外部类变量 21 System.out.println("外部类的x=:"+OutClass.this.x); 22 } 23 } 24 } 25...(); 35 } 36 } 运行结果: 外部类 函数中的x=:3 内部类的x=:2 外部类的x=:1
如果一个事物的内部包含另一个事物,那么这就是一个类的内部包含另一个类; 比如可以比作:"身体和心脏" "汽车和发动机"; 内部类又可以分为: 1、成员内部类 2、局部内部类(匿名内部类) 成员内部类:...成员内部类的定义格式: 修饰符 class 外部类名称{ 修饰符 class 内部类名称{ } } 注意:内用外可以随意使用,外用内,需要内部类的对象; 如下图: 如何使用成员内部类...,两种方式: 1、间接访问:在外部类的方法中,使用内部类,然后在main只调用外部类的方法; 2、直接访问:外部类名称.内部类名称 对象名=new 外部类名称().new 内部类名称(); Body.Heart...) / private 3、局部内部类:什么都不能写 匿名内部类: 如果接口的实现类(父类的子类)只需要使用一次, 那么这种情况下就可以省略该类的定义,用匿名内部类; 格式: 接口名称 对象名=new...; 注意事项: 1、匿名内部类,在创建对象的时候,只能使用唯一的一次; 如果希望多次创建对象,而且类的内容一样的话,匿名就需要使用单独定义的实现类了; 2、匿名对象,在调用方法的时候,只能调用唯一的一次
1.成员内部类 成员内部类是最普通的内部类,它的定义为位于另一个类的内部,形如下面的形式: ? 这样看起来,类Draw像是类Circle的一个成员,Circle称为外部类。...不过要注意的是,当成员内部类拥有和外部类同名的成员变量或者方法时,会发生隐藏现象,即默认情况下访问的是成员内部类的成员。如果要访问外部类的同名成员,需要以下面的形式进行访问: ?...在外部类中如果要访问成员内部类的成员,必须先创建一个成员内部类的对象,再通过指向这个对象的引用来访问: ?...2.局部内部类 局部内部类是定义在一个方法或者一个作用域里面的类,它和成员内部类的区别在于局部内部类的访问仅限于方法内或者该作用域内。 ?...静态内部类是不需要依赖于外部类的,这点和类的静态成员属性有点类似,并且它不能使用外部类的非static成员变量或者方法,这点很好理解,因为在没有外部类的对象的情况下,可以创建静态内部类的对象,如果允许访问外部类的非
内部类的分类 成员内部类,类定义在了成员位置 (类中方法外称为成员位置) 局部内部类,类定义在方法内 成员内部类 :定义在类中方法外的类。...,包括私有成员 创建内部类对象格式: 外部类名.内部类名 对象名 = new 外部类型().new 内部类型(); 内部类仍然是一个独立的类,在编译之后会内部类会被编译成独立的.class文件,但是前面冠以外部类的类名和符号...class 内部类 { // 成员变量 // 成员方法 } } } 匿名内部类 匿名内部类 :是内部类的简化写法。...它的本质是一个 带具体实现的父类或者父接口的匿名的子类对象 匿名内部类必须继承一个父类或者实现一个父接口。...定义一个没有名字的内部类 这个类实现了Swim接口 创建了这个没有名字的类的对象 匿名内部类的使用场景 通常在方法的形式参数是接口或者抽象类时,也可以将匿名内部类作为参数传递。
Java内部类的构造器必须连接到指向其外围类对象的引用(构造内部类必须给它一个外部类对象的引用,内部类依赖于外部类对象),所以在继承内部类的时候,需要在导出类的构造器中手动加入对基类构造器的调用。...因为,在导出类实例化时,并不存在一个外围类对象,以让导出类的实例去连接到它。 所以,我们需要创建一个外围类,然后用一个特定的语法来表明内部类与外围类的关系。...在下例子中,需要给导出类InheritInner一个来自内部类的外围类中的引用。...普通的继承,只需在导出类构造器中加入super();,而内部类则需要外围类对象引用.super(); 1 class WithInner{ 2 class Inner{} 3 } 4 public...WithInner wi = new WithInner(); 10 InheritInner ii = new InheritInner(wi); 11 } 12 } 而进一步,当被继承的内部类只有非默认构造器时应该怎么办呢
在 Java 中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。广泛意义上的内部类一般来说包括这四种:成员内部类、局部内部类、匿名内部类和静态内部类。...2.局部内部类 局部内部类是定义在一个方法或者一个作用域里面的类,它和成员内部类的区别在于局部内部类的访问仅限于方法内或者该作用域内。...(3)作用域仅仅在定义它的方法或者代码块中。 (4)局部内部类访问外部类的成员属性或者方法时,直接访问; (5)外部类访问局部内部类的成员属性或者方法时,通过先创建对象,再访问,且必须要在作用域内。...name:" + inner.name); } } 3.匿名内部类 Java 中可以实现一个类中包含另外一个类,且不需要提供任何的类名直接实例化。...静态内部类是不需要依赖于外部类的,这点和类的静态成员属性有点类似,并且它不能使用外部类的非static成员变量或者方法,这点很好理解,因为在没有外部类的对象的情况下,可以创建静态内部类的对象,如果允许访问外部类的非
下面分别介绍—— 普通内部类 普通情况,或者说最典型的情况,就是一个Java类嵌在另一个Java类中,形成了内、外的格局;外部类就是我们普通的类,内部类也是普通的类,特性都满足Java类的特性,...} } 不过,通常情况下,也不会这样去创建内部类对象,基于Java封装的特性,内部类作为一种封装的体现,通常会对调用者隐藏实现细节,而通过外部类的方法来返回内部类的对象实例。...是的,类也可以是静态的,不过必须是内部类才行。静态内部类,也叫嵌套类,Java中标准类库中就有很多现成的应用,比如整形的包装器中用静态内部类来缓存[-128,127]之间的整数。...从这个方面去想,Java的设计者通过对于代码的编写的优化是比我等菜鸟要高深那么一点点点点。。。。 匿名内部类 继续顾名思义,匿名内部类,就是没有类名的内部类。...追踪Java标准类库的一些源码你会发现,平时常用的容器类、整形包装器等都有大量使用内部类的场景;而平时引入的第三方类库、框架中的源码也有很多使用内部类的。
//外部类.new 创建内部类 class1.inf(); } } 成员内部类是最普通的内部类,它的定义为位于另一个类的内部。...看起来innerClass 像该类的一个成员。该类称为外部类,内部类可以无条件访问外部类。 外部类访问内部类需要创建一个对象。 内部类依附外部类而存在,要创建内部类,先要创建外部类的对象。...二.局部内部类 该类访问仅限于方法内和该作用域内 public class Text2 { int qq = 1397995240; int tel = 151888; public outClass...我们可以将main方法写在静态内部类当中,有一个调试的功能 它不能使用外部类的非static方法 public class Text4 { static int i = 0; static...,这个参数则是外部类的对象 text.super();//调用外部类的方法 只有这样才能为外部类提供对象引用 } }
内部类 可以将一个类的定义放在另一个类的定义内部,这就是内部类; 嵌套类是其封闭类的成员。非静态嵌套类(内部类)可以访问封闭类的其他成员,即使它们被声明为私有的也是如此。...Java 拥有嵌套类有什么作用呢? 这是一种对仅在一个地方使用的类进行逻辑分组的方法:如果一个类仅对另一个类有用,那么将其嵌入该类并将两者保持在一起是合乎逻辑的。...当Java编译器编译某些构造(例如内部类)时,它会创建综合构造。 这些是类,方法,字段以及其他在源代码中没有相应构造的构造。合成构造使Java编译器无需更改JVM就可以实现新的Java语言功能。...但是,合成构造在不同的Java编译器实现中可能有所不同,这意味着.class文件在不同的实现中也可能有所不同。...总结 嵌套类:内部类和静态内部类 内部类属于外部类的成员,必须依赖与外部对象来实现,静态内部类,不依赖,可以自己单独实现。 static 的修饰 变量,类,方法,代码块。 共性全局性。
参考链接: Java中的嵌套类 在Java中我们在一个类的内部再定义一个类,如下所示: class OuterClass { ... ...内部类与静态嵌套类虽然都是嵌套类,但在使用上是有一些区别的。 内部类 比如有如下内部类的定义, class OuterClass { ... ...这样innerObject就可以访问outerObject内的所有成员属性以及方法了。 那如果想直接跳过外围类去初始化内部类会怎么样呢?...静态嵌套类 有些人把静态嵌套类成为静态内部类,其实静态内部类这个称呼不严谨,因为内部类都是非静态的。...综上所述,虽然内部类和静态嵌套类都属于嵌套类,但是二者有本质区别:内部类的实例化对象需要绑定一个外围类的实例化对象,而静态嵌套类的实例化对象不能也无法绑定外围类的实例化对象。
成员内部类 成员内部类 :定义在类中方法外的类。 定义格式: class 外部类 { class 内部类{ } } 在描述事物时,若一个事物内部还包含其他事物,就可以使用内部类这种结构。...外部类要访问内部类的成员,必须要建立内部类的对象。...heart.jump(); } } 输出结果: 心脏在跳动 心脏不跳了 内部类仍然是一个独立的类,在编译之后会内部类会被编译成独立的.class文件,但是前面冠以外部类的类名和符号 。...比如,PersonHeart.class 匿名内部类 匿名内部类 :是内部类的简化写法。它的本质是一个带具体实现的父类或者父接口的 匿名的 子类对象。开发中,最常用到的内部类就是匿名内部类了。...匿名内部类就是做这样的快捷方式。 前提 匿名内部类必须继承一个父类或者实现一个父接口。
在Java中,可以将一个类定义在另一个类里面或者一个方法里边,这样的类称为内部类,广泛意义上的内部类一般包括四种:成员内部类,局部内部类,匿名内部类,静态内部类 。...1.成员内部类 (1)该类像是外部类的一个成员,可以无条件的访问外部类的所有成员属性和成员方法(包括private成员和静态成员); (2)成员内部类拥有与外部类同名的成员变量时,会发生隐藏现象,即默认情况下访问的是成员内部类中的成员...如果要访问外部类中的成员,需要以下形式访问:【外部类.this.成员变量 或 外部类.this.成员方法】; (3)在外部类中如果要访问成员内部类的成员,必须先创建一个成员内部类的对象,再通过指向这个对象的引用来访问...2.局部内部类 (1)局部内部类是定义在一个方法或者一个作用域里面的类,它和成员内部类的区别在于局部内部类的访问仅限于方法内或者该作用域内; (2)局部内部类就像是方法里面的一个局部变量一样,是不能有public...4.内部静态类 (1)静态内部类是不需要依赖于外部类的,这点和类的静态成员属性有点类似; (2)不能使用外部类的非static成员变量或者方法。
Java内部类 内部类简介# ---- Java 一个类中可以嵌套另外一个类,语法格式如下: class OuterClass { // 外部类 // ......侧面说明成员内部类依赖于外部类的优先创建,不然会初始化失败 局部内部类# ---- 定义在一个方法或者一个作用域里面的类,局部内部类的访问仅限于方法内或者该作用域内 class MyClass{...本部分参考JAVA匿名内部类(Anonymous Classes) 静态内部类# ---- 静态内部类是不需要依赖于外部类的,并且它不能使用外部类的非static成员变量或者方法,这个和普通静态方法不能访问非静态方法或变量的原理一样...# ---- 为什么在 Java 中需要内部类?...总结一下主要有以下四点内部类的使用场景和好处: 1.每个内部类都能独立的继承一个接口的实现,所以无论外部类是否已经继承了某个(接口的)实现,对于内部类都没有影响。内部类使得多继承的解决方案变得完整。
内部类的定义格式如下: public class 外部类的名称{ //外部类的成员 public class 内部类的名称{ //内部类的成员 } }...内部类优缺点 使用内部类的优点: 1)实现多重继承; 2)内部类可以很好的实现隐藏:一般的非内部类,是不允许有 private 与protected权限的,但内部类可以 3)减少了类文件编译后的产生的字节码文件的大小...应用场合:每一个外部类对象都需要一个内部类的实例,内部类离不开外部类存在(相当于心脏对人体) 2、成员内部类的特征: 作为外部类的一个成员存在,与外部类的属性、方法并列成员内部类持有外部类的引用,成员内部类中不能定义...3、静态内部类的特征: 静态内部类不会持有外部类的引用,静态内部类可以访问外部的静态变量,如果访问外部类的成员变量必须通过外部类的实例访问 4、Java中只有内部类才可以是静态的 使用格式:Outer.Inner...1、匿名内部类也就是没有名字的内部类,这是java为了方便我们编写程序而设计的一个机制,因为有时候有的内部类只需要创建一个它的对象就可以了,以后再不会用到这个类,这时候使用匿名内部类就比较合适。
内部类一般包括这四种:成员内部类、静态内部类、局部内部类和匿名内部类。 每个内部类都能独立地实现一个接口或者抽象类,所以无论其所属的主类是否已经实现一个接口或者抽象类,对于内部类都没有影响。...如果没有内部类提供的可以继承多个具体的或抽象的类的能力,一些设计与编程问题就很难解决。从这个角度看,内部类采可以实现多重继承的效果。...成员内部类和静态内部类用private/protected/public修饰时,外部访问规则与访问对应外部类的属性/方法的规则一样;局部内部类不能使用访问修饰符修饰;匿名内部类甚至都不用class关键字来定义...//内部类调用对应主类的同名方法 } } } (1)成员内部类对象中不能定义静态变量、静态方法 (2)要创建成员内部类对象,必须要先创建对应外部类的对象 (3)成员内部类引用对应主类的同名属性.../方法 (2)匿名内部类中不能定义构造函数 (3)匿名内部类中引用的外界变量必须为final
想要理解static应用于内部类时的含义,你就必须记住,普通的内部类对象隐含地保存了一个引用,指向创建它的外围类对象。然而,当内部类是static的时,就不是这样了。嵌套类意味着: 1...., 这是由Java语法中"静态方法不能直接访问非静态成员"所限定.注意, 外部类访问内部类的的成员有些特别, 不能直接访问, 但可以通过内部类实例来访问, 这是因为静态嵌套内的所有成员和方法默认为静态的了....同时注意, 内部静态类Person只在类StaticTest 范围内可见, 若在其它类中引用或初始化, 均是错误的....静态内部类可以有静态成员,而非静态内部类则不能有静态成员。 二 . 静态内部类的非静态成员可以访问外部类的静态变量,而不可访问外部类的非静态变量; 三 ....非静态内部类的非静态成员可以访问外部类的非静态变量。 生成一个静态内部类不需要外部类成员:这是静态内部类和成员内部类的区别。
领取专属 10元无门槛券
手把手带您无忧上云