class中static,java静态static
在一个类中创建另一个类,称为成员内部类。这个成员内部类可以是静态的(用static关键字修饰)或非静态的。因为静态内部类在定义和使用时有各种限制。所以实际工作中用的不多。
在开发过程中,最常用的内部类是内部类的非静态成员。但是,在某些情况下,静态内部类也可以发挥其独特的作用。
首先,使用静态内部类的目的。
定义内部类时,可以在它前面添加一个权限修饰符static。此时,这个内部类变成了一个静态内部类。但由于各种原因,如使用限制等因素(具体使用限制,笔者将在下文内容中阐述),在很多实际工作中并未使用。但不代表它一文不值。在一些特殊的情况下,没有这个静态的内部类真的是不可能的。举个例子,在测试一个代码程序的时候,如果在每个Java源文件中都设置了一个main方法(main方法是一个应用的入口,必须要有),那么就会出现很多多余的代码。而且最重要的是,这个主程序的代码只是Java文件的一种形式,并不需要这个main方法。但是没有这个主要方法,是绝对不行的。在这种情况下,可以将main方法写入静态内部类,因此没有必要为每个Java源文件设置类似的main方法。这对代码测试非常有用。它是一些中大型应用程序开发中常用的技术手段。正因如此,虽然这个静态内部类不常用,但程序开发人员必须掌握它。也许在关键时刻,它还能发挥巨大的作用。
二。对使用静态内部类的限制。
将内部类定义为静态类和将其他类定义为静态类基本相同,引用规则也基本相同。但是在细节上还是有很大的差异。具体来说,主要有以下几个地方应该引起程序开发人员的注意。
是静态成员的定义(包括静态变量和静态成员)。通常,如果内部类未定义为静态内部类,则在定义成员变量或成员方法时,不能将其定义为静态成员变量或静态成员方法。也就是说,静态成员不能在非静态内部类中声明。现在,如果在一个学生类中定义了一个内部类年龄,如果这个类没有用static关键字修饰,即没有定义为静态类,那么就不允许在这个内部类中用static关键字修饰成员方法或成员变量。编译时不会通过。因此,程序开发人员需要注意的是,只有将内部类修改为静态类,才能在该类中定义静态成员变量和成员方法。这是所有静态内部类都具有的特征。也是因为这个原因,有时候很多工作没有这个静态的内部类是做不了的。或者说需要绕一大圈才能实现某个用户的需求。这也是静态内部类存在的重要原因。
第二,对成员的引用有很大的限制。一般的非静态内部类可以自由访问外部类中的成员变量和成员方法。即使这些成员方法被修饰成私有的(私有成员变量或方法),它们的非静态内部类也是可以随意访问的。是非静态内部类的特权。因为在其他类中,不能访问定义为private的成员变量或正则方法。但是如果内部类定义为静态,那么silver使用外部类的成员方法或者成员变量时会有很多限制。例如,不能从静态内部类的对象访问外部类的非静态成员(包括成员变量和成员方法)。这是什么意思?如果在外部类中定义了两个变量,一个是非静态变量,另一个是静态变量。然后,在静态内部类中,只能引用外部类中的静态变量,而不能访问非静态变量,无论是在成员方法内部还是其他地方。在静态内部类中,可以定义静态方法(只有静态内部类才能定义静态方法),在静态方法中可以引用外部类的成员。但是,无论在哪里引用内部类,都有一个共同点,那就是只能引用外部类中的静态成员方法或成员变量。对于那些非静态成员变量和成员方法,不能在静态内部类中访问。这是静态内部类的最大使用限制。而普通的非静态内部类则没有这种限制。正是因为这个原因,静态内部类只在一些特定的情况下使用。它的应用范围远不如非静态内部类广泛。
第三,创建静态内部类时,不需要将静态内部类的实例绑定到外部类的实例。
通常,在类中创建成员内部类时,有一个强制规则,即内部类的实例必须绑定到外部类的实例。也就是说,在创建内部类之前,应该在外部类中使用new关键字来创建内部类的对象。在这种情况下,如果从外部类初始化内部类对象,则内部类对象将被绑定到外部类对象。也就是说,普通非静态内部类的对象是依附于外部类对象的。然而,如果成员开发人员创建静态内部类,那么这是另一回事。通常,当程序员定义静态内部类时,他们不需要定义绑定到外部类的实例。也就是说,在一个外部类中定义一个静态内部类,并不需要使用关键字new来创建内部类的实例。也就是说,当你创建一个静态类的内部对象时,你不需要它的外部类的对象。为什么会这样呢?一般程序开发人员不需要了解那么深,只要记住有这个规则就行了。在定义静态内部类时,不要犯画蛇添足的错误。
从上面的分析我们可以看出,静态内部类和非静态内部类有很大的不同。一般程序开发人员可以理解,无定形的内部类对象隐式地持有外部类中的引用,指向创建它的外部类对象。不管这种理解如何,程序开发人员需要记住静态内部类和非静态内部类之间的区别。比如是否可以创建静态成员方法和成员变量(静态内部类可以创建静态成员而不是静态内部类),访问外部类成员的限制(静态内部类只能访问静态成员变量和外部类中的成员方法而不是静态内部类,即可以访问静态或非静态外部类成员方法和成员变量)。这两个区别是静态内部类和非静态外部类最大的区别,也是静态内部类存在的原因。了解了这种差异,程序开发人员还需要知道何时使用静态内部类。比如在测试一个程序的时候,为了避免在每个Java源文件中写main方法的代码,可以把main方法写到静态内部类中,减少代码编写量,让代码更加简洁。
总之,静态内部类是Java语言中非常特殊的一个类,与普通的静态类和非静态内部类有很大的不同。作为程序开发人员,你必须知道它们之间的区别,并在实际工作中的适当位置采用适当的类。不过一般来说,静态内部类出现的频率不是很高。但在某些情况下,如果没有这个内部静态类,可能会事倍功半。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。