| |目录

  • 运行环境
  • Java语言的反射机制
  • Class中的常用方法(获得类的构造方法)
  • Class中的常用方法(获得类的属性)
  • Class中的常用方法(获得类的方法)
  • 反射动态调用类的成员

1.运行环境

JDK8+lntellij IDEA 2018.3

2.Java 语言的反射机制

  • Java 反射是Java语言的一个很重要的特征,它使得Java具有了“动态性”。
  • Java提供了一套机制来动态获取类的信息以及动态调用对象的方法的功能,这套机制就叫——反射
  • 反射机制是如今很多流行框架的实现基础,其中包括Struts、Spring、Hibernate等。

3.Class中的常用方法(获得类的构造方法)

  • getConstructors():获得类的所有的public类型的构造方法。
  • getDeclaredConstructors():获得类所有的构造方法
  • getConstructor(Class[] parameterTypes):获得类的特定public的构造方法, parameterTypes 参数指定构造方法的参数类型。
  • getDeclaredConstructor(Class[] parameterTypes):获得类指定的所有的构造方法

4.Class中的常用方法(获得类的属性)

  • getFields():获得类的public类型的属性。
  • getDeclaredFields():获得类本身的所有属性
  • getField(String):获得指定名字的public类型的属性对象
  • getDeclaredField(String)获得类自己的指定名字的属性对象

  Field类:

  • getModifiers():获得属性的修饰符(Modifier.toString(int)显示对应的修饰符类型)
  • getType() : 获得属性的类型 

5.Class中的常用方法(获得类的方法)

  • getMethods():获得类的public类型的方法。
  • getDeclaredMethods():获得类的所有方法。
  • getMethod(String name, Class[] parameterTypes):获得类的特定public的方法, name参数指定方法的名字, parameterTypes 参数指定方法的参数类getDeclaredMethod(String name, Class[] parameterTypes)

  Method类:

  • getParameterTypes() :获得方法的所有参数类型
  • getReturnType():获得方法的返回值类型

6.反射动态调用类的成员

调用方法步骤:

  设定调用方法的参数列表(Class[])

  获得调用方法的对象(Method)

  设定调用方法的参数的值(Object[])

  普通方法:invoke(obj,values);

  构造方法:newInstance(values)

调用属性步骤:

  根据属性名字获得属性对象(Field)

  赋值:set(obj,value)

  取值:get(obj) 如果需要强制访问类的私有成员,则需要设定: setAccessible(true);


Øjdbc.properties代码

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8
user=root
password=
Ø/*jdbc读到内存中反射体验*/代码
public class DBUtil{
static Properties properties = new Properties();
private static String DRIVER;
private static String URL;
private static String USER;
private static String PASSWORD;
public static void main(String[] args) throws IOException {
System.out.println("main:"+"hello");
Connection connection=DBUtil.getConnection(URL,USER,PASSWORD);
} static {
String path="jdbc.properties";
InputStream is= DBUtil.class.getClassLoader().getResourceAsStream(path);
try {
properties.load(is);
} catch (IOException e) {
e.printStackTrace();
}
DRIVER= properties.getProperty("driver");
URL= properties.getProperty("url");
USER= properties.getProperty("user");
PASSWORD=properties.getProperty("password");
System.out.println("DRIVER:"+DRIVER+"URL:"+URL+"");
try {
Class.forName(DRIVER);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
static Connection connection= null;
public static Connection getConnection(String url,String user,String password){
try {
connection= DriverManager.getConnection(url,user,password);
System.out.println("connection:"+connection);
} catch (SQLException e) {
e.printStackTrace();
}catch (Exception e){
e.printStackTrace();
}
return connection;
} }
Ø三种获取类,代码
public class ReflectDemo1 {
public static void main(String[] args) {
Student student = new Student();
//1. object.getClass(); 引用类型, .getClass(),定义在Object对象
Class clzStu1=student.getClass(); //2. .class 适用于所有的数据类型
Class clzStu2=Student.class; //3. Class.forName(""); 先把类加载到内存中,得到类对象
Class clzStu3=null; try {
clzStu3=Class.forName("com.javaboy.pojo.Student"); } catch (ClassNotFoundException e) {
e.printStackTrace();
}
System.out.println(clzStu1==clzStu2);
System.out.println(clzStu2==clzStu3);
System.out.println(clzStu1==clzStu3);
}
}

Ø效果图

Ø总结

  Class是一个特殊的类,

  它的实例用来表示一个.class文件在内存中的存在形势。

  反射就是照镜子,照出类的内部结构。 利用反射,可以在运行状态下初始化类。


心得:
  为什么要努力?
  因为还有很多人毫不费力的过着我想要的生活
  因为我对这个世界还有欲望,为了更自由,为了被尊重
  为了不把世界让给我讨厌的人。
  为了对得起未来的自己
  如果你从此时此刻开始努力,最坏的结果,不过是大器晚成
  今天是你余生中最年轻的一天,从今天去开始努力,即使暂时看不到希望
  也要相信自己,相信明天你会感谢今天的努力。
  

Java反射机制详情(2)的更多相关文章

  1. Java反射机制详情

    1.运行环境 JDK8+lntellij IDEA 2018.3 2.反射机制是什么 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个 ...

  2. 11.Java反射机制 哦对了,前面的序号来自随笔关于编程之路的思索第一篇

    基本概念 在Java运行时环境中,对于任意一个类,能否知道这个类有哪些属性和方法?对于任意一个对象,能否调用它的任意一个方法? 答案是肯定的. 这种动态获取类的信息以及动态调用对象的方法的功能来自于J ...

  3. 转!!java反射机制

    Java 反射机制 基本概念 在Java运行时环境中,对于任意一个类,能否知道这个类有哪些属性和方法?对于任意一个对象,能否调用它的任意一个方法? 答案是肯定的. 这种动态获取类的信息以及动态调用对象 ...

  4. Java反射机制调用对象的方法 —— 将一个对象的属性值赋值给另一个对象的属性

    模拟一个场景: 众所周知,EasyExcel导出Excel文档是依赖于注解完成的,在实体类需要导出的属性上面加上注解,导出的时候会自动识别该属性. 假如我们现在需要导出用户的信息,又不想污染原本的实体 ...

  5. 第28章 java反射机制

    java反射机制 1.类加载机制 1.1.jvm和类 运行Java程序:java 带有main方法的类名 之后java会启动jvm,并加载字节码(字节码就是一个类在内存空间的状态) 当调用java命令 ...

  6. Java反射机制

    Java反射机制 一:什么事反射机制 简单地说,就是程序运行时能够通过反射的到类的所有信息,只需要获得类名,方法名,属性名. 二:为什么要用反射:     静态编译:在编译时确定类型,绑定对象,即通过 ...

  7. java基础知识(十一)java反射机制(上)

    java.lang.Class类详解 java Class类详解 一.class类 Class类是java语言定义的特定类的实现,在java中每个类都有一个相应的Class对象,以便java程序运行时 ...

  8. java基础知识(十一)java反射机制(下)

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

  9. Java反射机制专题

    ·Java Reflection Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方 ...

随机推荐

  1. python 闭包函数与装饰器

    1.什么是闭包函数 (1):什么是闭包函数: #内部函数包含对外部作用域而非全局作用域的引用, 简而言之, 闭包的特点就是内部函数引用了外部函数中的变量. 在Python中,支持将函数当做对象使用,也 ...

  2. web前端的超神之路

    前端超神之路 前端基础知识 HTML :用户实现页面的工具 CSS:用于美化界面的工具 javascript:用于操作html元素和css样式,让你的页面效果更美观 前端进阶知识 jQuery:用于简 ...

  3. 基于MATLAB的手写公式识别(6)

    基于MATLAB的手写公式识别 2021-03-29 10:24:51 走通了程序,可以识别"心脑血管这几个字",还有很多不懂的地方. 2021-03-29 12:20:01 tw ...

  4. hdu4560 不错的建图,二分最大流

    题意: 我是歌手 Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Total Subm ...

  5. UVA11174村民排队问题

    题意:      有n个人要排队,给你一些父子关系,要求儿子不能站在自己的父亲前面,问有多少种排队方式? 思路:       白书上的题目,首先我们可以把关系建成树,这样我们就有可能得到一个森林(或者 ...

  6. 推荐算法-聚类-K-MEANS

    对于大型的推荐系统,直接上协同过滤或者矩阵分解的话可能存在计算复杂度过高的问题,这个时候可以考虑用聚类做处理,其实聚类本身在机器学习中也常用,属于是非监督学习的应用,我们有的只是一组组数据,最终我们要 ...

  7. 用最容易的方式学会单链表(Python实现)

    单链表与数组 在本博客中,我们介绍单链表这种数据结构,链表结构为基于数组的序列提供了另一种选择(例如Python列表). 基于数组的序列也会有如下缺点: 一个动态数组的长度可能超过实际存储数组元素所需 ...

  8. Day006 方法的定义和调用

    方法的定义 Java的方法类似于其他语言的函数,是一段用来完成特定功能的代码片段,一般情况下,定义一个方法包含以下语法: 方法包含一个方法头和一个方法体.下面是一个方法的所有部分: 修饰符:修饰符,这 ...

  9. 使用C#实现一个PPT遥控器

    说明 本项目参考了 https://github.com/yangzhongke/PhoneAsPrompter 项目来完成实现,并对其进行了一些修改完善. 完整代码可以到 https://githu ...

  10. Python数模笔记-Sklearn(5)支持向量机

    支持向量机(Support vector machine, SVM)是一种二分类模型,是按有监督学习方式对数据进行二元分类的广义线性分类器. 支持向量机经常应用于模式识别问题,如人像识别.文本分类.手 ...