第二篇 java中的反射

java中的反射

一、反射的概述

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;

这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。要想解剖一个类,必须先要获取到该类的字节码文件对象。

而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对象.

1、创建实体类

 1 public class User {
 2     private int id;
 3     private int age;
 4     private String uname;
 5
 6     public User(int id, int age, String uname) {
 7         super();
 8         this.id = id;
 9         this.age = age;
10         this.uname = uname;
11     }
12     public User() {
13         super();
14         // TODO Auto-generated constructor stub
15     }
16     public int getId() {
17         return id;
18     }
19     public void setId(int id) {
20         this.id = id;
21     }
22     public int getAge() {
23         return age;
24     }
25     public void setAge(int age) {
26         this.age = age;
27     }
28     public String getUname() {
29         return uname;
30     }
31     public void setUname(String uname) {
32         this.uname = uname;
33     }
34
35     @Override
36     public String toString() {
37         return "User [id=" + id + ", age=" + age + ", uname=" + uname + "]";
38     }
39
40 }

2、测试java.lang.Class对象的获取方式

 1 /**
 2  * 各种不同的类型的class对象的获取
 3  * 测试java.lang.Class对象的获取方式
 4  * @author Zhang XiaoDao
 5  *
 6  */
 7 public class Demo01 {
 8     public static void main(String[] args) {
 9         String path = "com.zzp.bean.User";
10         try {
11             //加载javaBean
12             Class clazz = Class.forName(path);
13
14             //对象是表示或封装一些数据,一个类被加载后(只能加载一次),jvm会创建一个对应该类的class对象,
15             //类的整个结构信息会放到对应的class对象中,这个class对象就像是一面镜子
16             //通过这面镜子,我们能看见对应类的全部信息
17             System.out.println(clazz);
18             //一个类只对应一个class对象,只被加载一次
19             Class clazz2 = Class.forName(path);
20
21             //通过.class和getClass()获取对象
22             Class clazz3 =User.class;
23             Class clazz4 = path.getClass();
24
25             //通过.class也能获取基本数据类型
26             Class int1 = int.class;
27
28             //也能获取数组对象,一维数组arr01和arr02都是一样的,二维数组arr03与前面两个不同,
29             //数组的类型不一样,获取到的对象也不一样d与前面三个都不相同
30             int[] arr01 = new int[10];
31             int[] arr02 = new int[30];
32             int[][] arr03 = new int[10][20];
33             double[] d = new double[10];
34
35         } catch (ClassNotFoundException e) {
36             // TODO Auto-generated catch block
37             e.printStackTrace();
38         }
39     }
40 }

原文地址:https://www.cnblogs.com/zhangzhipeng001/p/9119690.html

时间: 2024-12-13 10:48:05

第二篇 java中的反射的相关文章

浅说Java中的反射机制(二)

写过一篇Java中的反射机制,不算是写,应该是抄了,因为那是别人写的,这一篇也是别人写的,摘抄如下: 引自于Java基础--反射机制的知识点梳理,作者醉眼识朦胧.(()为我手记) 什么是反射? 正常编译执行java文件时,会生成一个.class文件,反射就是一个反编译的过程,它可以通过.class文件得到一个java对象.一个类会有很多组成部分,比如成员变量.成员方法.构造方法等,反射可以通过加载类(加载类是个什么东西?一直搞不清楚),解剖出类的各个组成部分. 为什么要用反射? 我们需要访问一个

第16篇-JAVA 类加载与反射

第16篇-JAVA 类加载与反射 每篇一句 :敢于弯曲,是为了更坚定的站立 初学心得: 追求远中的欢声笑语,追求远中的结伴同行 (笔者:JEEP/711)[JAVA笔记 | 时间:2017-05-12| JAVA 类加载与反射 ] 1.类加载 类加载器负责将 .class 文件(可能在磁盘上, 也可能在网络上) 加载到内存中, 并为之生成对应的 java.lang.Class 对象 当程序主动使用某个类时,如果该类还未被加载到内存中,系统会通过加载.连接.初始化三个步骤来对该类进行初始化,如果没

Java 中的反射机制

一.什么是Java中的反射: Reflection 是 Java 程序开发语言的特征之一,它允许运行中的 Java 程序对自身进行检查,或者说“自审”,并能直接操作程序的内部属性和方法.Java 的这一能力在实际应用中用得不是很多,但是在其它的程序设计语言中根本就不存在这一特性.例如,Pascal.C 或者 C++ 中就没有办法在程序中获得函数定义相关的信息.Reflection 是 Java 被视为动态(或准动态)语言的关键,允许程序于执行期 Reflection APIs 取得任何已知名称之

黑马程序员【java中的反射机制】

Java中的反射机制 ------- android培训.java培训.期待与您交流! ---------- java的反射机制是java的特性之一,反射机制是构建框架技术的基础所在,使用反射可以使程序更加灵活,避免将程序写死在代码里.相对于很多初学者只接触过java基础的人,反射还是一个很朦胧难懂的概念,下面我们就来说一下反射的一些应用. java反射机制是指在运行状态中,动态获取信息以及动态调用对象方法的功能.java反射有3个动态性质:1.运行时生成对象实例,2.运行期间调用发放,3.运行

java中利用反射机制绕开编译器对泛型的类型限制

首先看下面这个例子 public static void main(String[] args) { ArrayList<Integer> al1 = new ArrayList<Integer>(); al1.add(1); ArrayList<String> al2 = new ArrayList<String>(); al2.add("hello"); //int型链表和string型链表,结果为true System.out.pr

Java中的反射——(1)什么是反射

Java程序中的各个Java类属于同一类事物,描述这类事物的Java类名就是Class. public class ReflectTest { public static void main(String[] args) throws ClassNotFoundException { String str1 = "abc"; Class cls1 = String.class; Class cls2 = str1.getClass(); Class cls3 = Class.forNa

JAVA中的反射只获取属性的get方法

JAVA中的反射只获取属性的get方法 在开发过程中,我们经常需要获取类中某些属性的get方法,此时我们需要使用到反射,例如,我们在获得一个对象后,需要知道该对象的哪些属性有值,哪些没有值,方便我们后面的处理. 譬如在我们拼SQL语句时,就需要知道哪些字段为空或为NULL,此时我们在拼语句的时候需要剔除掉,若是我们采用一般的判断的办法,则会很复杂(需要处理好SQL中的AND关键字的有无 ),当然,我们也有另外的解决办法(例如将非空的键和值存入map中,再将map存入list集合中,然后循环集合做

关于JAVA中的反射机制的总结

JAVA中的反射机制是一种能够大大增强程序扩展性的技术.当一个程序封装完成后(生成exe文件),如果想要对该程序进行功能扩展,不用进行代码的从新修改(也不可能拿到源码),只要修改配置文件(一般是XML)就可以完成. 这样的程序为外部提供了一个接口,只要按照该接口的规则定义一个对象(功能),即可以为应用程序扩展该功能. 可以这样比喻,你买了一块电脑主板(封装好的程序),此时你想要添加一块声卡(要扩展的功能),此时只能够通过一个pci接口(应用程序提供的接口)来进行扩展.声卡的接口必须符合PCI的规

java中使用反射获取pojo(实体)类的全部字段值

说起反射.不得不说它实在是太强大了,通过反射就能够轻轻松松拿到各种东东,假设你想在项目中解除对某个类的依赖,能够考虑用反射. 今天跟大家分享的是通过java中的反射,获取pojo类的全部字段值. 为什么要做这个操作的呢?主要是为了重写实体类的toString方法.有人会说.直接重写toString方法.返回字段.toString()的字符串不就可以了. 这么做的确能够.可是假设你的pojo类有上百个,上千个,你还要一个一个改吗?所以我们须要从新的方向去解决. 由于我们全部的pojo类.都继承一个