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方法 * 需要注意的是:实例化类中存在 ...
随机推荐
- Android中的通信Volley
1. Volley简介 我们平时在开发Android应用的时候不可避免地都需要用到网络技术,而多数情况下应用程序都会使用HTTP协议来发送和接收网络数据.Android系统中主要提供了两种方式来进行H ...
- 01布尔模型&倒排索引
原文链接: http://www.cnblogs.com/jacklu/p/8379726.html 博士一年级选了这门课 SEEM 5680 Text Mining Models and Appli ...
- C# Selenium with PhantomJSDriver get image width and height (获取图片的长和高)
//get image width and height var image=driver.FindElement(By.ClassName("it-Header_authorImage&q ...
- TypeError: not all arguments converted during string formatting
print ("So, you're 5r old, %r tall and %r heavy." % (age, height, weight)) print ("So ...
- Guava cache功能简介(转)
原文链接:http://ifeve.com/google-guava-cachesexplained/ 范例 LoadingCache<Key, Graph> graphs = Cache ...
- Linux 用户篇——用户管理命令之useradd、passwd、userdel、usermod
一.用户重要,用户管理命令同样重要 用户是Linux系统安全的核心,每个登录Linux系统的用户都会分配相应的权限,这些权限取决于能否访问系统中各种对象.而管理这些用户的相关信息离不开用户管理命令,比 ...
- 并发queue
在并发队列上JDK提供了两套实现,一个是以ConcurrentLinkedQueue为代表的高性能队列,一个是以BlockingQueue接口为代表的阻塞队列,无论哪种都继承自Queue. 一.Con ...
- Java Number类和Math类
Java Number类 一般的,当需要使用数字的时候,我们通常使用内置数据类型,如:byte.int.long.double等. 然而,在实际开发过程中,我们经常会遇到需要使用对象,而不是内置数据类 ...
- 【hdoj_1250】Hat's Fibonacci(大数)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1250 思路:本题的Fibonacci数列是扩展的四阶的Fibonacci数列,用递推关系式求解即可. 题目 ...
- 学习build-web-application-with-golang第四章内容
GITHUB网址: https://github.com/astaxie/build-web-application-with-golang 内容 4.表单 4.1 处理表单的输入 4.2 验证表单的 ...