Java反射机制涉及的类常见方法使用总结
import java.lang.reflect.Constructor;
import java.lang.reflect.*; /*Class:代表一个字节码文件的对象,每当有类被加载进内存,JVM就会在堆上给
* 该类创建一个代表该类的对象。每个类的Class对象是的。
*Class类没有构造方法,获得类对应的Class方法有3种
*1.:getClass()、2.类、接口.class 、3.Class.forName("类全名");
*比较推荐使用第3种方式,使用前两种方式程序扩展性不好。
*
*Class类中定义了许多关于获取类中信息的方法:
*1.获得该类的构造方法,属性,方法、实例的方法。包含特定情况的获得
*2.获得该类的父类,实现的接口,该类的类加载器,类名、包名等。
*3.判断该类的具体是接口、类、内部类等
*4.方法中加Declared表示可以获得本类定义的任何方法和属性
*
*注意:关于获得到的方法、属性、构造器的具体操作被封装在import java.lang.reflect包里面
*Method:里面最常用的方法invoke(对象,可变参数列表)--调用指定的方法
*Field:get/set;获取和修改属性值
*Constrcutor:使用newInstance(可变参数列表)--调用指定构造方法创建类的实例
*注意:私有的要调用前先去掉访问权限限制setAccssible()
* */
public class ReflectionWithClass { public static void main(String[] args) throws Exception { //第一种方式获得Class对象,比较麻烦,要先创建对象,再使用对象调用方法
HelloKitty ht = new HelloKitty();
Class clazz = ht.getClass(); //第二种方式获得Class对象。使用静态的属性创建
Class clazz1 = HelloKitty.class; //使用Class对象的静态方法获得Class对象
Class clazz2 = Class.forName("HelloKitty"); //获得该类的类加载器
ClassLoader c = clazz2.getClassLoader();
System.out.println(c.toString()); Class clazz3 = String.class;
System.out.println(clazz3.getClassLoader()); //获得该类的实例
Object obj = clazz2.newInstance();
//获得该类的构造器---公开的,getDeclaredConstructors()--可以获得私有的
Constructor[] con = clazz2.getDeclaredConstructors();
for(Constructor cc:con){
System.out.print(cc + " ");
} //获得类的方法
Method[] mm = clazz2.getDeclaredMethods();
for(Method mmm:mm){
System.out.print(mmm + " ");
} System.out.println();
//获取特定的方法
Method m = clazz2.getMethod("walk",null);
System.out.println(m.toString()); Field[] f = clazz2.getDeclaredFields();
for(Field ff:f){
System.out.print(ff+ " ");
} //调用指定的方法---先获取,在调用;注意私有方法先设置访问权限
Method m1 = clazz2.getMethod("walk", null);
System.out.println("hahahhha");
m1.invoke(obj,null); //调用指定的构造方法创建类实例;先获取在调用
Constructor cc = clazz2.getConstructor(int.class,String.class);
Object o1 = cc.newInstance(12,"blue"); //获取和修改对象的属性值
Field ffs = clazz2.getDeclaredField("age");
ffs.setAccessible(true);
ffs.set(obj, 29);
Object oo = ffs.get(obj);
System.out.println(oo); } } class HelloKitty {
private int age;
public String color = "pink";
public HelloKitty() {} public HelloKitty(int age) {
this.age = age;
} public HelloKitty(int age,String color) {
this.age = age;
this.color = color;
System.out.println("okokok");
} public void walk(){
System.out.println("hhhhhhhhhhhhh");
} public void talk(int i){
System.out.println(i + "----------" + age);
}
}
Java反射机制涉及的类常见方法使用总结的更多相关文章
- 浅谈Java反射机制 之 获取类的 方法 和 属性(包括构造函数)
上一篇 获取 类 的字节码文件 我们讲到了获取类的字节码文件的三种方法 第三种方法通过getClass("全路径名")获取字节码文件最符合要求 1.获取构造方法 先贴上我们要获取的 ...
- Java反射机制 之 获取类的 方法 和 属性(包括构造函数)(Day_06)
把自己立成帆,才能招来凤. 运行环境 JDK8 + IntelliJ IDEA 2018.3 本文中使用的jar包链接 https://files.cnblogs.com/files/papercy ...
- java 通过反射机制调用某个类的方法
package net.xsoftlab.baike; import java.lang.reflect.Method; public class TestReflect { public s ...
- 浅谈Java反射机制 之 使用类的 属性、方法和构造函数
前面两篇我们总结了Java反射机制如何获取类的字节码,如何获取构造函数,属性和方法, 这篇我们将进一步验证如何使用我们获取到的属性.方法以及构造函数 1.使用 反射 获取到的 属性 import ja ...
- 利用Java反射机制对实体类的常用操作工具类ObjectUtil
代码: ObjectUtil类: import java.lang.reflect.Field; import java.math.BigDecimal; import java.text.Simpl ...
- 浅谈Java反射机制 之 获取类的字节码文件 Class.forName("全路径名") 、getClass()、class
另一个篇:获取 类 的 方法 和 属性(包括构造函数) 先贴上Java反射机制的概念: AVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法: 对于任意一个对象,都能够调用它 ...
- JAVA反射机制教程-获取类对象
1. 什么是类对象 类对象,就是用于描述这种类,都有什么属性,什么方法的 2. 获取类对象 获取类对象有3种方式(1). Class.forName(2). Hero.class(3). new He ...
- Java反射机制(取得类的结构)
通过反射得到一个类中的完整的结构,就要使用java.lang.reflect包中的以下几个类: Constructor:表示类中的构造方法 Field:表示类中的属性 Method:表示类中的方法 ...
- Java反射机制(Class类的使用)
1:通过无参构造实例化对象 package cn.itcast; /* * 通过无参构造实例化对象 * 通过Class类本身实例化对象,使用newInstance方法 * 需要注意的是:实例化类中存在 ...
随机推荐
- javaScript操作数组的常用方法
map(映射), reduce(规约), forEach(遍历), filter(过滤),它们都是高阶函数,都是以传入不同的函数来以不同的方式操作数组元.ie都不支持 判断是否为数组 Array.is ...
- AJAX的前世今生与未来
一.通过三个问答来认识一下Ajax 什么是Ajax? Ajax是Asynchronous Javascript And XML的缩写,它是一种技术. Ajax有什么用? 这一技术能够向服务器请求额外的 ...
- laravel学习教程整理
百度传课:https://chuanke.baidu.com/v5847462-219167-1421398.html
- JavaScript 判断手机端访问并跳转 redirect mobile
假如你的手机端网站在 /m 目录下 (function(a,b){if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer| ...
- Pyrhon代码的中文问题
解决代码中出现中文乱码的问题: 使用中文需要在第一行声明编码#encoding=utf-8 或者#coding=utf-8 python只检查#.coding和编码字符串,所以你可能回见到下面的声明方 ...
- linux设备驱动模型-浅析-转
1. typeof typeof并非ISO C的关键字,而是gcc对C的一个扩展.typeof是一个关键字(类似sizeof),用于获取一个表达式的类型. 举个简单的例子: char tt; typ ...
- sea.js中的checkbox批量操作
<table width="100%" border="0" cellspacing="0" cellpadding="0& ...
- 【51nod1006】simple KMP
原题意看的挺迷糊的,后来看了http://blog.csdn.net/YxuanwKeith/article/details/52351335大爷的题意感觉清楚的多…… 做法也非常显然了,用树剖维护后 ...
- mysql 操作时间戳
1.将long显示成时间 SELECT FROM_UNIXTIME(1249488000, '%Y%m%d' ) 2.日期格式化成时间戳 SELECT UNIX_TIMESTAMP('2016-05- ...
- Java容器---基本概念
1.持有对象 Java容器类类库的用途是“保存对象”,并将其划分为两个不同的概念: (1) Collection: 一个独立元素的序列,这些元素都服从一条或多条规则.List必须按照插入的顺序保存元素 ...