用getDeclaredFields()获取成员变量的信息
你代码里面的第一种创建方法写错了,直接用类来创建的话,就是Foo.class就行了,后面不要带括号。 用对象创建的话foo1.getClass()才需要带括号
反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
接口可以理解成一种特殊的类,由常量和抽象方法组成的特殊类。
一体式的代码太繁琐了,
所以我把两个方法重构了,
改了一点点,
除了那个二维数组没看懂,其他的都可以运行,
二维数组那个方法请发一下,
不然无法理解,不知道方法体
可以用Modifier.isStatic(method.getModifiers())
反射是一种计算机处理方式。有程序可以访问、检测和修改它本身状态或行为的这种能力。能提供封装程序集、类型的对象。(程序集包含模块,而模块包含类型,类型又包含成员。)
foreach循环其实和for循环功能相同,for(Field field:fs){} 就相当于 for (int i = 0; i < fs.size(); i++) { Field field = fs.get(i);}
1.点 “window”-> "Preferences" -> "Java" -> "Installed JRES"
2.此时"Installed JRES"右边是列表窗格,列出了系统中的 JRE 环境,选择你的JRE,然后点边上的 "Edit...", 会出现一个窗口(Edit JRE)
3.选中rt.jar文件的这一项:“c:\program files\java\jre_1.5.0_06\lib\rt.jar”
点 左边的“+” 号展开它,
4.展开后,可以看到“Source Attachment:(none)”,点这一项,点右边的按钮“Source Attachment...”, 选择你的JDK目录下的 “src.zip”文件
5.一路点"ok",结束。
dt.jar是关于运行环境的类库,主要是swing的包
tools.jar是关于一些工具的类库
rt.jar包含了jdk的基础类库,也就是你在Java doc里面看到的所有的类的class文件
我学的也不是很好,新手,我来说下我的观点吧,我觉得是用在做那些框架的底层,像是Spring框架,底层应该用的会比较多
我是这么理解的:
Foo是一个类,没错吧;
然后这个类它有各种各样的属性,比如什么类名啊,类性别啊(假装它有),类体积啊(假装它有),类周长啊(假装它有)等等;
我们现在只不过取出来其中一个这个类的其中一个非常牛逼的属性:也就是这个类的类型(简称类(的)类型),这个类类型的牛逼之处在于:只要有了这个类的类型,我们就可以知道它的类名,它所有的成员变量,甚至它所有的的方法名;就像你知道了一个人的身份证号码一样,这个人的什么名字性别年龄指纹你都能通过这个身份证号码查到。
假设这个Foo这个类是个人的话,那么它的类类型就相当于这个人的身份证号码;
我们用Class c1 = Foo.class;这个语句取得了这个类的身份证号码(类类型),然后通过c1.getName();调用了取出这个类名字的方法getName(),那么你自然会看到这个类的名字,也就是Foo~
Class是类类型对象
好像是的啊,我的API里也是这么说的。视频中获取的是构造方法的声明类的全称啊?
[ 代表的是数组类型,可以回看上一节,有说的
Object是所有类的父类
Class是类类型
java.lang.reflect.Field[] 这样? 是不是因为你已经导入了其他的同名的包
我觉得,就是声明了的,存在的,都算declared,不管修饰符,这个是getdeclaredFields()方法的官方解释:
Returns an array of Field objects reflecting all the fields declared by the class or interface represented by this Class object. This includes public, protected, default (package) access, and private fields, but excludes inherited fields.
但是不包括继承的成员变量。
不是,这是java特有的一种语法机制。 我们通常所说的反编译一般是指的将一个可运行的库或程序还原到源代码的过程,也就是顾名思义的编译的逆过程