java反射菜鸟教程_Java反射

java反射菜鸟教程_Java反射JAVA反射机制1定义:主要是指程序可以访问,检测和修改它本身状态或行为的一种能力,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义。反射是java中一种强大的工具,能够使我们很方便的创建灵活的代码,这些代码可以再运行时装配,无需在组件之间进行源代码链接。但是反射使用不当会成本很高!2.作用A:反编译:.class–>.javaB:通过反射机制访问java对象的属性…

大家好,又见面了,我是你们的朋友全栈君。

JAVA反射机制

1定义:

主要是指程序可以访问,检测和修改它本身状态或行为的一种能力,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义。

反射是java中一种强大的工具,能够使我们很方便的创建灵活的代码,这些代码可以再运行时装配,无需在组件之间进行源代码链接。但是反射使用不当会成本很高!

2.作用

A:反编译:.class–>.java

B:通过反射机制访问java对象的属性,方法,构造方法等;

这样好像更容易理解一些,下边我们具体看怎么实现这些功能。

3.获取Class对象有三种方式:

(1)..通过Object类的getClass()方法。例如:

Class c1 = new String(“”).getClass();

(2).通过Class类的静态方法——forName()来实现:

Class c2 = Class.forName(“MyObject”);

(3).如果T是一个已定义的类型的话,在java中,它的.class文件名:T.class就代表了 与其匹配的Class对象,例如:

Class c3 = Manager.class;

Class c4 = int.class;

Class c5 = Double[].class;

4.Class类中存在以下几个重要的方法:

a.getName()

一个Class对象描述了一个特定类的特定属性,而这个方法就是返回String形式的该类 的简要描述。由于历史原因,对数组的Class对象

调用该方法会产生奇怪的结果。

b.newInstance()

该方法可以根据某个Class对象产生其对应类的实例。需要强调的是,它调用的是此类 的默认构造方法。例如:

MyObject x = new MyObject();

MyObject y = x.getClass().newInstance();

c.getClassLoader()

返回该Class对象对应的类的类加载器。

d.getComponentType()

该方法针对数组对象的Class对象,可以得到该数组的组成元素所对应对象的Class对 象。例如:

int[] ints = new int[]{1,2,3};

Class class1 = ints.getClass();

Class class2 = class1.getComponentType();

而这里得到的class2对象所对应的就应该是int这个基本类型的Class对象。

e.getSuperClass()

返回某子类所对应的直接父类所对应的Class对象。

f.isArray()

判定此Class对象所对应的是否是一个数组对象。

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

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

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


相关推荐

  • 解决:java.lang.AbstractMethodError: null

    解决:java.lang.AbstractMethodError: nullspringboot2.x整合sqlserver使用jtds连接池连数据库的时候出现异常2017-02-1512:12:23.955WARN14844—[main]ationConfigEmbeddedWebApplicationContext:Exceptionencounteredduringcontextinitializ…

    2022年6月2日
  • SpringBoot线程池使用详解

    SpringBoot线程池使用详解前提摘要:基于Springboot2.1.4.RELEASE▎配置TaskExecutorimportjava.util.concurrent.ThreadPoolExecutor;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importorg.springframework.core.ta…

    2022年6月22日
  • Qt动画播放之QMovie类[通俗易懂]

    Qt动画播放之QMovie类[通俗易懂]主要是用到QMovie类实现在事件触发时开启动画播放效果(需要注意的是,这个动画播放默认是循环播放的,如果不做特殊处理动画会一直播放)QMovie*movie=newQMovie(“aaa.gif”);ui->movieLabel->setMovie(movie);movie->start(); //启动gif图片//movie->stop(); /…

    2022年6月29日
  • php_sphinx安装使用

    php_sphinx安装使用

    2021年10月19日
  • Docker安装Nexus3私服以及使用

    Docker安装Nexus3私服以及使用一、Nexus简介二、安装步骤(使用docker)1、搜索Nexus3镜像dockersearchnexus​2、拉取Nexus3镜像dockerpullsonatype/nexus3​3、创建Nexus3容器dockerrun-itd-p8081:8081–privileged=true–namenexus3\-v/data/nexus-data:/var/nexus-data–restar…

    2022年7月13日
  • 传统蓝牙HCI流控(HCI flow control)

    传统蓝牙HCI流控(HCI flow control)一.声明本专栏文章我们会以连载的方式持续更新,本专栏计划更新内容如下:第一篇:蓝牙综合介绍,主要介绍蓝牙的一些概念,产生背景,发展轨迹,市面蓝牙介绍,以及蓝牙开发板介绍。第二篇:Transport层介绍,主要介绍蓝牙协议栈跟蓝牙芯片之前的硬件传输协议,比如基于UART的H4,H5,BCSP,基于USB的H2等第三篇:传统蓝牙controller介绍,主要介绍传统蓝牙芯片的介绍,包括射频层(RF),基带层(baseband),链路管理层(LMP)等第四篇:传统蓝牙host介绍,主

    2022年6月6日

发表回复

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

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