在入门语法的学习阶段,就已经学习了面向对象。也被think in java中的万物皆对象给忽悠啦{:soso_e113:}。自以为有点小聪明,以为将一切事物进行独立成一个个独立存在整体,再分割成属性理解的过程就是面向对象。虽然很多前辈的经验之谈是几年工作经验也未必能领会~~{:soso_e132:}
这里有一点小小的体悟,源自于张老师的视频,我截取了部分。并做了下总结~~可能很多老鸟已经明白,不要见笑哈{:soso_e117:}。
写给和我一样懵懂的新人{:soso_e154:}
这个例子是在反射中用到的,关于Field~~
这里建立需求,通过反射得到一个类的字段的具体值。
没有意外,首先是要有一个含有字段的类
public class ReflectField {
private int x;
public int y;
public ReflectField(int x, int y) {
super();
this.x = x;
this.y = y;
}
}
其次是达成需求的测试类啦
import java.lang.reflect.Field;
public class ReflectTest {
public static void main(String[] args) throws Exception{
/*
Field:代表的是某一个类中的成员变量,是一个字段。
下面的语句就上面的类定义了一个带参的类对象。很多人的理解到这就没下文了,是理解不深刻啊~
重点,对象不仅仅是一个类似变量的存在。必须中的必须!!!在脑海里建立一个实例,神马是实例,就要当成你能看得见摸得着的玩意。
这个思想一定要有,不然就晕。
*/
ReflectField pt1 = new ReflectField(3,5);
//如何得到一个类身上的某个字段,也就是某个成员变量呢?
Field fieldY= pt1.getClass().getField("y");
//需要先得到这个类的字节码,因为字节码里面有这个成员变量的信息,得到字节码在获得成员信息。
/*问题:那么FieldY的值是多少呢!!!!!!!,是5?错! (引用张孝祥老师的问题),
戏肉来了,对不对就试试吧*/
System.out.println(fieldY);
//直接输出的结果,是得不到值的。很多人奇怪,这里为什么不会是一个值,因为上面明确的获得了一个Field...
//如何输出值呢?
System.out.println(fieldY.get(pt1));
/*这里很多人在对象引用中犯晕,为什么是下面的法子才能得到结果???一些初学者在理解对象使用对象时有这样的念头,不知道关联关系。
虽然被问起面向对象知道怎么说*/
/*体会:
首先明确pt1,它是字节码(类)的一个实例对象。一切是建立在对象之上。
后面fieldY通过pt1.getClass().getField("y")方法并没有得到具体的值,于是有人奇怪。已经有对象了pt1了不是麽?
fieldY这个时候仅仅是通过pt1这个对象调用getClass().getField("y")方法得到了另一个对象罢了,不过这个对象是一个成员变量。
这样自然是求不出结果的,也就没有到此为止,pt1是一个对象,一个大对象!!!,fieldY也是对象,大对象中的一个小对象!
这个时候要求具体值,输出了(fieldY.get(pt1));get()是获得,获得什么的?不是填入Y,如果要获得一个类中成员变量的具体值,
则必须有其实例,或者说是其对象pt1。fieldY是依附于pt1而存在~~反射的建立要有足够的关联性。
如果说是面对对象是对理论有了一个貌似清晰的概念,那么这里,短短几句代码的关系则是面对对象在代码关系细节中简单体现。
*/
}
}
啰嗦一堆,发现对思想的阐述真痛苦,可意会不可言传的玩意儿,越发崇拜马列了~~
灿烂的字体,希望在深夜给各位看官一个灿烂的心情~~~~~~{:soso_e176:}
多多交流哟
|
|