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

用于实例化内部类的奇怪语法

在编程中,实例化内部类是一种创建对象的方法。内部类是在另一个类中定义的类。实例化内部类的语法有些奇怪,因为它需要同时创建外部类和内部类的实例。以下是实例化内部类的一般语法:

代码语言:java
复制
OuterClass.InnerClass innerObject = outerObject.new InnerClass();

在这个语法中,OuterClass 是外部类的名称,InnerClass 是内部类的名称,innerObject 是内部类的实例。outerObject 是外部类的实例。

例如,假设我们有一个名为 OuterClass 的外部类和一个名为 InnerClass 的内部类,我们可以使用以下代码实例化内部类:

代码语言:java
复制
OuterClass outerObject = new OuterClass();
OuterClass.InnerClass innerObject = outerObject.new InnerClass();

需要注意的是,内部类可以是静态的或非静态的。如果内部类是静态的,则可以使用以下语法直接实例化:

代码语言:java
复制
OuterClass.InnerClass innerObject = new OuterClass.InnerClass();

在这种情况下,不需要创建外部类的实例。

总之,实例化内部类需要使用特殊的语法,因为内部类是在外部类中定义的。这种语法可能会使初学者感到困惑,但是一旦掌握了这个语法,就可以更好地理解和使用内部类。

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

相关·内容

java 静态内部类 实例_内部类及静态内部类实例「建议收藏」

部类实例 如果内部类未声明为static,在实例化时首先需要new一个外部类对象。并通过p.new Inner()方式new 内部类,表明这个内部类指向该外部类。...内部类class类型为:Parent.Inner,而不是p.Inner,这个需要和new方式区分开。...); } } class Parent { class Inner { public void print() { System.out.println(“xxx”); } } } 静态内部类实例...静态内部类与普通内部类区别在于,静态内部类对象是不指向与某个具体部类对象,所以在创建对象时不需要创建外部类对象。...并且在new时候是通过 new Parent.Inner()方式,而不是Parent.new Inner()。不要和内部类实例搞混了。

82240

CA1812:避免未实例部类

值 规则 ID CA1812 类别 “性能” 修复是中断修复还是非中断修复 非中断 原因 永远不会实例内部(程序集级别)类型。...此规则不会检查以下类型: 值类型 抽象类型 枚举 委托 编译器发出数组类型 无法实例且仅定义 static(在 Visual Basic 中为 Shared)方法类型。...如果将 System.Runtime.CompilerServices.InternalsVisibleToAttribute 应用于正在分析程序集,那么此规则不会标记标记为 internal(在 Visual...如果类型仅包含 static 方法,请将以下内容其中之一添加到类型,以阻止编译器生成默认公共实例构造函数: 适用于 C# 类型 static 修饰符面向 .NET Framework 2.0 或更高版本...面向 .NET Framework 版本 1.0 和 1.1 类型专用构造函数。 何时禁止显示警告 禁止显示此规则警告是安全

45900
  • Java内部类总结 (吐血之作)

    ,在内部类中可以直接访问外部类实例变量 System.out.println(out_i); //可以访问外部类局部变量(即方法变量),但是变量必须是final System.out.println...: return new Contents() { private int i = 11; public int value() { return i; } };   这种奇怪语法指的是...,但通过实例初始,你就能够达到为匿名内部类“制作”一个构造器效果。...因为i 被传递给匿名类基类构造器,它并不会在匿名类内部被直接使用。下例是带实例初始“parcel”形式。注意dest()参数必须是final,因为它们是在匿名类被使用。...所以对于匿名类而言,实例初始实际效果就是构造器。当然它受到了限制:你不能重载实例初始,所以你只能有一个构造器。

    60610

    Java--多态性之内部类和匿名类

    若想在除外部类非 static 方法内部之外任何地方生成内部类一个对象,必须将那个对象类型设为“外部类名.内部类名”,而且创建内部类实例必须先有一个外部类实例。...如果想创建某个内部类对象,必须在new表达式中提供对其他外部类引用,这需要.new语法,例如: public static void main(String[] args){ Outer outer...: 上面的情况是使用内部类经典情况,但内部类还有其他用法: 在一个方法内定义类 在方法一个作用域内定义类 一个匿名类,用于实现一个接口 一个匿名类,用于扩展拥有非默认构建器一个类 一个匿名类...,用于执行字段初始 一个匿名类,通过实例初始进行构建(匿名内部类不可拥有构建器) 采用方法或作用域中部类有两个原因: 我们准备实现某种形式接口,使自己能创建和返回一个句柄 要解决一个复杂问题...这种奇怪语法要表达意思是:“创建从 Contents 衍生出来匿名类一个对象”。由 new 表达式返回 句柄会自动上溯造型成一个Contents 句柄。

    62460

    【Java 基础篇】深入理解 Java 内部类:嵌套在嵌套中编程奇妙世界

    回调函数和事件处理: 内部类用于实现回调函数或事件处理,例如按钮点击事件处理。 实现接口: 内部类可以实现外部类所定义接口,从而让外部类更加清晰,同时也使代码更加模块。...回调函数和事件处理: 成员内部类用于实现回调函数或事件处理,例如按钮点击事件处理。 实现接口: 成员内部类可以实现外部类所定义接口,从而让外部类更加清晰,同时也使代码更加模块。...LocalInner localInner = new LocalInner(); } } 在上述代码中,LocalInner 是 outerMethod 方法局部内部类,...匿名内部类(Anonymous Inner Class) 匿名内部类定义 匿名内部类是没有名字部类,通常用于创建临时子类实例。...匿名内部类基本语法如下: public class Outer { public void someMethod() { // 创建一个匿名内部类实例 InterfaceName

    66820

    Java匹马行天下之JavaSE核心技术——面向对象

    1、函数 构造函数: 语法: [访问修饰符] 类名(){ } 作用: 构造函数,一般是用于为成员属性赋初始值; 注意: 当类中没有显式构造方法,实例该类对象时,程序会自动创建一个公开无参构造方法...语法: public class Out {       //成员内部类       public class Inner{       } } 实例化成员内部类:         //先实例化外部类...语法: public class Out {     //静态内部类     public static class Inner{     } } 实例静态内部对象: Out.Inner inner...(o.b);         }     } } 局部内部类 声明在方法体或代码块,作用域范围在方法体或代码块。...声明位置同局部内部类一样,前提条件:必须继承一个类或实现一个接口,匿名内部类声明和实例对象是同时进行; 一般使用于获得抽象类或接口对象; 语法: 父类名/接口名  对象名 =  new  父类名/

    46530

    Java匹马行天下之JavaSE核心技术——面向对象

    方法: 构造方法  语法:              [访问修饰符]  类名(){ } 注意: 当类中没有显式构造方法,实例该类对象时,程序会自动创建一个公开无参构造方法...接口 语法: public interface ITest { } 规则: 接口使用interface关键字修饰; 接口是一个完全抽象抽象类; 接口中没有构造方法; 接口不能被实例对象...语法: public class Out { //成员内部类 public class Inner{ } } 实例化成员内部类: //先实例化外部类 Out o = new Out...语法: public class Out { //静态内部类 public static class Inner{ } } 实例静态内部对象: Out.Inner inner = new...(); }    匿名内部类 声明位置同局部内部类一样,前提条件:必须继承一个类或实现一个接口,匿名内部类声明和实例对象是同时进行; 一般使用于获得抽象类或接口对象; 语法: 父类名

    80130

    Java编程思想第五版(On Java8)(十一)-内部类

    最初,内部类可能看起来有些奇怪,而且要花些时间才能在设计中轻松地使用它们。对内部类需求并非总是很明显,但是在描述完内部类基本语法与语义之后,"Why inner classes?"...一个匿名类,它通过实例初始实现构造(匿名内部类不可能有构造器)。 第一个例子展示了在方法作用域(而不是在其他类作用域)创建一个完整类。...在实例初始操作内部,可以看到有一段代码,它们不能作为字段初始动作一部分来执行(就是 if 语句)。所以对于匿名类而言,实例初始实际效果就是构造器。...当然它受到了限制-你不能重载实例初始方法,所以你仅有一个这样构造器。 匿名内部类与正规继承相比有些受限,因为匿名内部类既可以扩展类,也可以实现接口,但是不能两者兼备。...唯一理由是,我们需要一个已命名构造器,或者需要重载构造器,而匿名内部类只能用于实例初始。 所以使用局部内部类而不使用匿名内部类另一个理由就是,需要不止一个该内部类对象。

    1.1K61

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

    Static Nested Class是被声明为静态(static)部类,它可以不依赖于外部类实例实例。而通常部类需要在外部类实例后才能实例。...想要理解static应用于部类含义,你就必须记住,普通部类对象隐含地保存了一个引用,指向创建它外围类对象。然而,当内部类是static时,就不是这样了。嵌套类意味着:  1....}    }    public void printInfo(){      Person person = new Person(); // 外部类访问内部类非静态成员:实例部类即可  person.display..., 这是由Java语法中"静态方法不能直接访问非静态成员"所限定.注意, 外部类访问内部类成员有些特别, 不能直接访问, 但可以通过内部类实例来访问, 这是因为静态嵌套所有成员和方法默认为静态了....同时注意, 内部静态类Person只在类StaticTest 范围可见, 若在其它类中引用或初始, 均是错误.

    97010

    C++从入门到精通——内部类和匿名类

    部类可以在外部类成员函数中访问外部类私有成员,这样可以方便地实现封装和隐藏特性。内部类还可以用于实现回调函数和迭代器等功能。...匿名类是在声明同时进行实例,它可以作为对象在堆栈上分配并使用,也可以作为类成员使用。与匿名类不同,C++ 匿名类可以定义自己方法和成员变量。...匿名类声明和实例通常在代码块内部完成,使用语法类似于在堆栈上创建对象。匿名类定义和实例通常在花括号,与代码块语法类似。...可以实例化为对象:匿名类可以在声明时进行实例,就像在堆栈上创建一个对象一样。实例后,可以使用该对象调用匿名类成员方法或访问成员变量。...可以接受初始参数:匿名类可以接受初始参数,在实例化时传递给构造函数。可以使用 Lambda 表达式来定义匿名类,并在 Lambda 表达式内部使用捕获列表来传递初始参数。

    24910

    java嵌套类

    就像外部类一个成员一样,嵌套类可以声明为private,public,protected,包私有(回顾外部类只能声明为public或者是包私有)   为什么使用嵌套类   使用嵌套类,其中有几个令人信服理由...下图说明了这个想法:   一个内部类实例存在于外部类实例   实例部类之前,你首先要实例化外部类。...然后基于外部类对象创建内部类对象,语法是:   还有,有两种特别的内部类,局部类和匿名类(也可以成为匿名内部类)。这两者会在后面讨论。   内部类例子   为了演示内部类使用,让我们思考一个数组。...迭代器用于遍历一个数据结果,典型是判断是否到了最后一个元素,检索当前元素,移动到下一个元素。...在main方法里实例DataStructure对象,使用它填充数组arrayOfInts为一系列整数(0, 1, 2, 3, etc.)

    1.2K20

    Java基础重构-面向对象

    抽象类·不能被实例,无法使用 new 关键字来调用 抽象类构造器创建抽象类实例。 抽象类可以包含成员变量,方法(普通方法和抽象方法都可以),构造器,初始块,内部类(接口,枚举)5种成分。...抽象类构造器不能用于创建实例,主要是用于被其子类调用。...接口和抽象类具有如下相同特征: 接口和抽象类都不能被实例,他们都位于继承树顶端,用于被其他类实现和继承。...接口i不包含构造器,抽象类里可以包含构造器,抽象类里构造器并不是用于创建对象,而是让其子类调用这些构造器来完成属于抽象类初始操作。 接口里不能包含初始块,但抽象类则完全可以包含初始块。...因为粗体字括号部分实际上是匿名内部类类体部分,所以这个部分代码语法与匿名内部类语法大致相似,只是它依然是枚举类匿名内部类。 枚举类不是用 final 修饰吗,为什么还可以派生子类?

    64830

    Java-“this”和“类名.this”以及“类名.class”区分和详解

    引言: 对于以上三个语法结构区分,需要先理解Class类 所有对象类以及调用了静态方法类都需要在对象创建之前在JVM虚拟机中加载,加载内容被称为“类对象”,每个类类对象是唯一且是不可变。...只不过数组对象名字比较奇怪 一般某个类Class对象被载入内存,它就用来创建这个类所有对象。...newInstance() 此方法用于返回一个类对象实例实例构造只能无参构造器,且为弱类型(即Object类型)。...总之,关键字this用于指代当前对象。因此,类内部可以使用this作为前缀引用实例域以及方法(包括构造方法); ---- 3....类名.this : 类名.this一般用于部类调用外部类对象时使用,因为内部类使用this.调用是内部类域和方法,为了加以区别,所以使用类名.this来加以区分。

    7.1K40

    读书笔记 | 类使用 | Effective Java 3

    扩展时候需要修改源文件,新增 Shape 标签类型和面积计算 case 分支逻辑 初始错误的话,final 类型后续无法修改,必须通过外部入参强校验才能保证业务逻辑正确性 图形标签类型多了之后...匿名类中可以包含东西有:字段、方法、实例初始代码、本地类 匿名类中不可以包含东西有: // 匿名类示例 public class Test { public void test() {...public class Test { { class AA{}//块部类 } public Test(){ class AA{}//构造器部类...} public void test(){ class AA{}//方法部类 } } //注意到了吧,可以同名,编译后,形成诸如:外部类名称+$+同名顺序+...如果嵌套类实例可以与其宿主类实例隔离存在,那么嵌套类必须是静态成员类:不可能在没有宿主实例情况下创建非静态成员类实例

    37520

    Java基础系列(二十九):基本内部类

    可能有些同学会感到奇怪,为什么内部类可以拿到外围类对象呢?...outer = t; } 当我们在start方法中实例化了这个内部类时候,编译器就会去把外围类this引用传递给当前部类: //这时编译器所做工作,这里只是一个伪代码,并非实际代码就是如此 ActionListener...反过来,可以采用下列语法格式去编写实例语句可能会更为直观,易读: ActionListener listener = this.new TestListener(); 在这里,最新构造TestListener...listener = otherObj.new TestListener(); 这里需要注意一点,我们可以在内部类中声明一个静态域,但是这个静态域必须是final关键词来修饰,因为我们希望一个静态域只有一个实例...,不过对于每个外部对象,都分别会有一个单独部类实例,如果这个域不是final,那么它就不是唯一

    35330

    C++ 程序员 Java 指南

    用于字符串连接时候会自动转换成「true」和「false」。...当系统加载类或创建该类实例时,系统自动为成员变量分配内存空间,并在分配内存空间后,自动为成员变量指定初始值。 局部变量定义后,必须经过显式初始后才能使用,系统不会为局部变量执行初始。...instanceof 运算符前一个操作数通常是一个引用类型变量,后一个操作数通常是一个类(也可以是接口,可以把接口理解成一种特殊类),它用于判断前面的对象是否是后面的类,或者其子类、实现类实例。...判断是否是同一个类实例时应使用 obj1.getClass()==obj2.getClass()。 初始块和声明属性时指定初始值,这些按源程序中排列顺序执行。 java 中只有值传递。...从外部类外创建内部非静态类语法:OuterClass.InnerClass varName = OuterInstance.new InnerConstructor(); 从外部类外创建内部静态类语法

    43830

    C++ 程序员 Java 指南

    用于字符串连接时候会自动转换成「true」和「false」。...数组声明方式推荐 int[] nArray = new int[4]; 或者 int[] nArray = {1,2,3};,第一种称为动态初始,第二种称为静态初始。...instanceof 运算符前一个操作数通常是一个引用类型变量,后一个操作数通常是一个类(也可以是接口,可以把接口理解成一种特殊类),它用于判断前面的对象是否是后面的类,或者其子类、实现类实例。...判断是否是同一个类实例时应使用 obj1.getClass()==obj2.getClass()。 初始块和声明属性时指定初始值,这些按源程序中排列顺序执行。...从外部类外创建内部非静态类语法:OuterClass.InnerClass varName = OuterInstance.new InnerConstructor(); 从外部类外创建内部静态类语法

    60110

    Java内部类-成员内部类、局部内部类、匿名内部类、静态内部类

    2.局部内部类 局部内部类是定义在一个方法或者一个作用域里面的类,它和成员内部类区别在于局部内部类访问仅限于方法或者该作用域。...(3)作用域仅仅在定义它方法或者代码块中。 (4)局部内部类访问外部类成员属性或者方法时,直接访问; (5)外部类访问局部内部类成员属性或者方法时,通过先创建对象,再访问,且必须要在作用域。...name:" + inner.name); } } 3.匿名内部类 Java 中可以实现一个类中包含另外一个类,且不需要提供任何类名直接实例。...匿名内部类是唯一一种没有构造器类。正因为其没有构造器,所以匿名内部类使用范围非常有限,大部分匿名内部类用于接口回调。 匿名内部类在编译时候由系统自动起名为 Outer$1.class。...匿名内部类主要用于继承其他类或是实现接口,并不需要增加额外方法,只是对继承方法实现或是重写。 匿名内部类使用一次,就不再使用。

    1.1K10

    Kotlin中对象表达式和对象声明具体使用

    但对象表达式可以定义初始块,可以通过初始块来完成构造器需要完成事情。 对象表达式可以包含内部类,不能包含嵌套类。...匿名内部类增强了三个方面: 对象表达式可指定多个父类型 Kotlin编译器能更准确地识别局部范围private对象表达式类型。...对象表达式可访问或修改其所在范围局部变量 二、对象声明和单例模式 对象声明语法格式如下: object ObjectName [: 0~N个父类型]{ //对象表达式类体部分 } 对象声明与对象表达式语法很相似...对象声明专门用于实现单例模式,对象声明所定义对象也就是该类唯一实例,程序可通过对象声明名称直接访问该类唯一实例。...,但只是模拟,伴生对象成员依然是伴生对象本身实例成员,并不属于伴生对象所在部类

    1.2K31
    领券