java怎么判断内部类_java-内部类介绍

内部类(Nested Class) 嵌套类:

(1)静态内部类

(2)非静态内部类:

普通内部类(成员内部类):在一个外部类中直接定义的内部类。

匿名内部类:

方法内部类:在一个方法(外部类中的方法)或代码块中定义的内部类。

内部类仍然是一个独立的类,在编译之后内部类会被单独编译成独立的.class文件,但是前面冠以外部类的类名和$符号。

内部类可以使用修饰符(public ,protected,default,private)。

静态内部类的基本用法:

1.静态内部类可以包含静态成员,非静态成员。

2.静态内部类可以直接调用外部类的经验属性,静态方法。单不能调用外部类的普通属性,普通方法。

3.在不相关类中,可以直接创建静态内部类的对象(不需要通过所在的外部类)。

4.静态内部类实际上和外部类联系很少,也就是命名空间上的联系。

方法内部类的基本用法:

1.方法内部类的地位和方法内的局部变量的位置类似,均不可被修饰符修饰。

2.方法内部类只能在生命的方法内是可见的。因此定义局部内部类之后,想用的话就要在此方法内直接实例化,一定是先声明后使用。

3.方法内部类不能访问定义它的方法内的局部变量,除非这个变量被定义为final,及局部变量和方法内部类生命周期不一致。

4.方法内部类只能包含非静态成员。

5.方法内部类中不能引用所在方法的普通局部变量,除非是常量。方法的生命周期和方法内部类对象的生命周期不一致。

匿名内部类的基本用法:

匿名内部类的实例化方式:new SomeInterfaceOrClass(){?};

意味着创造一个实现或者说继承了SomeInterfaceOrClass类的对象。

Ps:根据声明的位置,判断匿名内部类是成员内部类还是方法内部类。一般是方法内部类。

三种使用方法:

继承方式,接口方式,以及参数方式

通过代码了解一下:

1 packagecom.etc;2

3 importjava.util.Date;4

5 @SuppressWarnings("all")6 public classNestedClassDemo {7 public static voidmain(String[] args) {8

9 Test4 test=newTest4();10 test.test();11 //不相关的内部类调用及实例化

12 Test4.Test t1=newTest4.Test();13 //成员内部类的实例必须借助外部类

14 Test4.Test2 t2=test.newTest2();15 System.out.println("不相关内部类:"+t1.getClass());16 System.out.println("成员内部类:"+t2.getClass());17 useCarForTest us=newuseCarForTest();18 System.out.print("继承式匿名内部类使用结果:");19 us.use();20 System.out.print("参数式匿名内部类使用结果:");21 us.useElement();22 }23 }24

25 @SuppressWarnings("all")26 classTest4{27

28 static int a=10;29 int b=20;30 //静态内部类

31 static classTest{32 private voidprintA() {33 System.out.println(a);34 //静态内部类中不能调用外部类的普通成员35 //System.out.println(b);

36 }37 }38 //普通内部类

39 classTest2{40 //成员内部类中不能有静态的成员,除非声明为final,并且只能是编译器可以确定值的常量表达式

41 int a=10;42 final static int b=20;43 /*final static Date date=new Date();*/

44 }45

46 //方法内部类,局部内部类

47 public voidtest() {48

49 classTest3{50

51 }52 //匿名内部类也可以放在方法内部类里面、为继承式匿名内部类使用

53 Runnable run=newRunnable() {54 @Override55 public voidrun() {56 System.out.println("测试1");57 }58 };59 }60

61 //定义了匿名内部类的类体,同时创建了一个匿名内部类的实例。

62 Runnable run=newRunnable() {63 @Override64 public voidrun() {65 System.out.println("测试2");66 }67 };68 }69

70

71

72 classuseCarForTest{73

74 public voidelement(Car car) {75 car.say();76 }77 //匿名内部类的使用,参数式

78 public voiduseElement() {79 element(newCar() {80 @Override81 public voidsay() {82 System.out.println("这是一辆奔驰");83 }84 });85 }86

87 //匿名内部类的使用,继承式

88 public voiduse() {89 Car car=newCar() {90 @Override91 public voidsay() {92 System.out.println("这是一辆保时捷!");93 }94 };95 car.say();96 }97 }98

99 classCar{100 public voidsay() {101 System.out.println("这是一辆车!");102 }103 }

运行效果截图:

aa6a4ee931e6ea8f55df79e25089d9ec.png

9cd3a7a78d20b80a440350d94eb5eb51.png

ps:文章待完善,后续补全。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值