Java反射初识
反射Class类
Class类是反射的根源,很多很多的类,经过抽象,得出了一个Class类,包括类名,构造方法,属性方法等。得到Class类的对象的三种方式:
- Object类中的getClass()方法
- 通过类名.class
- 通过Class.forName()方法
代码示例:
import org.junit.Test;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
public class ReflectionDemo {
//JUnit测试的方法一定要是public
/**
* 获取Class对象的三种方式
*/
@Test
public void function() {
//第一种方式:通过对象的getClass方法获得
Dog dog = new Dog("Tom", "男", 5);
Class dogClass1 = dog.getClass();
//第二种方式:通过类.class
Class dogClass2 = Dog.class;
//第三种方式:通过Class.forName()方法
try {
Class dogClass3 = Class.forName("reflection.Dog");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
/**
* 通过反射来实例化对象
*/
@Test
public void function2() {
try {
Class<Dog> dogClass = (Class<Dog>) Class.forName("reflection.Dog");
//获取默认的构造器,并创建一个Dog对象
Dog dog1 = ((Dog) dogClass.newInstance());//调用了默认的无参构造
System.out.println("dog1:" + dog1);
//获取一个指定的构造器,并通过构造器创建一个Dog对象
Constructor<Dog> constructor = dogClass.getConstructor(String.class, String.class, int.class);
Dog dog2 = constructor.newInstance("Tom", "female", 4);
System.out.println("dog2:" + dog2);
//获取所有的构造方法
Constructor<?>[] constructors = dogClass.getConstructors();
for (int i = 0; i < constructors.length; i++) {
//获取构造方法的参数个数
System.out.println("构造方法参数个数为:" + constructors[i].getParameterCount());
}
//获取所有属性(包括私有属性)
Field[] fields = dogClass.getDeclaredFields();
for (int i = 0, len = fields.length; i < len; i++) {
//获得属性的修饰符
int modifiers = fields[i].getModifiers();
System.out.println(Modifier.toString(modifiers) + " " + fields[i].getType() + " " + fields[i].getName());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
总结
通过反射获取到的Class对象,我们可以用于创建对象,获得构造器,获取参数类型等。
Java反射初识的更多相关文章
- 初识Java反射
要详细的了解Java反射,就得要了解Java的类加载以及何为运行时动态加载等等概念.本文抛开其余概念,简单介绍Java反射,详细介绍会在以后有一个系统而全面的认识过后展开. 反射是Java被视为动态语 ...
- java反射教程
什么是反射,为什么它是有用的,以及如何使用它? 1.什么是反射? “反射通常是JVM中运行的程序需要检测和修改运行时程序的行为的一种能力.”这个概念通常与内省(Introspection)混淆.以下是 ...
- 第28章 java反射机制
java反射机制 1.类加载机制 1.1.jvm和类 运行Java程序:java 带有main方法的类名 之后java会启动jvm,并加载字节码(字节码就是一个类在内存空间的状态) 当调用java命令 ...
- Java反射机制
Java反射机制 一:什么事反射机制 简单地说,就是程序运行时能够通过反射的到类的所有信息,只需要获得类名,方法名,属性名. 二:为什么要用反射: 静态编译:在编译时确定类型,绑定对象,即通过 ...
- java反射(基础了解)
package cn.itcast_01; /** *Person类 */ public class Person { /** 姓名 */ private String name; ...
- java基础知识(十一)java反射机制(上)
java.lang.Class类详解 java Class类详解 一.class类 Class类是java语言定义的特定类的实现,在java中每个类都有一个相应的Class对象,以便java程序运行时 ...
- java基础知识(十一)java反射机制(下)
1.什么是反射机制? java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象都能够调用他的属性和方法,这种动态获取属性和方法的功能称为java的反射机制. ...
- java反射学习之二万能EXCEL导出
一.EXCEL导出的实现过程 假设有一个对象的集合,现在需要将此集合内的所有对象导出到EXCEL中,对象有N个属性:那么我们实现的方式是这样的: 循环这个集合,在循环集合中某个对象的所有属性,将这个对 ...
- java反射学习之一反射机制概述
一.反射机制背景概述 1.反射(reflection)是java被视为动态语言的一个关键性质 2.反射机制指的是程序在运行时能获取任何类的内部所有信息 二.反射机制实现功能概述 1.只要给定类的全名, ...
随机推荐
- WPF 设置窗体大小为显示器工作区域大小
最近做的项目遇到一个问题,窗体在1680*1050分辨率下显示,系统字体设置为小字体时,显示没问题,但是调到中等字体时,窗体显示位置出了问题.主窗体为无边框窗体,拖动及放大缩小事件都是自己写的. ...
- django搭建一个小型的服务器运维网站-用户登陆与session
目录 项目介绍和源码: 拿来即用的bootstrap模板: 服务器SSH服务配置与python中paramiko的使用: 用户登陆与session; 最简单的实践之修改服务器时间: 查看和修改服务器配 ...
- 容器宽高不确定,图片宽高不确定,css如何实现图片响应式?
图片响应式 在响应式开发中最烦恼的应该就是图片了,虽然图片设置max-width: 100%;可以让图片宽度占满容器,但是高度就不能自适应了.如果将容器高度限死,那么我们就要使用媒体查询来控制容器的高 ...
- openpyxl模块简单入门
一.openpyxl简介和安装 python 读写 excel 有好多选择,但是,方便操作的库不多,在我尝试了几个库之后,我觉得两个比较方便的库分别是 xlrd/xlwt.openpyxl. 之所以推 ...
- java切分查询数据库表
在实际应用中,我经常用到遇到根据单号查询,单号又是批量如1000个单号,直接1000个in子查询是不行的,子查询是用上限的.如果表中数据达到上百万以上.即使有单号字段有索引查询也是很慢.这时可以用切分 ...
- vue分页练习
<!doctype html> <html> <head> <meta charset="UTF-8"> <title> ...
- HDU 2063 过山车 (匈牙利算法)
题目链接:HDU 2063 Problem Description RPG girls今天和大家一起去游乐场玩,终于可以坐上梦寐以求的过山车了.可是,过山车的每一排只有两个座位,而且还有条不成文的规矩 ...
- Go-Mutex互斥量
先来看一段go1.12.5中Mutex的源码: // Copyright 2009 The Go Authors. All rights reserved. // Use of this source ...
- BERT实战——基于Keras
1.keras_bert 和 kert4keras keras_bert 是 CyberZHG 大佬封装好了Keras版的Bert,可以直接调用官方发布的预训练权重. github:https://g ...
- inclusion_tag 基本使用
inclusion_tag的用途 inclusion_tag可以实现从后台往前端传递绑定数据的样式,一般用来动态显示模板页面中显示固定格式的数据. inclusion_tag的用法 step1: 编写 ...