Java 反射基础
1、什么是反射
间接操作目标对象的机制。核心是JVM在运行时才动态加载类,并且对于任意一个类,都能知道这个类的方法和属性。允许运行中的Java程序获取类的信息,并且操作类的方法和属性。
Java运行时,动态获得类的信息以及动态调用对象的方法的功能。
在运行时判断任意一个对象所属的类
在运行时构造任意一个类的对象
在运行时判断任意一个类所具有的成员变量和方法
在运行时调用任意一个对象的方法
2. 动态语言和静态语言
动态语言的定义:在程序运行时,运行改变程序结构或者变量类型,这这种语言称为动态语言
动态语言:Perl,Python,Ruby,JavaScript
静态语言:C++,Java,C#
3. Java反射机制由以下类来实现,这些类在java.lang.reflect中
Class类: 代表一个类
Field类:代表类的成员变量
Method类:代表类的方法
Constructor类:代表类的构造方法
Array类: 提供了动态创建数组,以及访问数组的元素的静态方法。
4. Java中,无论生成某个类的多少个对象,这些对象对象都会对应同一个Class对象
5、反射的原理

参考: https://blog.csdn.net/a745233700/article/details/82893076
6. 反射的例子: 打印出String类中所有的方法
public static void main(String[] args) throws Exception {
Class<?> classType = Class.forName("java.lang.String");
Method[] methods = classType.getDeclaredMethods();
for(Method method : methods){
System.out.println(method);
}
}
7.反射的例子2,调用单独的反射方法
public class InvokeTester {
public int add(int param1, int param2){
return param1 +param2;
}
public String echo(String message){
return "hello: " + message;
}
public static void main(String[] args) throws Exception{
//传统调用
InvokeTester tester = new InvokeTester();
System.out.println(tester.add(1,5));
System.out.println(tester.echo("tom"));
// 反射调用
Class<?> classType = InvokeTester.class;
Object invokerTester = classType.newInstance();
//add方法
Method addMethod = classType.getMethod("add",new Class[]{int.class, int.class});
Object result = addMethod.invoke(invokerTester,new Object[]{2,3});
System.out.println(result);
//echo方法
Method echoMethod = classType.getMethod("echo",new Class[]{String.class});
result = echoMethod.invoke(invokerTester,new Object[]{"world"});
System.out.println(result);
}
}
Java 反射基础的更多相关文章
- java反射基础知识(四)反射应用实践
反射基础 p.s: 本文需要读者对反射机制的API有一定程度的了解,如果之前没有接触过的话,建议先看一下官方文档的Quick Start. 在应用反射机制之前,首先我们先来看一下如何获取一个对象对应的 ...
- java反射基础知识(一)
一.反射 反射:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为 ...
- java反射(基础了解)
package cn.itcast_01; /** *Person类 */ public class Person { /** 姓名 */ private String name; ...
- 深入解析Java反射基础
博客原文:http://www.sczyh30.com/posts/Java/java-reflection-1/ - 这老哥写的特别好 一.回顾:什么是反射? 反射(Reflection)是Java ...
- java反射基础知识(五)反射应用实践
详解Java反射各种应用 Java除了给我们提供在编译期得到类的各种信息之外,还通过反射让我们可以在运行期间得到类的各种信息.通过反射获取类的信息,得到类的信息之后,就可以获取以下相关内容: Cl ...
- java反射基础知识(三)
原文地址:http://tutorials.jenkov.com/java-reflection/index.html http://www.cnblogs.com/penghongwei/p/329 ...
- java反射基础知识(二)
1. 了解 Java 中的反射 1.1 什么是 Java 的反射 Java 反射是可以让我们在运行时获取类的函数.属性.父类.接口等 Class 内部信息的机制.通过反射还可以让我们在运行期实例化对象 ...
- 5、java反射基础
Class对象: Class对象记录了所有与类相关的信息,当类加载器从文件系统中加载.class文件到JVM中的同时会为每一个类创建一个Class对象.通过Class对象可以获取到类的属性.方法.构造 ...
- 简介Java反射基础
[参考资料: 疯狂Java讲义 Chapter 18] 1.类加载.连接.初始化 当Java程序需要某一个类时,如果该类尚未加载到内存中,系统会通过加载.连接.初始化三个步骤将该类加载到内存,并完成初 ...
随机推荐
- 启动和停止mysql的正确姿势
1.如果是用脚本起的.那就用脚本停 2.最好用mysql_safe起,mysqladmin -uroot -p shutdown -S /tmp/mysql.sock停 mysqld_safe --d ...
- nodejs环境下配置运行mysql
首先需要在本地运行node环境 必须在本地安装mysql(可以用xampp里面的) 在node环境下引入mysql模块 命令: npm install node-mysql 运用例子(前提条件 ...
- Maven安装Oracle驱动包到本地仓库
驱动下载地址:https://download.csdn.net/download/yang_lover/9455401 mvn install:install-file -DgroupId=com. ...
- python3.6升级
Ubuntu 14.04 and 16.04 If you are using Ubuntu 14.04 or 16.04, you can use Felix Krull's deadsnakes ...
- ___security_cookie机制
.text:00411500 ; int __cdecl wmainCRTStartup().text:00411500 _wmainCRTStartup proc near ...
- Ubuntu16.04换源(转)
乌班图换源(ubuntu 16.04换阿里云源为例) 换成国内最快的阿里云源 第一步:备份原来的源文件 cd /etc/apt/ 1 2 然后会显示下面的源文件sources.list 输入命令 su ...
- 测试那些事儿—web测试方法之输入框
一.字符型输入 (1)字符型输入框 英文全角,英文半角,数字,空或者空格,特殊字符“~!@#¥%.......&*?{}[]"特别要注意单引号和&符号.禁止直接输入特殊字符时 ...
- lesson6-图像分割-小象c
显著性检测:1)显著性物体检测-最能引起视觉注意的物体区域2)注视点预测:人类视觉注意机制 视觉注意机制的两种机制:1)自底而上基于数据驱动的注意机制,如颜色.边缘 2)自上而下基于任务驱动的目标的注 ...
- a标签的功能
最常见的a标签是用来做跳转链接,实际上a标签还有其他的功能,具体如下: <a href="http://www.cnblogs.com/wangzhenyu666/"> ...
- 20155208徐子涵 2016-2017-2 《Java程序设计》第2周学习总结
20155208徐子涵 2016-2017-2 <Java程序设计>第2周学习总结 教材学习内容总结 第三章 基础语法 3.1 类型.变量与运算符 • 关键字:在定义java文件名的时候要 ...