Java反射机制实在运行状态时,对于任意一个类,都能够知道这个类的属性和方法,对于任意一个对象,都能够调用他的任意一个属性和方法

获取Class对象的三种方式

  • Object类中的getClass()方法

    想要用这种方式,必须要明确具体的类,并创建对象
Person p = new Person();
Class clazz = p.getClass();
  • 任何数据类型都具备一个静态的属性.class来获取其对应的Class对象

    相对简单,但是还是要明确用到类中的静态成员
Class clazz = Person.class;
  • 通过给定的类的字符串名称就获取该类,该方法就是forName
String className = "com.abc.Person"; //此处为class的全称
Class clazz = Class.forName(className);

获取构造函数

  • 无参构造函数
String name = "com.abc.Person";
Class clazz = Class.forName(name);
Object obj = clazz.newInstance();
  • 有参构造函数

    获取到该构造函数:getConstructor(paramterTypes);
String name = "com.abc.Person";
Class clazz = Class.forName(name);
Constructor constructor = clazz.getConstructor(String.class, int.class);
Object obj = constructor.newInstance("test", 10);

获取字段

公有

Class clazz = Class.forName("com.abc.Person");
Field field = clazz.getField("age"); //只能获取公有的
Object o = field.get(obj);
System.out.println(o);

私有

Class clazz = Class.forName("com.abc.Person");
Field field = clazz.getDeclaredField("age"); //只获取本类,但包含私有
//对私有字段的访问取消权限检查,暴力访问
field.setAccessible(true);
Object obj = clazz.newInstance();
field.set(obj, 20);
Object o = field.get(obj);
System.out.println(o);

获取方法

  • 获取所有方法
Class clazz = Class.forName("com.abc.Person");
Method[] methods = clazz.getMethods(); //获取的都是公有的方法。
//methods = clazz.getDeclaredMethods(); //只获取本类中所有方法,包含私有
for(Method method : methods){
System.out.println(method);
}
  • 调用无参方法
Class clazz = Class.forName("com.abc.Person");
Method method = clazz.getMethod("show", null); //获取空参数一般方法。
//Object obj = clazz.newInstance();
Constructor constructor = clazz.getConstructor(String.class, int.class);
Object obj = constructor.newInstance("name", 10);
method.invoke(obj, null);
  • 调用有参方法
Class clazz = Class.forName("com.abc.Person");
Method method = clazz.getMethod("show", String.class, int.class);
Object obj = clazz.newInstance();
method.invoke(obj, "name", 20);

Java学习笔记-反射机制的更多相关文章

  1. JAVA 学习笔记 - 反射机制

    1.   JAVA反射机制的概念 2. 怎样实例化一个 Class对象 Class.forName(包名.类名); 对象.getClass(); 类.class; ================== ...

  2. java学习之反射机制

    java语言区别于C,C++等准静态语言的最大特点就是java的反射机制.静态语言的最直接定义就是不能在运行时改变程序结构或变量的类型.按照这样的定义,python,ruby是动态语言,C,C++,J ...

  3. 0032 Java学习笔记-类加载机制-初步

    JVM虚拟机 Java虚拟机有自己完善的硬件架构(处理器.堆栈.寄存器等)和指令系统 Java虚拟机是一种能运行Java bytecode的虚拟机 JVM并非专属于Java语言,只要生成的编译文件能匹 ...

  4. java学习--Reflection反射机制

    JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制. ...

  5. Java学习:反射机制简介

    反射机制是什么 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法: 对于任意一个对象,都能够调用它的任意一个方法和属性: 这种动态获取的信息以及动态调用对象的方法的功能称为ja ...

  6. Java学习之反射机制及应用场景

    前言: 最近公司正在进行业务组件化进程,其中的路由实现用到了Java的反射机制,既然用到了就想着好好学习总结一下,其实无论是之前的EventBus 2.x版本还是Retrofit.早期的View注解框 ...

  7. Java学习笔记--反射

    什么是Java反射 概念 java反射是指java能够在运行时确定类的类型信息,包括其方法.字段.构造函数等,并能够通过反射调用类或者类对象的方法.在Java中,java.lang.Class类与ja ...

  8. Java 学习之反射机制“解刨”分解类,并获取内容!

    正常情况下,单纯的做开发是接触不到反射机制的(额,当然并不排除例外的情况了).下面我就对我学到的反射方面的知识做一个小小的总结,旨在复习和以后的查看. 原理分析: 所谓反射就是将一个类当做我们研究的对 ...

  9. Java学习笔记--反射API

    反射API 1.反射API的介绍 通过反射API可以获取Java程序在运行时刻的内部结构.比如Java类中包含的构造方法.域和方法等元素,并可以与这些元素进行交换.     按照 一般地面向对象的设计 ...

随机推荐

  1. 以组件的方式,添加redis_cache

    settings.py中文件内设置如下: CACHES = { 'default':{ 'BACKEND':'django_redis.cache.RedisCache', 'LOCATION':'r ...

  2. codeforces#562 Div2 C---Increasing by modulo【二分】

    题目:http://codeforces.com/contest/1169/problem/C 题意: 有n个数,每次可以选择k个,将他们+1并对m取模.问最少进行多少次操作,使得序列是非递减的. 思 ...

  3. 安卓数据库sqllite查看工具Android Debug Database使用教程

    要使用Android Debug Database,首先得在安卓项目的build.gradle(module:app)文件中加入如下代码: debugCompile 'com.amitshekhar. ...

  4. ila核数据输出

    在Tcl Console中输入以下命令(其中dataxxxx表示文件名,hw_ila_2则为ila窗口名): write_hw_ila_data -csv_file -force dataxxxx [ ...

  5. AGC029C - Lexicographic constraints

    记录我心路历程吧,这道小水题暴露出我很多问题. 给定 \(n\) 个字符串长度 \(a_i\) ,求字符集最小多大,才能构造出按字典序比较 \(s_1 < s_2 < \dots < ...

  6. python实现 单链表的翻转

    #!/usr/bin/env python #coding = utf-8 class Node: def __init__(self,data=None,next = None): self.dat ...

  7. xgboost 特征重要性计算

    在XGBoost中提供了三种特征重要性的计算方法: ‘weight’ - the number of times a feature is used to split the data across ...

  8. oracle数据库体系结构

    一.oracle数据库体系结构 基本组成: Oracle server:一般情况下是一个instance和一个database组成 一般:1个instance只能对应一个数据库. 特殊:1个数据库可以 ...

  9. 利用Python构建时间序列模型解决实际问题的正确姿势

    要本着应用到实际工作中目的去学时间序列分析,才能深入浅出的学会,不要纠结于理论,只听我的,我有信心说明白. 本章内容 趋势分析 序列分解 序列预测 序列分解 统计学基础铺垫 划分 时间序列按照季节性划 ...

  10. 1.3 JAVA规范以及基础语法(if条件和循环)

    一.规范以及运算符 1.命名规则 类名大驼峰规则方法名.变量名小驼峰原则常量大写.下划线分开见名释义.不与关键字冲突 关键字链接:https://www.runoob.com/java/java-ba ...