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方法也可以获取到getDeclaredMethods()返回所有private和public方法名,。getDeclaredMethods()获取不到父类中的方法,只能获取到本来中的方法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 ...
随机推荐
- 前端DDD总结与思考
软件开发架构演化与DDD起源 单体服务架构:大概10年前,我在武汉工作的时候,甲方客户购买我们的产品,一般都是连着设备一起购买,一套软件系统,一台惠普或者戴尔的企业级服务器,再加一个黑色的铁盒,销售部 ...
- DDD实践反思
某大型互联网公司于2019年开始在XX中台财务域进行DDD实践.事后回顾,整体并没有达到预期的效果,个人也做了很多的反思和总结,形成此文. 1. 背景 为什么当时要实践DDD?其中的缘由比较复杂,可以 ...
- 10276 - Hanoi Tower Troubles Again!(思维,模拟)
People stopped moving discs from peg to peg after they know the number of steps needed to complete t ...
- Selenium3自动化测试【14】元素定位之ID
元素定位 Selenium需要告知其如何去定位元素,来模拟用户动作.例如要操作Bing搜索页. 首先要找到搜索框与搜索按钮: 通过键盘输入检索的关键字: 用鼠标单击搜索按钮: 提交搜索请求. Sele ...
- POJ2771最大独立集元素个数
题意: 女生和男生之间只要满足四个条件中的一个,那么两个人就不会在一起!然后给出一些男生和女生,问最多多少人一起做活动彼此不会产生暧昧关系. 思路: 这样的问题还是比较裸的问法 ...
- Windows下包管理工具Bower的安装和使用
目录 安装Bower Bower的使用 安装Bower Windows下安装Bower之前,先安装好 nodejs 和 msysgit 环境 然后我们就可以使用npm包管理工具下载并全局安装bower ...
- 脱离xml使用JavaConfig实现Spring配置
总结 情况一: 配置类中类名添加 @Configuration 注解,同时提供一个方法返回一个Bean实例,且这个方法添加注解 @Bean ,就可以由Spring管理此对象 如下所示: User.ja ...
- js 实现 bind 的这五层,你在第几层?
最近在帮朋友复习 JS 相关的基础知识,遇到不会的问题,她就会来问我. 这不是很简单?三下五除二,分分钟解决. function bind(fn, obj, ...arr) { return fn.a ...
- Getting Started and Beyond|云原生应用负载均衡选型指南
作者 冉昕,腾讯云服务网格TCM产品经理,现负责云原生流量接入网关与应用通信可观测性等产品特性策划与设计工作. 刘旭,腾讯云高级工程师,专注容器云原生领域,有多年大规模 Kubernetes 集群管理 ...
- Python分支结构你真的搞定了吗?
分支结构 分支结构能够让计算机像人一样进行思考,应对不同的场景做出不同的回应. Python中不支持switch语法,目前仅支持if/else形式,但是在Python3.10的测试版本中,貌似支持了s ...