新建一个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. HashMap与HashTable的哈希算法——JDK1.9源码阅读总结

    下面是HashTable源码中的put方法: 注意上面注释标注的地方: HashTable对于元素在哈希表中的坐标算法是: 将对象自身的哈希值key.hashCode()变为正数:hash & ...

  2. mac的jvm调优工具

    安装好JDK之后调优工具所在位置为: /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/jvisualvm j ...

  3. Cisco Packet Tracer基本操作

    IOS主要模式模式 描述 提示符用户执行模式 路由器受限检查,远程访问 Router>特权执行模式 路由器的详细检查:调试和测试,文件处理,远程访问 Router#全局配置模式 全局配置命令 R ...

  4. 432D Prefixes and Suffixes

    题目大意 给你一个串 对于一个子串如果它既是前缀又是后缀 输出它的长度以及它在原串中一共出现了多少次 分析 对于既是前缀又是后缀的判断和126B相同 然后我们只需要记录每个不同的z[i]出现了多少次 ...

  5. ruby在类中访问@,类外访问调用方法

    class Box def initialize(w,h) @width,@height=w,h end def printWidth puts @width end def printHeight ...

  6. 使用Flask+nginx+uwsgi+Docker部署python应用

    https://www.cnblogs.com/vh-pg/p/11731637.html

  7. day02-Javascript之document.write()方法

    转行学开发,代码100天.——2018-03-18 document.write()方法作为Javascript的常用输出方式,可输出字符串,标签元素,变量等. document.write(&quo ...

  8. 【转载】Spring boot学习记录(二)-配置文件解析

    前言:本系列文章非本人原创,转自:http://tengj.top/2017/04/24/springboot0/ 正文 Spring Boot使用了一个全局的配置文件application.prop ...

  9. jvm 更多链接

    http://www.cnblogs.com/dingyingsi/p/3760447.html    :  讲解 jvm https://blog.csdn.net/Luomingkui1109/a ...

  10. java文件上传下载 使用SmartUpload组件实现

    使用SmartUpload组件实现(下载jsmartcom_zh_CN.jar) 2017-11-07 1.在WebRoot创建以下文件夹,css存放样式文件(css文件直接拷贝进去),images存 ...