Java反射学习-1 - 反射获取类的属性,方法,构造器
新建一个Person类
package cn.tx.reflect; /**
* 注解初步了解
* @author Administrator
*
*/
public class Person {
private Integer id;
private String name;
private String address; public Person() {
super();
} public Person(Integer id, String name, String address) {
super();
this.id = id;
this.name = name;
this.address = address;
} public String getName() {
return name;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
} public static void printInfo(){
System.out.println("静态方法反射调用");
} @Override
public String toString() {
return "Person [address=" + address + ", id=" + id + ", name=" + name
+ "]";
} }
package cn.tx.reflect; import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Arrays;
/**
* 一、反射获取类的属性,方法,构造器
* @author Administrator
*
*/
public class ReflectLearn1 { private static String className = "java.lang.String";
public static void main(String[] args) throws Exception {
// <?>中的问号为泛型,表示不知道后面list对象 中存放的实际类型是什么,用?表示
// List<?> list = new ArrayList(); // 1.根据一个类的全路径名获取一个类的类对象:Class对象 Class<?> clazz = Class.forName(className);
// 2.获得传递过来的类(上面的String类)的所有声明方法——目的就是为了调用获得的方法
Method[] methods = clazz.getDeclaredMethods();
for (Method m : methods) {
System.out.println(m);
} // 3.获得类的所有声明的属性——目的:设置属性或者是获取属性值,或者是获取属性上的注解!
System.out.println("-------------获得类的所有声明的属性---------------");
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
System.out.println(field);
} // 4.获得类的所有构造器——创建对象
System.out.println("--------------获得类的所有构造器--------------");
Constructor<?>[] constructors = clazz.getDeclaredConstructors();
for (Constructor<?> constructor : constructors) {
System.out.println(constructor);
} //5.获取一个类的Class对象的三种方式:
//(1)知道类的全路径名,Class<?> clazz = Class.forName("类的全路径名");
//(2)知道该类的一个对象 Class<?> clazz = 对象名.getClass();
//(3)知道类的名字: Class<?> clazz = 类名.class;
System.out.println("----------获取Person类的信息-------------");
Person p = new Person();
test(p);
/* test(p);打印结果如下
* ----------获取Person类的信息-------------
public java.lang.String cn.tx.Person.toString()
public java.lang.String cn.tx.Person.getAddress()
public java.lang.String cn.tx.Person.getName()
public java.lang.Integer cn.tx.Person.getId()
public void cn.tx.Person.setName(java.lang.String)
public void cn.tx.Person.setId(java.lang.Integer)
public void cn.tx.Person.setAddress(java.lang.String)
-------------获得类的所有声明的属性---------------
private java.lang.Integer cn.tx.Person.id
private java.lang.String cn.tx.Person.name
private java.lang.String cn.tx.Person.address
--------------获得类的所有构造器--------------
public cn.tx.Person()
public cn.tx.Person(java.lang.Integer,java.lang.String,java.lang.String)
* */
//(3) } /**
* Class<? extends Object>
* @param obj
*/
public static void test(Object obj){
//Class<? extends Object>表示通过反射获取的对象的类型不确定,但是一定是Object类的子类
//等价于Class<?> clazz = obj.getClass();
Class<? extends Object> clazz = obj.getClass();
// 2.获得传递过来的类(上面的String类)的所有方法——目的就是为了调用获得的方法
Method[] methods = clazz.getDeclaredMethods();
for (Method m : methods) {
System.out.println(m);
} // 3.获得类的所有声明的属性——目的:设置属性或者是获取属性值
System.out.println("-------------获得类的所有声明的属性---------------");
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
System.out.println(field);
} // 4.获得类的所有构造器——创建对象
System.out.println("--------------获得类的所有构造器--------------");
Constructor<?>[] constructors = clazz.getDeclaredConstructors();
for (Constructor<?> constructor : constructors) {
System.out.println(constructor);
}
} }
Java反射学习-1 - 反射获取类的属性,方法,构造器的更多相关文章
- java-通过反射获取目标类的属性,方法,构造器
首先定义一个urse package com.studay_fanshe; public class User { private String uname; private int age; pri ...
- java中如何通过Class获取类的属性、方法、注释
public static String getPKName(Class clazz) { Field[] fields = clazz.getDeclaredFields(); for (Field ...
- java利用反射获取类的属性及类型
java利用反射获取类的属性及类型. import java.lang.reflect.Field; import java.math.BigDecimal; import java.util.Map ...
- Java反射学习-3 - 反射获取属性,方法,构造器
package cn.tx.reflect; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import ...
- 【java】java反射机制,动态获取对象的属性和对应的参数值,并属性按照字典序排序,Field.setAccessible()方法的说明【可用于微信支付 签名生成】
方法1:通过get()方法获取属性值 package com.sxd.test.controller; public class FirstCa{ private Integer num; priva ...
- 如何获取类或属性的自定义特性(Attribute)
如何获取类或属性的自定义特性(Attribute) 问题说明: 在ActiveRecord或者其他的ORM等代码中, 我们经常可以看到自定义特性(Attribute)的存在(如下面的代码所示) [Pr ...
- Runtime获取类的属性列表和方法列表
Runtime获取类的属性列表和方法列表 Runtime很强大,他使得OC中没有真正意义上的私有属性和私有方法,我们可以利用OC的运行时拿到一个类的任何方法和任何属性,然后动态的去调用方法,objc_ ...
- Yii2 提供可以用属性的方式去获取类的一个方法
刚开始用 Yii 的小朋友可能对下面的写法非常疑惑: public function actionIndex() { $user = User::find()->where(['name'=&g ...
- Delphi中TStringList类常用属性方法详解
TStrings是一个抽象类,在实际开发中,是除了基本类型外,应用得最多的. 常规的用法大家都知道,现在来讨论它的一些高级的用法. 先把要讨论的几个属性列出来: 1.CommaText 2.Delim ...
随机推荐
- Bing Beats Google for the Best Way to X-Ray Search LinkedIn
Bing Beats Google for the Best Way to X-Ray Search LinkedIn 11/13/11 Note: I’ve provided some update ...
- scrapy电影天堂实战(二)创建爬虫项目
公众号原文 创建数据库 我在上一篇笔记中已经创建了数据库,具体查看<scrapy电影天堂实战(一)创建数据库>,这篇笔记创建scrapy实例,先熟悉下要用到到xpath知识 用到的xpat ...
- MAC 安装jenkins
下载地址 : https://jenkins.io/zh/download/ 由于用dmg安装包去安装jenkins,Jenkins不会用本地的用户去构建,任何创建的文件都是“jenkins”用户所有 ...
- java反射机制-简单实例
public class Car { private String brand; private String color; private int maxSpeed; public Car() { ...
- kali 开启xdebug
1.安装xdebug 参考https://xdebug.org/docs/install 2.配置 # vi /etc/php/7.3/mods-available/xdebug.inizend_ex ...
- MongoDB分片配置 优化 不错
简单注解:mongos 路由进程, 应用程序接入mongos再查询到具体分片,监听端口默认27017config server 路由表服务, 每一台都具有全部chunk的路由信息 shard为数据存储 ...
- Java实现红黑树
转自:http://www.cnblogs.com/skywang12345/p/3624343.html 红黑树的介绍 红黑树(Red-Black Tree,简称R-B Tree),它一种特殊的二叉 ...
- mybatis全局配置mybatis-config.xml
大部分时候,我们都是在Spring 里面去集成MyBatis.因为Spring 对MyBatis 的一些操作进行的封装,我们不能直接看到它的本质,所以先看下不使用容器的时候,也就是编程的方式,MyBa ...
- daily plan -- 2019/5/20
1.课内作业:物联网工程导论论文. 2.实验项目计划:学习Kinect彩色帧读取. 3.算法:LeetCode 动态规划一题. 4.英语:听力30分钟训练,英语单词. 今日心情: 进度反馈:计划基本完 ...
- [BZOJ3626] [LNOI2014]LCA(树链剖分)
[BZOJ3626] [LNOI2014]LCA(树链剖分) 题面 给出一棵N个点的树,要求支持Q次询问,每次询问一个点z与编号为区间[l,r]内的点分别求最近公共祖先得到的最近公共祖先深度和.N, ...