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反射机制涉及的类常见方法使用总结的更多相关文章

  1. 浅谈Java反射机制 之 获取类的 方法 和 属性(包括构造函数)

    上一篇 获取 类 的字节码文件 我们讲到了获取类的字节码文件的三种方法 第三种方法通过getClass("全路径名")获取字节码文件最符合要求 1.获取构造方法 先贴上我们要获取的 ...

  2. Java反射机制 之 获取类的 方法 和 属性(包括构造函数)(Day_06)

    把自己立成帆,才能招来凤. 运行环境 JDK8 + IntelliJ IDEA 2018.3  本文中使用的jar包链接 https://files.cnblogs.com/files/papercy ...

  3. java 通过反射机制调用某个类的方法

    package net.xsoftlab.baike; import java.lang.reflect.Method; public class TestReflect {     public s ...

  4. 浅谈Java反射机制 之 使用类的 属性、方法和构造函数

    前面两篇我们总结了Java反射机制如何获取类的字节码,如何获取构造函数,属性和方法, 这篇我们将进一步验证如何使用我们获取到的属性.方法以及构造函数 1.使用 反射 获取到的 属性 import ja ...

  5. 利用Java反射机制对实体类的常用操作工具类ObjectUtil

    代码: ObjectUtil类: import java.lang.reflect.Field; import java.math.BigDecimal; import java.text.Simpl ...

  6. 浅谈Java反射机制 之 获取类的字节码文件 Class.forName("全路径名") 、getClass()、class

    另一个篇:获取 类 的 方法 和 属性(包括构造函数) 先贴上Java反射机制的概念: AVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法: 对于任意一个对象,都能够调用它 ...

  7. JAVA反射机制教程-获取类对象

    1. 什么是类对象 类对象,就是用于描述这种类,都有什么属性,什么方法的 2. 获取类对象 获取类对象有3种方式(1). Class.forName(2). Hero.class(3). new He ...

  8. Java反射机制(取得类的结构)

    通过反射得到一个类中的完整的结构,就要使用java.lang.reflect包中的以下几个类:   Constructor:表示类中的构造方法 Field:表示类中的属性 Method:表示类中的方法 ...

  9. Java反射机制(Class类的使用)

    1:通过无参构造实例化对象 package cn.itcast; /* * 通过无参构造实例化对象 * 通过Class类本身实例化对象,使用newInstance方法 * 需要注意的是:实例化类中存在 ...

随机推荐

  1. HTML如何编写为桌面程序

    学过/用过HTML的人应该都知道HTML是标记语言,是在网页上执行/使用的,在这里小编告诉你HTML也可以用来做桌面程序,这种桌面程序一般是微客户端 工具/原料   html dreamweaver ...

  2. mysql安装后开启远程

    操作系统为centos7 64 1.修改 /etc/my.cnf,在 [mysqld] 小节下添加一行:skip-grant-tables=1 这一行配置让 mysqld 启动时不对密码进行验证 2. ...

  3. 内存不够清理方法,costdown项目时如果裁剪不下来,也可以参考

    Linux下清理内存和Cache方法 /proc/sys/vm/drop_caches 频繁的文件访问会导致系统的Cache使用量大增 $ free -m total used free shared ...

  4. Appium 1.6.3使用的自动化测试引擎

    automationName项的值: Appium:默认值. Selendroid:安卓2.3(API 9)-4.1(API 16)版本使用. UiAutomator2:最新安卓版本. XCUITes ...

  5. centos上Jenkins搭建

    Jenkins可以提供持续集成服务,它的运行环境(runtime)需要Tomcat和JDK 要把Jenkins让Tomcat启动服务,而Tomcat需要JDK的环境 详情配置参见: http://ww ...

  6. Visual Tracking with Fully Convolutional Networks

    http://blog.csdn.net/carrierlxksuper/article/details/48918297 传统的跟踪方法依赖低维的人工特征,但这种特征对目标的外观变化等问题不够鲁棒. ...

  7. Ubuntu下Hadoop的安装和配置

    最近又需要要搭hadoop环境,所以开始学习,下面是我的笔记,仅供大家参考! Hadoop安装: JDK1.6+ 操作系统:Linux,Window和Unix也可以做Hadoop的开发,只有Linux ...

  8. js + -操作符

    js + 举例说明最有效了... "11"+1='111' "11"+'1'="111" 11+1=12 大概的感觉就是+操作符会优先输入S ...

  9. DB2和Oracle中Date比较

  10. 作死自救日记——不小心修改linux下/etc/sudoers权限的解决办法

    作死自救日记,献给跟我一样不小心作了死的人 ================================================ 今天不小心作死修改了/etc/sudoers的权限,作死命 ...