美文网首页
Java 反射

Java 反射

作者: 饱饱想要的灵感 | 来源:发表于2023-05-14 09:31 被阅读0次

Java 反射

Java反射是指在运行时动态地获取类的信息并操作类的属性、方法、构造器等。

使用Java反射可以在运行时动态地创建对象、调用方法、获取属性等,使得程序更加灵活。

需要注意的是,Java反射的使用会带来一定的性能损失,因为反射需要在运行时动态获取类的信息,而不是在编译时就确定类的信息。因此,在实际开发中,应该尽量避免过度使用反射,以提高程序的性能。

下面是Java反射的基本用法:

1 获取Class对象

在Java中,每个类都有一个对应的Class对象,可以通过以下方式获取Class对象:

  • 对象.getClass()方法:获取对象的Class对象
  • 类名.class:获取类的Class对象
  • Class.forName()方法:根据类的全限定名获取Class对象

例如:

String str = "Hello, world!";
Class<?> clazz1 = str.getClass();
Class<?> clazz2 = String.class;
Class<?> clazz3 = Class.forName("java.lang.String");

2 获取类的属性

可以通过Class对象获取类的属性,包括公共属性和私有属性。获取属性的方式有以下几种:

  • getFields()方法:获取类的公共属性
  • getDeclaredFields()方法:获取类的所有属性,包括私有属性; 如果是私有变量, 需要加setAccessible(true)才能访问

例如:

Class<?> clazz = String.class;
Field[] fields = clazz.getFields();
Field[] declaredFields = clazz.getDeclaredFields();

// 如果是私有变量, 需要加setAccessible(true)才能访问
declaredFields[0].setAccessible(true);
declaredFields[0].get(obj);

3 获取类的方法

可以通过Class对象获取类的方法,包括公共方法和私有方法。获取方法的方式有以下几种:

  • getMethods()方法:获取类的公共方法
  • getDeclaredMethods()方法:获取类的所有方法,包括私有方法

例如:

Class<?> clazz = String.class;
Method[] methods = clazz.getMethods();
Method[] declaredMethods = clazz.getDeclaredMethods();

4 获取类的构造器

可以通过Class对象获取类的构造器,包括公共构造器和私有构造器。获取构造器的方式有以下几种:

  • getConstructors()方法:获取类的公共构造器
  • getDeclaredConstructors()方法:获取类的所有构造器,包括私有构造器

例如:

Class<?> clazz = String.class;
Constructor<?>[] constructors = clazz.getConstructors();
Constructor<?>[] declaredConstructors = clazz.getDeclaredConstructors();

5 创建对象

可以通过Class对象创建类的实例,包括无参构造器和有参构造器。创建对象的方式有以下几种:

  • newInstance()方法:调用类的无参构造器创建对象
  • getConstructor()方法:获取类的有参构造器并调用创建对象

例如:

Class<?> clazz = String.class;
String str1 = (String) clazz.newInstance();
Constructor<?> constructor = clazz.getConstructor(String.class);
String str2 = (String) constructor.newInstance("Hello, world!");

6 调用方法

可以通过Class对象调用类的方法,包括公共方法和私有方法。调用方法的方式有以下几种:

  • invoke()方法:调用类的方法

例如:

Class<?> clazz = String.class;
String str = "Hello, world!";
Method method = clazz.getMethod("length");
int length = (int) method.invoke(str);

相关文章

  • 博客地址

    java注解-01、java注解-02、Git面试资源java反射-01、java反射-02、java反射-03为...

  • Java反射机制入门

    Java反射机制入门 一、什么是反射 JAVA反射机制(The JAVA reflection mechanism...

  • Java基础之反射

    Java基础之—反射(非常重要)Java中反射机制详解Java进阶之reflection(反射机制)——反射概念与...

  • 反射之一

    总结内容源自一下文章粗浅看java反射机制反射机制应用实践谈谈java反射机制Java Reflection(反射...

  • 反射之二

    总结内容源自一下文章粗浅看java反射机制反射机制应用实践谈谈java反射机制Java Reflection(反射...

  • Java基础之反射

    Java基础之反射 反射基本介绍 反射的使用通过反射调用属性和方法通过反射获取配置文件 反射基本介绍 Java反射...

  • Java 反射机制

    Java 反射机制 什么是反射 Java 反射是Java语言的一个很重要的特征,它使得Java具体了“动态性”。 ...

  • 一探究竟:Java反射效率低的原因到底在哪?

    预备知识 了解 Java 反射基本用法 看完本文可以达到什么程度 了解 Java 反射原理及 Java 反射效率低...

  • 面试官说:大家都说 Java 反射效率低,你知道原因在哪里么

    预备知识 了解 Java 反射基本用法 看完本文可以达到什么程度 了解 Java 反射原理及 Java 反射效率低...

  • Java面试题之JavaSE高级

    一、Java中的反射 1.说说你对Java中反射的理解 java中的反射首先是能够获取到Java...

网友评论

      本文标题:Java 反射

      本文链接:https://www.haomeiwen.com/subject/vdrssdtx.html