Class类

在Java中,每个class都有一个相应的Class对象。也就是说,当我们编写一个类,编译完成后,在生成的.class文件中,就会产生一个Class对象,用于表示这个类的类型信息。

反射

Java的反射主要就是使用class对象生成对应类的实例、调用类的方法等对操作。示例代码:

Car.java

public class Car {

	private String brand;

	private String color;

	private Integer maxSpeed;

	public Car() {
} public Car(String brand, String color, Integer maxSpeed) {
super();
this.brand = brand;
this.color = color;
this.maxSpeed = maxSpeed;
} public String getBrand() {
return brand;
} public void setBrand(String brand) {
this.brand = brand;
} public String getColor() {
return color;
} public void setColor(String color) {
this.color = color;
} public Integer getMaxSpeed() {
return maxSpeed;
} public void setMaxSpeed(Integer maxSpeed) {
this.maxSpeed = maxSpeed;
} @Override
public String toString() {
return "Car [brand=" + brand + ", color=" + color + ", maxSpeed="
+ maxSpeed + "]";
} public void testPrivate() {
System.out.println("call testPrivate()");
} }

ReflectTest.java

public class RelectTest {

	public static void main(String[] args) throws ClassNotFoundException,
InstantiationException, IllegalAccessException, SecurityException,
NoSuchFieldException, NoSuchMethodException,
IllegalArgumentException, InvocationTargetException {
// 创建class,方法1
Class<?> clazz = Class.forName("com.Car");
// 创建class,方法2,相对来说,方法1更适合从配置中读取包的限定名字符串,避免了方法2中需要导包的操作
clazz = Car.class;
// 创建对象
Car car = (Car) clazz.newInstance();
// 获取所有的属性
Field[] fields = clazz.getDeclaredFields();
System.out.print("All fields:");
for (Field field : fields) {
System.out.print(field.getName() + ",");
}
System.out.println();
// 获取所有的public属性
Field[] publicFilds = clazz.getFields();
System.out.print("All public fields:");
for (Field field : publicFilds) {
System.out.print(field.getName() + ",");
}
System.out.println();
// 获取继承或接口中的所有方法
Method[] methods = clazz.getMethods();
System.out.println("All methods:");
for (Method method : methods) {
System.out.println(method.getReturnType() + " " + method.getName()
+ "(" + displayClass(method.getParameterTypes()) + ")");
}
System.out.println();
// 获取本类中的public, protected, private方法,不包括继承的方法
Method[] selfMethods = clazz.getDeclaredMethods();
System.out.println("All self methods:");
for (Method method : selfMethods) {
System.out.println(method.getReturnType() + " " + method.getName()
+ "(" + displayClass(method.getParameterTypes()) + ")");
}
System.out.println();
// 获取构造函数
Constructor[] constructors = clazz.getDeclaredConstructors();
System.out.println("All Constructor:");
for (Constructor constructor : constructors) {
System.out.println(constructor.getName() + "("
+ displayClass(constructor.getParameterTypes()) + ")");
}
System.out.println(); // 获取指定的属性
Field brandField = clazz.getDeclaredField("brand");
// 通过属性为字段赋值
brandField.setAccessible(true);// 由于brand属性为private,必须设置覆盖java对该字段的访问控制检查
brandField.set(car, "奔驰");
System.out.println(car); // 获取指定的方法
Method colorSetMethod = clazz.getDeclaredMethod("setColor",
String.class);
colorSetMethod.invoke(car, "黑色");
System.out.println(car); Method testPrivateMethod = clazz.getDeclaredMethod("testPrivate");
testPrivateMethod.invoke(car, null); } public static String displayClass(Class[] s) {
StringBuilder sb = new StringBuilder();
for (Class c : s) {
if (sb.length() > 0)
sb.append(", ");
sb.append(c.getName());
}
return sb.toString();
} }

Java反射的用法的更多相关文章

  1. java反射-- Field 用法实践

    java 反射是一种常用的技术手段, 通过加载类的字节码的方式来获取相关类的一些信息 比如成员变量, 成员方法等. Field 是什么呢? field 是一个类, 位于java.lang.reflec ...

  2. Java 反射经常用法演示样例

    <pre name="code" class="java">import java.lang.reflect.Constructor; import ...

  3. Java 反射的用法 有关Class类的解释

    package com.imooc.test;public class ClassDemo1 { public static void main(String[] args) { Foo fool = ...

  4. 不藏了,这些Java反射用法总结都告诉你们

    摘要:Java反射是一种非常强大的机制,它可以在同一个系统中去检测内部的类的字段.方法和构造函数.它非常多的Java框架中,都大量应用了反射技术,如Hibernate和Spring.可以说,反射机制的 ...

  5. Java Spring IOC用法

    Java Spring IOC用法 Spring IoC 在前两篇文章中,我们讲了java web环境搭建 和 java web项目搭建,现在看下spring ioc在java中的运用,开发工具为In ...

  6. Java反射的理解

    反射的作用:   1.运行时检查类的结构 2.运行时更改类的字段值 3.调用类的方法   准备知识:   Class类:虚拟机为每一个对象保存的一份对象所属类的清单: static Class for ...

  7. java 反射 动态代理

    在上一篇文章中介绍Java注解的时候,多次提到了Java的反射API.与javax.lang.model不同的是,通过反射API可以获取程序在运行时刻的内部结构.反射API中提供的动态代理也是非常强大 ...

  8. java反射机制 + Method.invoke解释 getMethod + 反射理解

    功能: 通过读取另一个Dll去创建一个控件(Form,Button,TextBox,DataGridView),然后对当中一些属性进行检查. 创建控件的大致流程是,Assembly->Modul ...

  9. Java反射机制深度剖析

    版权声明:本文为博主原创文章,转载请注明出处,欢迎交流学习! Java反射机制是Java语言中一种很重要的机制,可能在工作中用到的机会不多,但是在很多框架中都有用到这种机制.我们知道Java是一门静态 ...

随机推荐

  1. UPF Usage

    在 multi-voltage design 中,当涉及到多个power supply 时,需要 upf 文件来描述power细节,现将 upf 中的基本概念和使用方法记录如下: upf 中的基本概念 ...

  2. JAVA springmvc参数

    一.简单参数: package jd.com.contronller; import jd.com.projo.goods; import org.springframework.stereotype ...

  3. less初识

    一种 动态 样式 语言. LESS 将 CSS 赋予了动态语言的特性,如 变量, 继承,运算, 函数. LESS 既可以在 客户端 上运行 (支持IE 6+, Webkit, Firefox),也可以 ...

  4. Shell调试篇 转

    检查语法 -n选项只做语法检查,而不执行脚本. sh -n script_name.sh 启动调试 sh -x script_name.sh 进入调试模式后,Shell依次执行读入的语句,产生的输出中 ...

  5. 带您详细解读分布式文件系统HDFS

    一.HDFS的由来: 本地系统:一个节点作为系统,以前数据是存放在本地文件系统上的,但本地文件系统存在两个问题:1.本地节点存储容量不够大:2.本地节点会坏,数据不够安全.这时,人们开始利用闲置的计算 ...

  6. OO——电梯作业总结

    目录 电梯作业总结 程序结构与复杂度的分析 第一次作业 第二次作业 第三次作业 程序BUG的分析 互测 自动评测 有效性 总结 电梯作业总结 程序结构与复杂度的分析 第一次作业 1.设计思路 第一次作 ...

  7. 20155310 Exp6 信息收集与漏洞扫描

    20155310 Exp6 信息收集与漏洞扫描 基础问题回答 1.哪些组织负责DNS,IP的管理. 顶级的管理者是Internet Corporation for Assigned Names and ...

  8. 3、class文件加载过程

    1.加载2.链接(检验/准备/解析) 1/检验过程:检验class的数据格式.2/准备过程:创建静态域,并将这些域设为默认值.3/解析过程:在一个Java类中会包含对其它.类或接口的形式引用,包括它的 ...

  9. LoRa---她的简介和她的专业术语

    LoRa是LPWAN(低功耗广域网)通信技术的一种,其作用距离超过 15 公里,连接节点可达 100 万个.低功耗与长距离极限的组合可将最大数据速率提升至每秒 50千比特(Kbps). LoRa 是  ...

  10. TMS320VC5509片内ADC采集

    1. ADC采集比较简单,内部的10位的ADC,AIN0-AIN3的输入,主要是用的CSL的库函数#include <csl_adc.h> ; Uint16 samplestoraage[ ...