推广 热搜: 收购ACF  石英加热管,  800  T型槽试验平台  求购ACF  深圳回收ACF  回收ACF  T型槽装配平台  求购日立ACF  T型槽地梁 

静态内部类 、静态内部类什么时候加载

   日期:2023-04-11     浏览:46    评论:0    
核心提示:静态内部类和非静态内部类的区别静态内部类和非静态内部类的区别2017-10-25 程双志卓... 转自 Lib4Kevin修改微信分享:区别: 1、静态内部类可以有静态成员(方法,属性),而非静态

静态内部类和非静态内部类的区别

静态内部类和非静态内部类的区别

2017-10-25 程双志卓... 转自 Lib4Kevin

修改

微信分享:

区别:

1、静态内部类可以有静态成员(方法,属性),而非静态内部类则不能有静态成员(方法,属性)。

2、静态内部类只能够访问外部类的静态成员和静态方法,而非静态内部类则可以访问外部类的所有成员(方法,属性)。

3、实例化一个非静态的内部类的方法:

a.先生成一个外部类对象实例

OutClassTest oc1 = new OutClassTest();

b.通过外部类的对象实例生成内部类对象

OutClassTest.InnerClass no_static_inner = oc1.new InnerClass();

4、实例化一个静态内部类的方法:

a.不依赖于外部类的实例,直接实例化内部类对象

OutClassTest.InnerStaticClass inner = new OutClassTest.InnerStaticClass();

5、调用内部静态类的方法或静态变量,通过类名直接调用

OutClassTest.InnerStaticClass.static_value

OutClassTest.InnerStaticClass.getMessage()

静态类和内部类的区别是什么

和普通的类一样,内部类也可以有静态的。不过和非静态内部类相比,区别就在于静态内部类没有了指向外部的引用。这实际上和C++中的嵌套类很相像了,Java内部类与C++嵌套类***的不同就在于是否有指向外部的引用这一点上,当然从设计的角度以及以它一些细节来讲还有区别。

除此之外,在任何非静态内部类中,都不能有静态数据,静态方法或者又一个静态内部类(内部类的嵌套可以不止一层)。不过静态内部类中却可以拥有这一切。

java中静态内部类是怎么定义的?

需要了解2个概念:内部类和静态修饰符static

1)首先,用内部类是因为内部类与所在外部类有一定的关系,往往只有该外部类调用此内部类。所以没有必要专门用一个Java文件存放这个类。

2)静态都是用来修饰类的内部成员的。比如静态方法,静态成员变量,静态常量。它唯一的作用就是随着类的加载(而不是随着对象的产生)而产生,以致可以用类名+静态成员名直接获得。

这样静态内部类就可以理解了,因为这个类没有必要单独存放一个文件,它一般来说只被所在外部类使用。并且它可以直接被用

外部类名+内部类名

获得。

以下举例说明怎么使用:

Student类有个叫School的内部类(非静态)

Student

stu

=

new

Student();

stu.School

sch

=

new

stu.School();

sch就是School的一个对象。

假如School是内部静态类:

Student.School

sch

=

new

Student.School();

静态内部类有什么用?

根据Oracle官方的说法:

从字面上看,一个被称为静态嵌套类,一个被称为内部类。从字面的角度解释是这样的:什么是嵌套?嵌套就是我跟你没关系,自己可以完全独立存在,但是我就想借你的壳用一下,来隐藏一下我自己(真TM猥琐)。什么是内部?内部就是我是你的一部分,我了解你,我知道你的全部,没有你就没有我。(所以内部类对象是以外部类对象存在为前提的)至于具体的使用场景,我就不当翻译工了,有兴趣的直接去 官网 看吧。

静态内部类就是个独立的类。之所以要弄这么个东西,只是起到一个注释的效果,而且这个注释可静态检查。比如有A,B两个类,B有点特殊,虽然可以独立存在,但只被A使用。这时候怎么办?如果把B并入A里,复杂度提高,搞得A违反单一职责。如果B独立,又可能被其他类(比如同一个包下的C)依赖,不符合设计的本意。所以不如将其变成A.B,等于添加个注释,告诉其他类别使用B了,它只跟A玩。非静态的才是真正的内部类,对其外部类有个引用。

Java 静态内部类作用?

1、变值权限修饰作用,在定义内部类的时候,可以在其前面加上一个权限修饰符static。此时这个内部类就变为了静态内部类。

2、在某些特殊的情况下,少了这个静态内部类还真是不行。如在进行代码程序测试的时候,如果在每一个Java源文件中都设置一个主方法(主方法是某个应用程序的入口,必须具有),那么会出现很多额外的代码。

3、最主要的时这段主程序的代码对于Java文件来说,只是一个形式,其本身并不需要这种主方法。但是少了这个主方法又是万万不行的。在这种情况下,就可以将主方法写入到静态内部类中,从而不用为每个Java源文件都设置一个类似的主方法。

这对于代码测试是非常有用的。在一些中大型的应用程序开发中,则是一个常用的技术手段。

扩展资料

例如:

对于两个类,拥有相同的方法:

class People{

run();

}

interface Machine{

run();

}

此时有一个robot类:

class Robot extends People implement Machine.

此时run()不可直接实现。

interface Machine{

void run();

}

class Person{

void run(){

System.out.println("run");

}

}

class Robot extends Person{

private class MachineHeart implements Machine{

public void run(){

System.out.println("heart run");

}

}

public void run(){

System.out.println("Robot run");

}

Machine.getMachine(){returnnew MachineHeart();

}

class Test{

publicstaticvoid main(String[] args){

Robot robot=new Robot();

Machine m=robot.getMachine();

m.run();

robot.run();

}

}

参考资料来源:百度百科-静态内部类

静态内部类的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于静态内部类什么时候加载、静态内部类的信息别忘了在本站进行查找喔。

原文链接:http://www.souke.org/news/show-30586.html,转载和复制请保留此链接。
以上就是关于静态内部类 、静态内部类什么时候加载全部的内容,关注我们,带您了解更多相关内容。
 
标签: 部类 静态 方法
打赏
 
更多>同类资讯
0相关评论

推荐资讯
网站首页  |  VIP套餐介绍  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  SITEMAPS  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报