java基础知识忘记了,Java基础知识——神游的第九天

570b234f972578905e2e9e8f2baa6994.png

Java程序中,除了普通声明的类外,还有一种叫抽象类,一种叫内部类。今天要说的就是抽象类、内部类,以及Java中的反射机制了!

抽象类:

10ac2dca4881dec41c1f85b00d383e2c.png

定义一个名称为Fruit的抽象类

51d235324e788be9b9eba7f073b1e9ac.png

527acd07f2ab26ded30bdc298bb504ea.png

下面就是一个简单的例子:

使用abstract关键字创建抽象类Fruit

95ce51b8f8c28d5025f8d74ec51bda04.png

创建Fruit类的子类Apple,并实现harvest()方法

e97718ae24054b0fbf87e4b3b7b29c02.png

创建Fruit类的子类Orange,并实现harvest()方法

0e0a29a83869cfdc569b295b41caa914.png

定义测试类Farm,在Fruit类中执行两个子类的harvest()方法

e787a7eb1def961058c3d5834e32663f.png

内部类:如果在一个类中再定义一个类,就在类中再定义的这个类就叫内部类。内部类可以分为成员内部类、局部内部类以及匿名内部类。

成员内部类:

8a90a78d196867e777258395fcde579d.png

a5aebc70f6cdae27da9c06d6f0163c9a.png

创建OuterClass类,在类中定义innerClass内部类和doin()方法,在主方法中创建OuterClass类的实例对象并调用doit()方法。

420c6d0a1eff81c3ad5c2e0155b994de.png

c2365b56ec031f83bcd11c3daea17208.png

从上图可以看出,内部类对象与外部类对象关系非常密切,内外可以交互使用彼此类中定义的变量。

注意:如果在外部类和非静态方法之外实例化内部类对象,需要使用“外部类.内部类”的形式指定该对象的类型。

在上面的程序中的方法中如果不使用doit()方法返回内部类对象引用,可以直接使用内部类实例化内部类对象,但由于是在主方法中实例化内部类对象,必须在new操作符之前提供一个外部类的引用 。

如下面:在主方法中实例化一个内部类对象:

7fd03fa4b18d61e0922c0fc5761c8b77.png

使用this关键字获取内部类与外部类的引用,如果在外部类中定义的成员变量与内部类的成员变量名称相同,可以使用this关键字

创建TheSameName类,在类中定义成员变量x,定义一个内部类Inner,并在内部类中也创建x变量,在内部类的doit()方法中分别操作两个x变量。

51c98b108b3d4fc61ec3de11310f02bb.png

50d9b5d31bd20c9534f9890eff3981eb.png

局部内部类:

局部内部类是指在类的方法中定义的内部类,它的使用范围也是在这个方法体内。下面一个例子说明如何定义局部内部类。

在外部类的sell()方法中创建Apple局部内部类,然后创建该内部类的实例,并调用其定义的price()方法输出单价信息。

f133bc4fdeca3b3b25e7ac64ef3c36df.png

6d34fc0e72b137204c53b32d257471fb.png

在上述代码中可以看到,内部类定义在sell()方法内部。但是有一点值得注意,内部类Apple是sell()方法的一部分,并非SellOutClass类的一部分,所以在sell()方法的外部不能访问该内部类,但是该内部类可以访问当前代码块的常量以及此外部类的所有成员。

匿名内部类:

在编写程序代码时,不一定要给内部类取一个名字,可以直接以对象名来代替。匿名内部类的所有实现代码都需要在大括号之间进行编写。

48d0b1754cfbc35d3579b1ffb7177a5f.png

在main()方法中编写匿名内部类去除字符串中的全部空格。

2687c78eccdcb178ed192ab2c29b50b2.png

编写接口IStringDeal,在该接口中声明一个方法filterBlankChar(). 代码如下:

public interface IStringDeal

{

public String filterBlankChar();

}

静态内部类:

710c550c20bb60ab0d52deb380cef019.png

4dfbb794c46ee65898fb7fa30bc3a99b.png

内部类的继承:

4ec8749dc7e0f7464b990dcbe765e576.png

Class类与Java的反射机制:

通过Java反射机制,可以在程序 中访问已经装载到JVM中的Java对象的描述,实现访问、检测和修改描述Java对象本身信息的功能。Java反射机制的功能十分强大,在java.lang.reflect包中提供了对该功能的支持。众所周知,所有Java类均继承了Object类,在Object类中定义了一个getClass()方法,该方法返回一个类型为Class的对象。代码如下 :

Class textFieldC = textField.getClass();

7a834d9ba11a982a51a40ea6b7cfd695.png

738b37355268c7d08be306ca517a8d39.png

7745acd34abf47db22653a45c8a4e6aa.png

05fe7d10b1f67d7b3b984bfba8577d43.png

56410c4904b7a73881bdd521221dab41.png

a479f6da0edd073a313580ab5a87e373.png

访问成员变量:

f3c4dde6991efe6e113534a6c5da3157.png

5fc9a5637de65d715d72bab899597e4b.png

ef3c730fe9c5f956fe548bbe61508fef.png

访问方法:

ba451857a0e46cbe0a5b149621585801.png

以上就是反射机制的一些知识 了,今天就写到这吧,谢谢大家浏览,有什么错误的地方欢迎大家指正,谢谢,祝大家周末愉快!

获得更多相关资讯可以关注西安华美校区,就会获得java零基础教程!额外附送excel教程!另外求关注,你们的关注是小编继续的动力!谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值