java反射机制简单介绍

java反射机制简单介绍

1.字节码。所谓的字节码就是当java虚拟机载入某个类的对象时,首先须要将硬盘中该类的源码编译成class文件的二进制代码(字节码),然后将class文件的字节码载入到内存中,之后再创建该类的对象


2.java反射的基础是Class类(注意不是小写的class),Class类实例代表着内存中的一份字节码。常见的获取Class类对象的方法例如以下(第一种为对象的方法,另外一种为类的方法):

Dog dog = new Dog();
Class dogClass = dog.getClass();
Class dogClass = Class.forName("Dog");
Class dogClass = Dog.class;


3.
获取反射的构造函数
。有了主要的Class类,要获取类的对象,首先要获取类的构造函数,这里主要使用的是Class类的getConstructor方法,例如以下所看到的:

		//使用StringBuffer来构造String对象
		String str1 = new String(new StringBuffer("hello"));
		//获取String类对应的构造函数对象
		Constructor c1 = String.class.getConstructor(StringBuffer.class);
		//错误,这里的參数类型必须和获取构造函数时的參数类型(及StringBuffer.class)一致
		String str2 = (String)c1.newInstance(new String("world"));
		//正确
		String str3 = (String)c1.newInstance(new StringBuffer("world"));
		System.out.println(str3);

4.获取反射的字段。

import java.lang.reflect.Field;

class Point{
	public int x;//这里是public
	private int y;//注意这里是private
	Point(int x,int y){
		this.x = x;
		this.y = y;
	}
}

public class ReflectTest {

	public static void main(String[] args) throws Exception {
		Point p = new Point(2,3);
		//getField仅仅能获得public的字段
		Field fieldX = p.getClass().getField("x");
		//获取x的值
		System.out.println(fieldX.get(p));
		//getDeclaredField能够获取全部字段
		Field fieldY = p.getClass().getDeclaredField("y");
		//设置y的属性
		fieldY.setAccessible(true);
		System.out.println(fieldY.get(p));		
	}

}


5.获取反射的方法。

	public static void main(String[] args) throws Exception {
		String s1 = "hello";
		//參数为函数名,函数的參数(可变长)
		Method m = s1.getClass().getMethod("charAt", int.class);
		//參数为要调用的对象,以及函数的參数。这里假设第一个參数为null,表示调用的是类的静态方法
		System.out.println(m.invoke(s1, 1));
	}


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/119179.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 动态dns有什么好处_动态DNS设置

    动态dns有什么好处_动态DNS设置1.核心思想配置动态DNS服务器的核心思想是:在DNS服务器上运行多个BIND,每个BIND为来自不同区域的用户提供解析,因此每个BIND都应具有不同的配置文件和域文件,并且分别监听在不同的端口。在

    2022年8月5日
    5
  • 对L1正则化和L2正则化的理解[通俗易懂]

    一、奥卡姆剃刀(Occam’srazor)原理:     在所有可能选择的模型中,我们应选择能够很好的解释数据,并且十分简单的模型。从贝叶斯的角度来看,正则项对应于模型的先验概率。可以假设复杂模型有较小的先验概率,简单模型有较大的先验概率。  二、正则化项     2.1、什么是正则化?   正则化是结构风险最小化策略的实现,在经验风险上加一个正则项或罚项,正则项一共有两种L1…

    2022年4月11日
    187
  • Hadoop的生态系统介绍

    Hadoop的生态系统介绍一.Hadoop生态系统架构二.生态系统介绍2.1HDFS(分布式文件存储系统)Hadoop分布式文件系统是Hadoop项目的两大核心之一,是针对谷歌文件系统(GoogleFileSystem,GFS)的开源实现。是Hadoop体系中数据存储管理的基础。它是一个高度容错的系统,能检测和应对硬件故障,用于在低成本的通用硬件上运行。HDFS简化了文件的一致性模型,通过流式数据访问…

    2022年5月19日
    50
  • 数据权限设计(转载)

    数据权限设计(转载)一、前言几乎在任何一个系统中,都离不开权限的设计,权限设计=功能权限+数据权限,而功能权限,在业界常常是基于RBAC(Role-BasedAccessControl)的一套方案。而数据权限,则根据不同的业务场景,则权限却不尽相同,应该根据具体的场景巧妙设计;且必须在项目开始时进行设计,不像功能权限一样,在项目结束的时候在追加。注:更细还可以加入字段权限1.1权限…

    2022年7月16日
    13
  • (四)概率

    (四)概率

    2021年11月16日
    78
  • RabbitMQ学习笔记(五)——RabbitMQ集群搭建&入门

    RabbitMQ学习笔记(五)——RabbitMQ集群搭建&入门目录RabbitMQ项目使用集群的好处1.扩展规模2.数据冗余3.高可用RabbitMQ集群搭建RabbitMQ集群原理RabbitMQ集群搭建步骤单节点安装Rabbitmq复制Erlangcookie集群镜像队列原理集群镜像队列设置方法Definition:策略定义设置镜像队列策略案例:将镜像配置到集群中的所有节点HAproxy+Keepalived高可用集群搭建实现高可用的方式HAProxy简介HAProxy配置方法Keepalived简介keepalived配置(两个节点都需要)总结Rabb

    2025年9月23日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号