java中的类有哪些_java中几个特殊的类

1 内部类-----是在其他类中的类

1.1 内部类的定义

将类定义为 class xxxx{... ...}置于某个类的内部即可‘

内部类编译时生成 xxxx$xxxx的class文件

内部类不能够与外部类同名

1.2 内部类的使用

在封装其类本省的类中使用该类,与普通类的使用方式相同

在其他地方使用该类:a 类名前要冠以外部类的类名; b 在用new创建内部类对象时,外部类名.内部类名 内部类对象名=外部类对象名.new 内部类名(参数)

1.3 在内部类中使用外部类的成员

内部类可以直接使用外部类的所有字段和方法;private也可以

如果内部类与外部类有同名的字段方法,则:外部类名.this.字段或方法

代码示例:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

public classTestInnerClass {public static voidmain(String[] args){

ExternalClass extern= newExternalClass();

ExternalClass.InnerClass inner= extern.newInnerClass();

inner.outPut("方法的字段");

}

}classExternalClass{private String s = "外部类字段";classInnerClass{private String s = "内部类字段";public voidoutPut(String s){

System.out.println("s的值为 " +s);

System.out.println("this.s的值为 " + this.s);

System.out.println("ExternalClass.s的值为 " + ExternalClass.this.s);

}

}

}

View Code

输出结果:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

s的值为 方法的字段this.s的值为 内部类字段

ExternalClass.s的值为 外部类字段

View Code

1.4 内部类的修饰符

内部类与外部类的字段和方法一样,作为外部类的成员而存在,其前面可以有访问控制符与其他修饰符

访问控制符public,protected,默认、private

final、abstract、static等

1.5 static修饰的内部类也叫作嵌套类(nested class)

static修饰的内部类,表面该内部类实际上是一种外部类,他与外部类的实例无关;

static修饰的内部类在使用时:

实例化static类时,在new前不需要增减外部类对象实例变量

static类中不能访问外部类中非static的字段及方法

static方法中不能访问非static的域及方法

2 局部类---在一个方法中定义的类

同局部变量一样,方法中的内部类,不能够被访private、protected、public、static等修饰,但能够被final、abstract修饰

可以访问其外部类的成员

不能访问该方法中的非final的局部变量(注意:java8中使用lambda表达式来实现局部类时,可以访问方法的普通局部变量)

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

classTestInnerInMethod

{public static voidmain(String[] args)

{

Object obj= new Outer().makeTheInner(47);

System.out.println("Hello World!" +obj.toString() );

}

}classOuter

{private int size = 5;public Object makeTheInner( intlocalVar )

{final int finalLocalVar = 99;classInner {publicString toString() {return ( " InnerSize: " + size +

//" localVar: " + localVar +//Error!

" finalLocalVar: " +finalLocalVar

);

}

}return newInner();

}

}

View Code

3 匿名类----一种特殊的)是一种特殊的内部类 ,它没有类名,在定义类的同时就生成该对象的一个实例;“一次性使用”的类

不取名字,直接用其父类或接口的名字,编译器生成 xxxxx$1之类的名字

类的定义的同时就创建实例,即类的定义前面有一个new,即new 类名或接口名(){……}

不定义构造方法,在构造对象时使用父类构造方法

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

classTestInnerAnonymous

{public static voidmain(String[] args)

{

Object obj= new Outer().makeTheInner(47);

System.out.println("Hello World!" +obj.toString() );

}

}classOuter

{private int size = 5;public Object makeTheInner( intlocalVar )

{final int finalLocalVar = 99;return newObject() {publicString toString() {return ( " InnerSize: " + size +

" finalLocalVar: " +finalLocalVar

);

}

};

}

}

View Code

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值