Java初学者笔记六:反射
Java反射基础
零、基础类代码
import java.io.*;
import java.lang.reflect.*;
class father{
public String fName;
father(String name) {
this.fName = name;
}
public void show() throws Exception{
Runtime.getRuntime().exec("touch 2.txt");
}
}
class child extends father{
public int cAge;
child(int age,String name){
super(name);
this.cAge = age;
}
public void display() {
System.out.println("I am Child!");
}
}
一、根据对象和类获取类
方法一 -> getClass()
对运行时候的对象调用getClass获取其类对象
public class InvokeLearn{
public static void main(String[] args) throws Exception{
father f = new father("TOM");
child c = new child(5,"JIM");
String clsname = c.getClass().getName();//可以获取类,然后getName返回类名字符串
System.out.println(clsname);
}
}
方法二 -> class属性
对类本身调用class属性
public class InvokeLearn{
public static void main(String[] args) throws Exception{
//Runtime.getRuntime().exec("touch 1.txt");
father f = new father("TOM");
child c = new child(5,"JIM");
String clsname = c.getClass().getName();
Class<child> clsname1 = child.class;
System.out.println(clsname1.getName());
}
}
方法三 -> Class.forName()
使用Class.forName()方法
public class InvokeLearn{
public static void main(String[] args) throws Exception{
//Runtime.getRuntime().exec("touch 1.txt");
father f = new father("TOM");
child c = new child(5,"JIM");
Class cls = Class.forName("father");
}
}
二、根据类获取构造方法并创建实例
- 常用的几个方法:
- getDeclaredConstructor()
- getDeclaredConstructors()
- getConstructors()
- getConstructor()
public class InvokeLearn{
public static void main(String[] args) throws Exception{
Class cls = Class.forName("father");
Constructor[] conArray= cls.getDeclaredConstructors();//所有构造方法
/*
* getConstructors() ->所有公有的构造方法
* getConstructors(null) -> 所有公有的无餐的构造方法
* getDeclaredConstructor(parameters_type) -> 私有的含参的构造方法,parameters_types是参数的类型
*/
//System.out.print(conArray.length);
Constructor newc = conArray[0];
Object obj = newc.newInstance("Tom");//调用构造方法创建实例
}
}
三、根据类获取成员变量并使用
- 常用的几个方法:
- getDeclaredField()
- getDeclaredFileds()
- getFields()
- getField()
public class InvokeLearn{
public static void main(String[] args) throws Exception{
Class cls = Class.forName("father");
Constructor[] conArray= cls.getDeclaredConstructors();//所有构造方法
Constructor newc = conArray[0];
Object obj = newc.newInstance("Tom");//创建实例
Field dis = cls.getDeclaredField("fName");//获取属性对象
dis.set(obj,"George");//设置属性值
System.out.println(dis.get(obj));//获取属性值并打印
}
}
四、根据类获取成员方法并使用
- 常用的几个方法:
- getDeclaredMethod()
- getDeclaredMethods()
- getMethods()
- getMethod()
public class InvokeLearn{
public static void main(String[] args) throws Exception{
Class cls = Class.forName("father");
Constructor[] conArray= cls.getDeclaredConstructors();//所有构造方法
Constructor newc = conArray[0];
Object obj = newc.newInstance("JJJ");//创建实例
Method dis = cls.getDeclaredMethod("show",null);//获取show方法
dis.invoke(obj, null);//调用show方法
}
}
Java初学者笔记六:反射的更多相关文章
- Java初学者笔记
Java初学者笔记 前提:认识汉字,认识英语单词,会用键盘打字 ------------------------------- 端口是什么: --------面向对象编程(OOP) 接口”(Inter ...
- java学习笔记:反射
1.什么是反射? Reflection(反射)是被视为动态语言的关键,反射机制允许程序做执行期间借助于ReflectionAPI取得任何类的内部信息,并能直接操作任意对象内部属性及方法 2.反射相关的 ...
- 【java学习笔记】反射基础
一.反射 反射就是在剖析一个类,了解这个类的构造,创建这个类对应的对象. Class 代表字节码的类,代表类的类 Field 代表属性的类 Method 代表方法的类 Constructor 代表构造 ...
- Java初学者笔记一:元类、获取类型、枚举
零.绪论: 2018年新年伊始,学习Java的冲动越来越强烈,毕竟以后无论是做安全开发还是安全研究都必不可少的掌握这门语言,所以在不断完善Python作为脚本语言的主语言的情况下觉得学习Java作为高 ...
- 8.2(java学习笔记)反射
一.基础知识 对象是表示或封装一些数据,一个类被加载后JVM会创建一个对应该类的Class对象, 类的整个结构信息会被放在对应的对象中,通过这个对象我们可以获取改类的全部信息, 而这些操作称为反射. ...
- Java 学习笔记(15)——反射
Java中的类文件最终会被编译为.class 文件,也就是Java字节码.这个字节码中会存储Java 类的相关信息.在JVM执行这些代码时首先根据 java 命令中指定的类名找到.class 文件然后 ...
- java学习笔记之反射—Class类实例化和对象的反射实例化
反射之中所有的核心操作都是通过Class类对象展开的,可以说Class类是反射操作的根源所在,但是这个类的实例化对象,可以采用三种方式完成. java.lang.Class类的定义: public f ...
- java学习笔记六——数组
数组类型 数组是一种常见的数据结构,可用于存放多个数据,每一个数组元素存放一个数据,通常可以通过下标进行访问其元素. Java数组要求所有数组元素具有相同的数据类型.因此,数组元素的数据类型是唯一的. ...
- Java学习笔记六(I/O流)
1.介绍 在实际开发过程中经常会用到数据的输入/输出操作,本篇博客着重分析一下,java中经经常使用到的有关IO操作的类.而在java中能够将经常使用的流分为两个部分:字节流和字符流. 1.流的抽象基 ...
随机推荐
- div 画园
.destination1{ border: #666 solid 1px; box-shadow:-1px 1px 5px 0px #333; width:922px; height:485px; ...
- ajax回调函数中使用$(this)取不到对象的解决方法
如果在ajax的回调函数内使用$(this)的话,实践证明,是取不到任何对象的,需要的朋友可以参考下 $(".derek").each(function(){ $(this).cl ...
- 【转】nginx中proxy_set_header Host $host的作用
nginx为了实现反向代理的需求而增加了一个ngx_http_proxy_module模块.其中proxy_set_header指令就是该模块需要读取的配置文件.在这里,所有设置的值的含义和http请 ...
- Error -27780: Connection reset by peer: socket write error
Problem Description: Error: "-27780: read to host failed: [10054] Connection reset by peer" ...
- AWS SDK for C++调用第三方S3 API
这里介绍AWS SDK for C++ 1.0.x版本,比如下载: https://github.com/aws/aws-sdk-cpp/archive/1.0.164.tar.gz 环境:RHEL/ ...
- 5G的7位电话号码,去重,内存20mb,代码实现。
转自:http://www.aboutyun.com/thread-11139-1-1.html 答案:首先,这个题考的不是分布式7位数,至少要用int来保存,那么int为4字节,20MB内存 10^ ...
- 关于PHP开发所需要的工具和环境
0.notepad++ 一个类型记事本的软件,用来看安装的部署说明命令. 1.虚拟机 在虚拟机里面操作,本机不会被影响. 2.CentOS系统 类似Linux的系统,在里面安装PHP,Nginx,ph ...
- Xenocode Postbuild 2010 for .NET 混淆工具的详细使用步骤【转】
1,首先我们需要去下载这个工具去,我这里倒是有一个下载的网址,已经被破解了,而且有序列号 http://download.csdn.net/tag/Xenocode+Postbuild+2010+fo ...
- Python下opencv使用笔记(十)(图像频域滤波与傅里叶变换)
前面以前介绍过空间域滤波,空间域滤波就是用各种模板直接与图像进行卷积运算,实现对图像的处理,这个方案直接对图像空间操作,操作简单.所以也是空间域滤波. 频域滤波说究竟终于可能是和空间域滤波实现相同的功 ...
- Linux下安装subversion1.6.5和apache2
以下安装是在RHEL5.5默认安装的情况下,以root身份进行安装!这个实验我安装了n次,最后总是不成功,因为涉及到略多的软件和配置.下面是安装步骤和配置,自己记下来.希望给下次配置的时候不要像以前那 ...