Java反射机制 之 获取类的 方法 和 属性(包括构造函数)(Day_06)
把自己立成帆,才能招来凤。
运行环境
JDK8 + IntelliJ IDEA 2018.3
本文中使用的jar包链接
https://files.cnblogs.com/files/papercy/jsoup_jar%E5%8C%85.rar
获取构造函数(方法)
需要获取类的结构
1 package com.wenhaitao.Demo2;
2
3 public class Student {
4 private String name;
5 private int age;
6 private String sex;
7
8 public Student() {
9 }
10
11 public Student(String name, int age, String sex) {
12 this.name = name;
13 this.age = age;
14 this.sex = sex;
15 }
16
17 public String getName() {
18 return name;
19 }
20
21 public void setName(String name) {
22 this.name = name;
23 }
24
25 public int getAge() {
26 return age;
27 }
28
29 public void setAge(int age) {
30 this.age = age;
31 }
32
33 public String getSex() {
34 return sex;
35 }
36
37 public void setSex(String sex) {
38 this.sex = sex;
39 }
40
41 @Override
42 public String toString() {
43 return "Student{" +
44 "name='" + name + '\'' +
45 ", age=" + age +
46 ", sex='" + sex + '\'' +
47 '}';
48 }
49 }
通过 getFields() getDeclaredFields() getField() getDeclaredField()这四个方法获取各种字段
1 package com.wenhaitao.Demo2;
2
3 import java.lang.reflect.Constructor;
4 import java.lang.reflect.Field;
5 import java.lang.reflect.Method;
6 import java.util.Arrays;
7
8 public class Demo1 {
9 public static void main(String[] args) {
10 Student student = new Student();
11 Class clzstu = student.getClass();
12 Field[] fields= clzstu.getDeclaredFields();
13 System.out.println(Arrays.toString(fields));
14
15 try {
16 Field field = clzstu.getDeclaredField("name");
17 System.out.println("field:"+field);
18 } catch (NoSuchFieldException e) {
19 e.printStackTrace();
20 }
21 Field[] fields1 =clzstu.getDeclaredFields();
22 System.out.println("fields1:"+fields1);
23 System.out.println(Arrays.toString(fields1));
24
25 // Method
26 try {
27 Method method =clzstu.getMethod("test",String.class);
28 System.out.println("*****************");
29 System.out.println("method:"+method);
30 Method[] methods = clzstu.getMethods();
31 System.out.println("methods:"+methods);
32 System.out.println("****************");
33 System.out.println(Arrays.toString(methods));
34 System.out.println("*****************");
35 Method[] methods1=clzstu.getDeclaredMethods();
36 System.out.println("methods1:"+Arrays.toString(methods1));
37
38
39 } catch (NoSuchMethodException e) {
40 e.printStackTrace();
41 }
42 // modifiler
43 int num = clzstu.getModifiers();
44 System.out.println("num:"+num);
45
46 // constructor
47 try {
48 Constructor constructor =clzstu.getConstructor(String.class);
49 System.out.println("constructor:"+constructor);
50 } catch (NoSuchMethodException e) {
51 e.printStackTrace();
52 }
53 // constructors
54 Constructor[] constructors = clzstu.getConstructors();
55 System.out.println("constructor:"+constructors);
56 System.out.println("*****************");
57 System.out.println(Arrays.toString(constructors));
58
59 //
60
61 }
62
63 }
结论:
getFields()返回所有
public
的字段。
getDeclaredFields()返回所有
private
和public字段
。
getField()
返回指定字段名public
的字段。
getDeclaredField()
返回指定字段名的private
和public字段名
。
- 获取类中的方法
1 public void method1(String str){
2 System.out.println("public 修饰的方法");
3 }
4
5 private void method2(){
6 System.out.println("private 修饰的方法");
7 }
8
9 String method3(String name,Integer sex,Date age){
10 System.out.println("默认修饰"+name+" "+sex+" "+age);
11 return name+" "+sex+" "+age;
12 }
13
14 protected void method4(){
15 System.out.println("protected 修饰的方法");
16 }
通过 getMethods() getDeclaredMethods() getMethod() getDeclaredMethod()这四个方法获取各种方法
1 import java.lang.reflect.Method;
2 import java.util.Date;
3
4 public class Test06 {
5 public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException {
6
7 //加载Class对象
8 //会报出不存在该类的异常
9 Class c=Class.forName("com.reflection.model.Student");
10
11 //获取所有公共方法
12 System.out.println("================获取所有公共方法=================");
13 Method[] methods=c.getMethods();
14 for (Method method:methods) {
15 System.out.println("公共方法:"+method);
16 }
17 //获取所有方法
18 System.out.println("================获取所有的方法=================");
19 Method[] declaredMethods=c.getDeclaredMethods();
20 for (Method declaredmethod:declaredMethods) {
21 System.out.println("所有方法:"+declaredmethod);
22 }
23
24 System.out.println("================获取特定(带参)方法=================");
25 Method method1=c.getMethod("method1",String.class);
26 System.out.println("特定(带参)方法:"+method1);
27
28 System.out.println("================获取特定(不带参)方法=================");
29 Method method2=c.getDeclaredMethod("method2");
30 System.out.println("特定(不带参)方法:"+method2);
31
32 System.out.println("================获取特定(多参)方法=================");
33 Method method3=c.getDeclaredMethod("method3", String.class, Integer.class, Date.class);
34 System.out.println("特定(多参)方法:"+method3);
35 }
36 }
结论:
getMethods()返回所有
public
的方法,通过结果可以看出getMethods()连父类中的
。public
方法也可以获取到getDeclared
Method
s()返回所有private
和public方法名,
。getDeclared
Method
s()获取不到父类中的方法,只能获取到本来中的方法
get
返回指定字段名Method
()public
的方法名。getDeclared
返回指定字方法名的Method
()private
和public字段名
。
获取到父类的构造方法,getConstructors()不能
getDeclaredConstructors()也
只能获取到本类中的
构造方法
ps:
如果,您希望更容易地发现我的新博客,不妨点击一下关注。
如果你觉得本篇文章对你有所帮助,请给予我更多的鼓励,
因为,我的写作热情也离不开您的肯定支持,感谢您的阅读,我是【肥肥也】!
Java反射机制 之 获取类的 方法 和 属性(包括构造函数)(Day_06)的更多相关文章
- 浅谈Java反射机制 之 获取类的 方法 和 属性(包括构造函数)
上一篇 获取 类 的字节码文件 我们讲到了获取类的字节码文件的三种方法 第三种方法通过getClass("全路径名")获取字节码文件最符合要求 1.获取构造方法 先贴上我们要获取的 ...
- 浅谈Java反射机制 之 获取类的字节码文件 Class.forName("全路径名") 、getClass()、class
另一个篇:获取 类 的 方法 和 属性(包括构造函数) 先贴上Java反射机制的概念: AVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法: 对于任意一个对象,都能够调用它 ...
- JAVA反射机制教程-获取类对象
1. 什么是类对象 类对象,就是用于描述这种类,都有什么属性,什么方法的 2. 获取类对象 获取类对象有3种方式(1). Class.forName(2). Hero.class(3). new He ...
- Java反射机制涉及的类常见方法使用总结
import java.lang.reflect.Constructor; import java.lang.reflect.*; /*Class:代表一个字节码文件的对象,每当有类被加载进内存,JV ...
- 浅谈Java反射机制 之 使用类的 属性、方法和构造函数
前面两篇我们总结了Java反射机制如何获取类的字节码,如何获取构造函数,属性和方法, 这篇我们将进一步验证如何使用我们获取到的属性.方法以及构造函数 1.使用 反射 获取到的 属性 import ja ...
- java 通过反射机制调用某个类的方法
package net.xsoftlab.baike; import java.lang.reflect.Method; public class TestReflect { public s ...
- Java反射机制能够获取的信息,与应用
一.什么是Java反射机制? [1]反射机制是在运行状态中,对于任何一个类,都能够知道这个类的所有属性和方法: [2]对于任意一个对象,都能够调用它的任意一个属性和方法: 像这种动态获取类的信息以及动 ...
- 利用Java反射机制对实体类的常用操作工具类ObjectUtil
代码: ObjectUtil类: import java.lang.reflect.Field; import java.math.BigDecimal; import java.text.Simpl ...
- 通过java反射机制,获取对象的属性和值(包括所有继承的父类)
java的反射机制提供了两种方法: getDeclaredFields() :该方法能获取到本类的所有属性,包括private,protected和public,但不能获取到继承的父类的属性. get ...
随机推荐
- mariadb_1 数据库介绍及基本操作
数据库介绍 1.什么是数据库? 简单的说,数据库就是一个存放数据的仓库,这个仓库是按照一定的数据结构(数据结构是指数据的组织形式或数据之间的联系)来组织,存储的,我们可以通过数据库提供的多种方法来管理 ...
- Salesforce学习之路(三)利用VS Code结合Git开发Salesforce
在前面说了一些有关Admin的知识,但实际开发运用中,仅凭Admin的配置很难满足项目的定制化需求,因此基于CRM的二次开发则应运而生. 由于国内资料相对较少,所以很多入门新手无处下手,那这里就简单介 ...
- Docker学习笔记---通俗易懂
目录 Docker 简介 Docker安装 Docker的基本组成 安装Docker 配置阿里云镜像加速 回顾helloworld流程 工作原理 Docker的常用命令 帮助命令 镜像命令 容器命令 ...
- hdu4807枚举费用流
题意: 给你一个有向图,每条边上都有每一时刻的最大流量,有k个人在点0,他们要去点n-1,问你最晚到达的那个人最快要多久. 思路: 这个题目做了很多次,用过费用流,也用过最大流,结 ...
- 【转】如何用MTR诊断网络问题
MTR 是一个强大的网络诊断工具,管理员能够用它诊断和隔离网络错误,并向上游提供商提供有关网络状态的有用报告.MTR 通过更大的采样来跟踪路由,就像 traceroute + ping 命令的组合.本 ...
- hdu4530 水题
题意: 小Q系列故事--大笨钟 Time Limit: 600/200 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Total ...
- hdu4717 三分(散点的移动)
题意: 给你一些点,这些点有各自的初始位置,移动速度和方向,问你什么时候任意两点中最长的距离最小,求时刻和此时的距离.. 思路: 感觉题目很赞,一开始想不到三分,因为么有办法证明他 ...
- C#-获取磁盘,cpu,内存信息
获取磁盘信息 zongdaxiao = GetHardDiskSpace("C") * 1.0 / 1024; user = GetHardDiskFreeSpace(" ...
- nodejs-安装/helloworld/npm
安装---------------------------------------------------------------- http://nodejs.cn/download/ 完成之后确定 ...
- 5.IA-32寄存器
寄存器(Register)是CPU内部用来存放数据的一些小型存储区域,它与RAM(Random Access Memory,随机存储器.内存)略有不同.CPU访问(Access)RAM中的数据时要经过 ...