新建一个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 - 反射获取类的属性,方法,构造器的更多相关文章

  1. java-通过反射获取目标类的属性,方法,构造器

    首先定义一个urse package com.studay_fanshe; public class User { private String uname; private int age; pri ...

  2. java中如何通过Class获取类的属性、方法、注释

    public static String getPKName(Class clazz) { Field[] fields = clazz.getDeclaredFields(); for (Field ...

  3. java利用反射获取类的属性及类型

    java利用反射获取类的属性及类型. import java.lang.reflect.Field; import java.math.BigDecimal; import java.util.Map ...

  4. Java反射学习-3 - 反射获取属性,方法,构造器

    package cn.tx.reflect; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import ...

  5. 【java】java反射机制,动态获取对象的属性和对应的参数值,并属性按照字典序排序,Field.setAccessible()方法的说明【可用于微信支付 签名生成】

    方法1:通过get()方法获取属性值 package com.sxd.test.controller; public class FirstCa{ private Integer num; priva ...

  6. 如何获取类或属性的自定义特性(Attribute)

    如何获取类或属性的自定义特性(Attribute) 问题说明: 在ActiveRecord或者其他的ORM等代码中, 我们经常可以看到自定义特性(Attribute)的存在(如下面的代码所示) [Pr ...

  7. Runtime获取类的属性列表和方法列表

    Runtime获取类的属性列表和方法列表 Runtime很强大,他使得OC中没有真正意义上的私有属性和私有方法,我们可以利用OC的运行时拿到一个类的任何方法和任何属性,然后动态的去调用方法,objc_ ...

  8. Yii2 提供可以用属性的方式去获取类的一个方法

    刚开始用 Yii 的小朋友可能对下面的写法非常疑惑: public function actionIndex() { $user = User::find()->where(['name'=&g ...

  9. Delphi中TStringList类常用属性方法详解

    TStrings是一个抽象类,在实际开发中,是除了基本类型外,应用得最多的. 常规的用法大家都知道,现在来讨论它的一些高级的用法. 先把要讨论的几个属性列出来: 1.CommaText 2.Delim ...

随机推荐

  1. 在google chrome浏览器上安装 Vue Devtools工具

    [转]https://www.cnblogs.com/tanyongli/p/7554045.html Vue.js devtools是基于google chrome浏览器的一款调试vue.js应用的 ...

  2. EZOJ #375高速公路

    分析 我们可以先跑一遍全价的最短路 之后我们枚举这个第k大的价格w[i] 将其它边减这个边的权值和0取max 在跑出最短路之后加上减去的费用,即w[i]*k 我们发现如果价值大于w[i]的边小于k个 ...

  3. idea 快捷键汇总

    1.IDEA常用快捷键 Alt+回车 导入包,自动修正 Ctrl+N 查找类 Ctrl+Shift+N 查找文件 Ctrl+Alt+L 格式化代码 Ctrl+Alt+O 优化导入的类和包 Alt+In ...

  4. "CoolShell puzzle game" writeup

    地址:http://fun.coolshell.cn/ Fuck your brain 看到一大串符号,还以为是 js 代码,结果放到 Chrome 控制台执行没有任何结果,然后搜了一下发现有一门叫B ...

  5. sed删除注释行和空行

    典型需求: 删除nginx.conf文件中注释行和空行 sed -i '/^#/d;/^$/d' nginx.conf 删除一个或多个空格加 # 号的行 sed -i '/[:blank:]*#/d' ...

  6. proxool连接池配置方法

    proxool.properties: jdbc-1.proxool.alias=test #jdbc-1.proxool.driver-class=com.mysql.jdbc.Driver #jd ...

  7. C# Base64编码解码 ,Md5、Rsa加密解密

    using System; using System.IO; using System.Security.Cryptography; using System.Text; namespace Clas ...

  8. JVM(17)之 准备-解析-初始化

    开发十年,就只剩下这套架构体系了! >>>   在类加载机制的五个阶段中,我们已经讲完了第一个阶段.剩下的四个阶段由于涉及到比较多的类文件相关的知识,现在讲了会看得很吃力,所以我们暂 ...

  9. 监控软件之open-falcon

    一.open-falcon介绍 1)中文社区介绍 http://book.open-falcon.org/zh_0_2/intro/ 参照文档: https://www.cnblogs.com/LAl ...

  10. c# UDP分包发送

    考虑到UDP的高速和其他协议的复杂性,做了一个依靠时间发送的分包组包重发的UDP库. https://github.com/jinyuttt/UDPTTL.git