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.流的抽象基 ...
随机推荐
- linux 提示符绝对路径
# Turn on checkwinsize shopt -s checkwinsize [ "$PS1" = "\\s-\\v\\\$ " ] & ...
- Timsort 算法
转载自:http://blog.csdn.net/yangzhongblog/article/details/8184707 Timsort是结合了合并排序(merge sort)和插入排序(inse ...
- node-webkit读取json文件
1.原理 node-webkit包含了node.js,node.js提供了处理json数据文件的方法,通过node.js提供的方法,我们可以比较方便地读取json文件. 2.示例 这里我们读取的文件是 ...
- AJAX 实时读取输入文本(php)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Linux Tcl和Expect的安装
一.先安装Tcl 1.下载:tcl版本 8.4.19 http://sourceforge.net/projects/tcl/files/Tcl/8.4.19/tcl8.4.19-src.tar.gz ...
- 关于在Andoird集成开发软件中添加外部jar包的方法
步骤必须是下面的两步,少一步都不行. 第一步是存放于项目中,第二步是导入和应用于项目中. 1.右键项目-Build Path-Configure Build Path-在Libraries目录下-点右 ...
- java中Scanner的nextLine()和next()的区别
首先,next()一定要读取到有效字符后才可以结束输入,对输入有效字符之前遇到的空格键.Tab键或Enter键等结束符,next()方法会自动将其去掉,只有在输入有效字符之后,next()方法才将其后 ...
- YUV数据YUY2到I420
/* 主要的采样格式有YCbCr 4:2:0.YCbCr 4:2:2.YCbCr 4:1:1和 YCbCr 4:4:4.其中YCbCr 4:1:1 比较常用,其含义为:每个点保存一个 8bit 的亮度 ...
- linux常用命令中篇
1.打印当月的日期
- keepalived双BACKUP加nopreempt失效、手动监控服务脚步。
keepalived双BACKUP加nopreempt不起作用,两个机器同时拥有vip, 排查几天发现是防火墙问题,啃爹. 打开 vi /etc/sysconfig/iptables 插入一条:-A ...