Java知识点总结(反射-通过反射操作类的属性和方法 )

CAP摇摆人
• 阅读 1896

Java知识点总结(反射-通过反射操作类的属性和方法 )

@(Java知识点总结)[Java, 反射]

使用反射操作类的属性和方法:

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
 
public class Test03 {
 
  // 通过反射API调用构造方法,构造对象
  public static void getInstance(Class clazz){
 
   Student student;
   try {
     student = (Student) clazz.newInstance();  // 其实调用无参构造器
     student.setName("张三");
     System.out.println(student.getName());
   } catch (InstantiationException | IllegalAccessException e) {
     e.printStackTrace();
   }
   
   try {
     Constructor c = clazz.getDeclaredConstructor(int.class, String.class);// 调用有参构造器
     Student student2 = (Student) c.newInstance(1, "李四");
     System.out.println(student2.getName());
   } catch (NoSuchMethodException | SecurityException | InstantiationException |
      IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
     e.printStackTrace();
   }
 
  }
 
  // 通过反射API调用普通方法
  public static void method(Class clazz)  {
   try {
     Student student = (Student) clazz.newInstance();
     // 获取方法
     Method method = clazz.getDeclaredMethod("setName", String.class);
     // 激活方法
     method.invoke(student, "王武");  // student.setName("王武");
     System.out.println(student.getName());
   } catch (InstantiationException | IllegalAccessException
      | NoSuchMethodException | SecurityException | IllegalArgumentException | InvocationTargetException e) {
     e.printStackTrace();
   }
  }
 
  //通过反射API操作属性
  public static void field(Class clazz){
   try {
     Student student = (Student) clazz.newInstance();
     Field f1 = clazz.getDeclaredField("name");
     
     // name 是private属性,如果不写会:IllegalAccessException
     f1.setAccessible(true); // 这个私有属性不用做安全检查了,可以直接访问
     f1.set(student, "赵六");
     
     Field f2 = clazz.getDeclaredField("sex"); // sex 是public 属性,不用忽略安全检查
     f2.set(student, "男");
     
     for (Field f : clazz.getDeclaredFields()) {
      f.setAccessible(true);
      System.out.println(f.get(student)); //注意参数是对象名,而不是属性名
     }
     
   } catch (NoSuchFieldException | SecurityException |
      IllegalArgumentException | IllegalAccessException | InstantiationException e) {
     e.printStackTrace();
   }
  }
  public static void main(String[] args) {
   String path = "com.gs.Student";
   try {
     Class clazz = Class.forName(path);
     //getInstance(clazz);
     //method(clazz);
     field(clazz);
   } catch (Exception e) {
     e.printStackTrace();
   }
 
  }
}
点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
java反射大全
作者对反射的理解:方法的调用(正常的调用:对象.方法()。反射调用方法:方法.对象())静态属性的调用(正常的调用:类.属性。反射调用:属性.类)常见反射的用法:        1.通过反射获取类Class<?demo1Class
Wesley13 Wesley13
3年前
java中 什么是反射?
JAVA反射机制是在运行状态中,对于任意一个实体类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。JAVA反射(放射)机制:“程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言(https://www.oschina.net/act
Wesley13 Wesley13
3年前
java反序列化——apache
看了好久的文章才开始分析调试java的cc链,这个链算是java反序列化漏洞里的基础了。分析调试的shiro也是直接使用了cc链。首先先了解一些java的反射机制。一、什么是反射反射是Java的特征之一,是一种间接操作目标对象的机制,核心是JVM在运行的时候才动态加载类,并且对于任意一个类,都能够知道这个类的所有属性和方法,调用方法/访问属性
Wesley13 Wesley13
3年前
java面试(反射)05
1.什么是反射JAVA反射机制是在运行状态中,对于任意一个类,都能够获取这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取类信息以及动态调用对象内容就称为java语言的反射机制。2.反射的作用在运行时判断任意一个对象所属的
Wesley13 Wesley13
3年前
java反射
packagecom.reflect;importjava.lang.reflect.InvocationTargetException;/\\\反射学习\反射的功能就是类、对象,可以通过反射获取里面的方法、属性的功能\@authorAdministrator\\/public
Wesley13 Wesley13
3年前
java的反射机制
java中的反射可以将代码结构更加灵活,通过反射机制可以访问属性、方法和构造方法sun公司为我们提供的4大类反射:java.lang.reflect.methodjava.lang.Classjava.lang.reflect.modifierjava.lang.reflect.Constructor有以下几种方式:比如是Employ
lzy lzy
3年前
RPC框架手撕之路---java反射以及动态代理机制
在上一篇文章中,我们提到了,RPC框架所需要的java基础,第一点就是java的动态代理机制,动态代理机制的基础是反射,无论是在实际编程或者是面试时,都是java知识的重中之重。java反射:定义:在运行状态中,对于任意一个类,都能够知道这一个类的所有属性和方法,对于任意一个对象都能够通过反射机制调用一个类的任意方法,这种动态获取类信息以及动态调用类方法
御弟哥哥 御弟哥哥
4年前
Java基础与提高干货系列 -- Java反射机制
前言今天介绍下Java的反射机制,以前我们获取一个类的实例都是使用new一个实例出来。那样太low了,今天跟我一起来学习学习一种更加高大上的方式来实现。正文Java反射机制定义Java反射机制是指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性
Wesley13 Wesley13
3年前
Java基础之反射(非常重要)
反射是框架设计的灵魂(使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码))一、反射的概述JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法
Wesley13 Wesley13
3年前
Java反射技术概述
1.什么是Java反射?  就是正在运行,动态获取这个类的所有信息2.反射机制的作用  a.反编译:.class.java  b.通过反射机制,访问Java对象的属性,方法,构造方法等3.反射机制的应用场景  Jdbc加载驱动  SpringIOC实现  Java框架4.创建对象的两种方式  a.直
Wesley13 Wesley13
3年前
Java重点基础:反射机制
一、什么是反射?Java反射说的是在运行状态中,对于任何一个类,我们都能够知道这个类有哪些方法和属性。对于任何一个对象,我们都能够对它的方法和属性进行调用。我们把这种动态获取对象信息和调用对象方法的功能称之为反射机制。二、反射的三种方式