一.反射的概念

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。要想解剖一个类,必须先要获取到该类的字节码文件对象。而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对象.

通俗的说,java虚拟机在加载类的时候会找到对应的class文件,并生成一个class对象,每个类class对象只会生成一次,就算是基本数据类型,也会有一个class对象,所以说在java中一切皆对象,这里引入一位博主的图片,我觉得概括的很好



图片来自[https://blog.csdn.net/sinat_38259539/article/details/71799078]

###二.反射中使用的方法
####1.获取class对象的方法
```
package Test;

public class ReflectTest {

public static void main(String[] args) throws Exception{

Student s1 = new Student();

Class stu1 = s1.getClass();

System.out.println(stu1.getName());

  1. Class stu2 = Student.class;
  2. System.out.println(stu1==stu2);
  3. //最常用方法
  4. Class stu3 = Class.forName("Test.Student");
  5. System.out.println(stu1==stu3);
  6. }

}

class Student{

}


  1. 一般常用第三种方法,第一个都有类的实例了,第二个需要导入类包,第三个forName中的路径为绝对路径。
  2. <br/>
  3. ####2.获得类的方法并调用

package Test;

import java.lang.reflect.Method;

public class ReflectTest {

public static void main(String[] args) throws Exception{

ReflectTest obj = new ReflectTest();

Method m1 = obj.getClass().getMethod("age",int.class);

m1.invoke(obj, new Integer(27));

m1.invoke(obj, 28);

Method m2 = obj.getClass().getMethod("age",Integer.class);

m2.invoke(obj, new Integer(27));

m2.invoke(obj,28);

}

public void age(int age) {

System.out.println("int age = " + age);

}

public void age(Integer age) {

System.out.println("Integer age = " + age);

}

}

  1. 输出:
  2. int age = 27
  3. int age = 28
  4. Integer age = 27
  5. Integer age = 28
  6. <br/>
  7. ####3.获取类信息的系列方法
  8. Singer类为例子

package Test;

public class Singer {

public String name;

public String sex;

private String song;

  1. public Singer() {
  2. }
  3. public Singer(String name, String sex, String song) {
  4. this.name = name;
  5. this.sex = sex;
  6. this.song = song;
  7. }
  8. public void setName(String name) {
  9. this.name = name;
  10. }
  11. public void setSex(String sex) {
  12. this.sex = sex;
  13. }
  14. public void setSong(String song) {
  15. this.song = song;
  16. }
  17. public String getName() {
  18. return name;
  19. }
  20. public String getSex() {
  21. return sex;
  22. }
  23. public String getSong() {
  24. return song;
  25. }

}


package Test;

import java.lang.reflect.*;

public class ReflectTest1 {

public static void main(String[] args) throws Exception{

Class clazz = Class.forName("Test.Singer");

  1. //获得所有方法
  2. Method[] methods = clazz.getDeclaredMethods();
  3. for (Method m: methods) {
  4. System.out.println(m);
  5. }
  6. //获取所有成员属性变量
  7. Field[] fields = clazz.getDeclaredFields();
  8. for (Field f: fields) {
  9. System.out.println(f);
  10. }
  11. //获取所有构造方法
  12. Constructor[] constructors = clazz.getDeclaredConstructors();
  13. for (Constructor c: constructors) {
  14. System.out.println(c);
  15. }

}

}


  1. 输出:
  1. public java.lang.String Test.Singer.getName()
  2. public void Test.Singer.setName(java.lang.String)
  3. public java.lang.String Test.Singer.getSex()
  4. public java.lang.String Test.Singer.getSong()
  5. public void Test.Singer.setSex(java.lang.String)
  6. public void Test.Singer.setSong(java.lang.String)
  7. public java.lang.String Test.Singer.name
  8. public java.lang.String Test.Singer.sex
  9. private java.lang.String Test.Singer.song
  10. public Test.Singer()
  11. public Test.Singer(java.lang.String,java.lang.String,java.lang.String)
  1. <br/>
  2. ###三. 总结
  3. * 获得Class对象
  4. * 调用Class的方法
  5. * 使用反射API来操作信息

Java 基础总结--反射的基本操作的更多相关文章

  1. 黑马程序员:Java基础总结----反射

    黑马程序员:Java基础总结 反射   ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 反射 反射的基石:Class类 Class类代表Java类,它的各个实例对象又分别 ...

  2. Java基础之一反射

    反射是框架设计的灵魂 (使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码))   一.反射的概述 JAVA反射机制是在运行状态中,对于任意一个类,都能够 ...

  3. Java基础之—反射

    反射是框架设计的灵魂 (使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码))   一.反射的概述 JAVA反射机制是在运行状态中,对于任意一个类,都能够 ...

  4. JAVA基础知识|反射

    一.理解反射 1.1.基础概念 反射:在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为ja ...

  5. java基础之反射机制

    一.概念 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为jav ...

  6. java基础(十一 )-----反射——Java高级开发必须懂的

    本文我们通过一个实际的例子来演示反射在编程中的应用,可能之前大家对反射的学习,仅仅是停留在概念层面,不知道反射究竟应用在哪,所以是一头雾水.相信通过这篇教程,会让你对反射有一个更深层次的认知. 概念 ...

  7. java基础之反射---重要

    java反射: 反射是框架设计的灵魂 (使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码)):   1:获取Class字节码文件对象的三种方式: /** ...

  8. 【Java基础】反射和注解

    前言 在Java中,反射机制和注解机制一直是一个很重要的概念,那么他们其中的原理是怎么样呢,我们不仅仅需要会使用,更要知其然而之所以然. 目录 反射机制 反射如何使用 注解定义 注解机制原理 注解如何 ...

  9. java基础篇---反射机制

    一.JAVA是动态语言吗? 一般而言,说到动态言,都是指在程序运行时允许改变程序结构或者变量类型,从这个观点看,JAVA和C++一样,都不是动态语言. 但JAVA它却有着一个非常突出的动态相关机制:反 ...

随机推荐

  1. K. Random Numbers(Gym 101466K + 线段树 + dfs序 + 快速幂 + 唯一分解)

    题目链接:http://codeforces.com/gym/101466/problem/K 题目: 题意: 给你一棵有n个节点的树,根节点始终为0,有两种操作: 1.RAND:查询以u为根节点的子 ...

  2. Go语言 2 变量、常量和数据类型

    文章由作者马志国在博客园的原创,若转载请于明显处标记出处:http://www.cnblogs.com/mazg/ Go学习群:415660935 2.1 变量 变量是对一块内存空间的命名,程序可以通 ...

  3. TCP 传输控制协议(转)

    开头先说几个协议: IP:网际协议 TCP:传输控制协议 Http:超文本传输协议 AMQP:高级消息队列协议 一:TCP是什么? TCP(Transmission Control Protocol ...

  4. NASA: A Closer View of the Moon(近距离观察月球)

    Posted to Twitter by @Astro_Alex, European Space Agency astronaut Alexander Gerst, this image shows ...

  5. kvm命令参数记录

    /usr/libexec/qemu-kvm -cpu host -m 1024 -enable-kvm -drive file=/var/lib/libvirt/images/zxc_linux1.i ...

  6. 122.Best Time to Buy and Sell Stock II---dp

    题目链接:https://leetcode.com/problems/best-time-to-buy-and-sell-stock-ii/description/ 题目大意:基本定义与121类似,不 ...

  7. 大数据系列之分布式数据库HBase-0.9.8安装及增删改查实践

    若查看HBase-1.2.4版本内容及demo代码详见 大数据系列之分布式数据库HBase-1.2.4+Zookeeper 安装及增删改查实践 1. 环境准备: 1.需要在Hadoop启动正常情况下安 ...

  8. NEERC2012

    NEERC2012 A - Addictive Bubbles 题目描述:有一个\(n \times m\)的棋盘,还有不同颜色的棋子若干个,每次可以消去一个同种颜色的联通块,得到的分数为联通块中的棋 ...

  9. tyvj P1050 最长公共子序列

    题目链接:http://tyvj.cn/p/1050 题解: 裸题,只是为了测试LCS模板写对没有…… #include<cstdio> #include<cstring> # ...

  10. 服务号使用微信网页授权(H5应用等)

    获取授权准备 AppId 服务号已经认证且获取到响应接口权限 设置网页授权域名 公众号设置 - 功能设置 - 网页授权域名.注意事项: 回调页面域名或路径需使用字母.数字及"-"的 ...