反射

获取反射的三种方式:

  • Class.forName(全类名):将字节码文件加载进内存,返回Class对象,全类名要加上类的包名,例top.linzeliang.example.RelfectTest(多用于配置文件,将类名定义在配置文件中,先读取文件,获取文件名,然后加载类)
  • 类名.class:通过类名的属性class获取(多用于参数传递)
  • 对象.getClass():用于对象获取字节码的方式

Class对象的功能

获取 成员变量/成员变量们

  • Field[] getFields():获取所有public修饰符修饰的变量,包括从父类继承来的字段,即protected、default、private无法被获取
  • Field getField(String name):获取指定变量名称的public修饰符修饰的变量
  • Field[] getDeclaredFields():获取所有的成员变量,不考虑修饰符(只要是成员变量就可以被获取)
  • Filed getDeclaredField(String name):可以获取本类所有的字段,包括private的,但是不能获取继承来的字段。 ( 这里只能获取到private的字段,但并不能访问该private字段的,除非加上setAccessible(true))

获取 成员方法/成员方法们

  • Method[] getMethods()
  • Mathod getMethod(String name, 类<?>... parameterTypes)
  • Method[] getDeclaredMethods()
  • Method getDeclaredMethod(String name, 类<?>... parameterTypes)

获取构造方法们

  • Constructor<?>[] getConstructors()
  • Constructor<T> getConstructor(类<?>... parameterTypes)
  • Constructor<T> getDeclaredConstructor(类<?>... parameterTypes)
  • Constructor<?>[] getDeclaredConstructors()

获取全类名

  • String getName()

Field:成员变量

  • void set(Object obj, Object value):设置值
  • get(Object obj):获取值
  • setAccessible(true):忽略访问权限修饰符的安全检查,即暴力反射

Method:成员方法

  • invoke(Object obj, Object args):执行方法
  • String getName():获取方法名

Constructor:构造方法

  • newInstance(Object... initargs):创建对象
  • 如果使用空参构造器创建对象,则可以直接Class对象.newInstance()

通过框架创建对象

public class Demo {

	public static void main(String[] args) throws Exception {
//加载配置文件,配置文件路径要在src目录下
Properties pro = new Properties();
InputStream is = Demo.class.getClassLoader().getResourceAsStream("pro.properties");
pro.load(is); //获取配置文件中的数据
String className = pro.getProperty("className");
//通过全类名将该类加载进入内存
Class c = Class.forName(className);
//创建对象
Object obj = c.newInstance();
System.out.println(obj);
}
}
public class ReflectTest {
public int a = 1;
protected int b = 2;
int c = 3;
private int d = 4; public void m1() {
System.out.println("miaoa");
}
protected void m2() { }
void m3() { }
private void m4() { }
}

Java反射复习笔记的更多相关文章

  1. Java基础复习笔记系列 九 网络编程

    Java基础复习笔记系列之 网络编程 学习资料参考: 1.http://www.icoolxue.com/ 2. 1.网络编程的基础概念. TCP/IP协议:Socket编程:IP地址. 中国和美国之 ...

  2. Java基础复习笔记系列 八 多线程编程

    Java基础复习笔记系列之 多线程编程 参考地址: http://blog.csdn.net/xuweilinjijis/article/details/8878649 今天的故事,让我们从上面这个图 ...

  3. Java基础复习笔记系列 七 IO操作

    Java基础复习笔记系列之 IO操作 我们说的出入,都是站在程序的角度来说的.FileInputStream是读入数据.?????? 1.流是什么东西? 这章的理解的关键是:形象思维.一个管道插入了一 ...

  4. Java基础复习笔记系列 五 常用类

    Java基础复习笔记系列之 常用类 1.String类介绍. 首先看类所属的包:java.lang.String类. 再看它的构造方法: 2. String s1 = “hello”: String ...

  5. Java基础复习笔记系列 四 数组

    Java基础复习笔记系列之 数组 1.数组初步介绍? Java中的数组是引用类型,不可以直接分配在栈上.不同于C(在Java中,除了基础数据类型外,所有的类型都是引用类型.) Java中的数组在申明时 ...

  6. Java基础复习笔记基本排序算法

    Java基础复习笔记基本排序算法 1. 排序 排序是一个历来都是很多算法家热衷的领域,到现在还有很多数学家兼计算机专家还在研究.而排序是计算机程序开发中常用的一种操作.为何需要排序呢.我们在所有的系统 ...

  7. Java基础复习笔记系列 十三 反射机制

    主题:Java反射机制 学习资料参考网址: 1.http://www.icoolxue.com 1.Java反射机制. 各种框架中都使用到了Java的反射机制. 两个类:java.lang.Class ...

  8. java反射学习笔记

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

  9. Java反射机制--笔记

    1.认识Class类 任何一个类都是Class类的实例对象,这个实例对象有三种表示方式. /*java 反射机制*/ // 获取类的方法 UserDao userDao = new UserDao() ...

随机推荐

  1. jwtUtils顾名思意

    1 package com.pipihao.blog.util; 2 import java.util.Date; 3 4 import javax.crypto.SecretKey; 5 impor ...

  2. 带UI 的小初高数学学习系统 —结对编程项目总结

    一. 项目综述 本系统是基于QT Creator 4.3.0开发环境,开发语言C++,能够实现用户注册,发送短信验证码,用户登陆,用户选择题目类型和数量,显示用户本次答题基本功能.支持对用户账号查重, ...

  3. Spring Boot入门系列(二十)快速打造Restful API 接口

    spring boot入门系列文章已经写到第二十篇,前面我们讲了spring boot的基础入门的内容,也介绍了spring boot 整合mybatis,整合redis.整合Thymeleaf 模板 ...

  4. OAth 2.0 的白话讲解

    一.OAuth2.0是什么,主要做什么用的? 官方注解 简单说,OAuth 就是一种授权机制.数据的所有者告诉系统,同意授权第三方应用进入系统,获取这些数据.系统从而产生一个短期的进入令牌(token ...

  5. java性能分析之火焰图

    原由 最近因为kafka.zookeeper.ES和相关的Java应用的内存问题搞的头大,做运维将近4年,对Java调优.性能方面的知识了解的少之又少,是时候下定决心来对他多一个学习了.不能一口吃成一 ...

  6. lumen路由

    $router->get('/', function () use ($router) { return config('options.author'); }); $router->ge ...

  7. Apollo基于K8S的部署以及接入

    Apollo镜像服务 基于开源Apollo服务进行相关服务镜像打包,实际将分发apollo-adminservice.apollo-configservice和apollo-portal 这三个镜像安 ...

  8. js 实现 input file 文件上传

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat=&qu ...

  9. Linux操作系统的介绍和安装教程(Centos6.4)

    路漫漫其修远兮,吾将上下而求 Linux的简单介绍 Linux最初是由芬兰赫尔辛基大学学生Linus Torvalds开发的,由于自己不满意教学中使用的MINIX操作系统, 所以在1990年底由于个人 ...

  10. 记2020年初对SimpleGUI源码的阅读成果

    2020春节,阅读了下SimpleGUI源码,我一直喜欢边阅读,边手绘图片,所以这里只贴几张图片. 一,什么是SimpleGUI ? https://gitee.com/Polarix/simpleg ...