首页编程java编程java中什么是内部类?Java 静态内部类作用

java中什么是内部类?Java 静态内部类作用

编程之家2023-10-1491次浏览

老铁们,大家好,相信还有很多朋友对于java中什么是内部类和Java 静态内部类作用的相关问题不太懂,没关系,今天就由我来为大家分享分享java中什么是内部类以及Java 静态内部类作用的问题,文章篇幅可能偏长,希望可以帮助到大家,下面一起来看看吧!

java中什么是内部类?Java 静态内部类作用

java里面的内部类和外部类是什么_

外部类:

最普通的,我们平时见到的那种类,就是在一个后缀为.java的文件中,直接定义的类

内部类:

java中什么是内部类?Java 静态内部类作用

内部类,顾名思义,就是包含在外部类中的类,就叫做内部类。内部类有两种,一种是静态内部类,一种是非静态内部类。

静态内部类和非静态内部类之间的区别主要如下:

1、内部原理的区别:

java中什么是内部类?Java 静态内部类作用

静态内部类是属于外部类的类成员,是一种静态的成员,是属于类的,就有点类似于private static Singleton instance= null;非静态内部类,是属于外部类的实例对象的一个实例成员,静态类则是属于所有外部共有的,也就是说,每个非静态内部类,不是属于外部类的,是属于外部类的每一个实例的,创建非静态内部类的实例以后,非静态内部类实例,是必须跟一个外部类的实例进行关联和有寄存关系的。

2、创建方式的区别:

创建静态内部类的实例的时候,只要直接使用“外部类.内部类()”的方式,就可以,比如School.Teacher();创建非静态内部类的实例的时候,必须要先创建一个外部类的实例,然后通过外部类的实例,再来创建内部类的实例,new School().Teacher()

通常来说,我们一般都会为了方便,会选择使用静态内部类。

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();

}

}

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

java中内部类的概念

简单的说,内部(inner)类指那些类定义代码被置于其它类定义中的类;而对于一般的、类定义代码不嵌套在其它类定义中的类,称为顶层(top-level)类。对于一个内部类,包含其定义代码的类称为它的外部(outer)类。 1 Static member class(静态成员类)类声明中包含“static”关键字的内部类。如以下示例代码, Inner1/Inner2/Inner3/Inner4就是Outer的四个静态成员类。静态成员类的使用方式与一般顶层类的使用方式基本相同。

1内部类的嵌套可以理解成类的链关系,在构造一个内部类(非static)的实例的时候,会将直接外层类的实例

作为参数传进构造函数,而外层类的实例也是用其外层类的实例构造,所以是一种链状关系,内部的类可以使用所有

外层的类的实例,而外层的类不能使用内层的类,应用a.this(最外层类实例),a.b.c.this(链中某个外层的实例)。

class TheOuter{

class kk{

class gg{

int tt= 100;

}

}

class aa{

class bb{

int jj= 10;

class cc{

{ int ff= TheOuter.aa.bb.this.jj;

//无法直接访问到gg不在链关系内

System.out.println(ff);

}

}

}

}

}

2创建一个内部类 new aa().new bb().new()cc实际上是调用外层类实例.new本层构造函数()

如果内部类是static的不需要外层类的实例多个static嵌套的内部类的实例 aa.bb.cc test= new aa.bb.cc();

3

class a0{

class b0{

}

}

class vvv{

class ff extends a0.b0{// ff这里不是内部类也行

ff(a0 kk){

kk.super();

}

}

}

继承自内部类要调用父类的外层类的super()

4

class dd{

void print(){

System.out.println("dd.println is there");

}

class kk{

kk(int i){}

class cc{

void pp(){

System.out.println("****");

}

void ddpp(){

dd.this.print();

}

}

}

}

class aa{

public static void main(String agrs[]){

dd.kk.cc test= new dd().new kk(10).new cc();

test.ddpp();

}

}

在类内部可以是使用外层类,但是如果生成一个实例的句柄就没有提供访问上层类的功能。

5 this是指本类的实例

6缺省的new

class cc{

{

new test();

}

class kk{

{

System.out.println("there kk");

}

}

class test{

{

new kk();

}

class kk{

{

System.out.println("there test_kk");

}

}

}

}

可以直接使用new,new的范围可以是之际外层.this.new和this.new但是如果内层与外层出现同名类以内部优先

7

//当有链关系的时候要注意类不要重名

class vv{

class bb{}//!

class kk{

//class vv{}这样就会出错

class bb{}//!这样就不会出错

}

}

8

class a0{

class b0{

}

}

class vvv{

class ff extends a0.b0{//不是内部类也行

ff(a0 kk){

kk.super();

}

}

}

继承自内部类要调用父类的外层类的super()

9匿名内部类

interface oo{

//oo(int g){}

int k= 10;

void pt();

}

class pp{

pp(int g){

}

int get(){

return 100;

}

}

class me{

/*

interface oo{

void pt();

}

*/

class kk{

oo testmed(){

final int i= 10;

int g= 100;

return new oo(){

int kk;

{

//使用外面的东西要声名成final

//继承接口内部优先

//匿名内部类没有构造函数,只能使用块,初始化

kk= i+ k;

}

public void pt(){

System.out.println(kk);

}

};

}

pp testmed0(){

return new pp(10){//继承自类

public int get(){

return super.get()* 10;

}

};

}

}

}

匿名内部类可以继承自接口也可以继承自类,继承自类的构造函数中可以有参数。

10

class bf{

interface kk{}

class aa{

//接口能嵌套在接口中(不受限制),或者嵌套在顶层,下面就不行

//interface gg{}

}

}

好了,文章到此结束,希望可以帮助到大家。

java数据冗余什么意思(java中的代码冗余和耦合有什么区别请详细举例,谢谢)java中的对象和变量的区别是什么意思,变量和对象的区别是什么意思