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 反射基础的更多相关文章

  1. java反射基础知识(四)反射应用实践

    反射基础 p.s: 本文需要读者对反射机制的API有一定程度的了解,如果之前没有接触过的话,建议先看一下官方文档的Quick Start. 在应用反射机制之前,首先我们先来看一下如何获取一个对象对应的 ...

  2. java反射基础知识(一)

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

  3. java反射(基础了解)

    package cn.itcast_01; /** *Person类 */ public class Person {    /** 姓名 */    private String name;     ...

  4. 深入解析Java反射基础

    博客原文:http://www.sczyh30.com/posts/Java/java-reflection-1/ - 这老哥写的特别好 一.回顾:什么是反射? 反射(Reflection)是Java ...

  5. java反射基础知识(五)反射应用实践

    详解Java反射各种应用   Java除了给我们提供在编译期得到类的各种信息之外,还通过反射让我们可以在运行期间得到类的各种信息.通过反射获取类的信息,得到类的信息之后,就可以获取以下相关内容: Cl ...

  6. java反射基础知识(三)

    原文地址:http://tutorials.jenkov.com/java-reflection/index.html http://www.cnblogs.com/penghongwei/p/329 ...

  7. java反射基础知识(二)

    1. 了解 Java 中的反射 1.1 什么是 Java 的反射 Java 反射是可以让我们在运行时获取类的函数.属性.父类.接口等 Class 内部信息的机制.通过反射还可以让我们在运行期实例化对象 ...

  8. 5、java反射基础

    Class对象: Class对象记录了所有与类相关的信息,当类加载器从文件系统中加载.class文件到JVM中的同时会为每一个类创建一个Class对象.通过Class对象可以获取到类的属性.方法.构造 ...

  9. 简介Java反射基础

    [参考资料: 疯狂Java讲义 Chapter 18] 1.类加载.连接.初始化 当Java程序需要某一个类时,如果该类尚未加载到内存中,系统会通过加载.连接.初始化三个步骤将该类加载到内存,并完成初 ...

随机推荐

  1. 1.带宽&吞吐量

    1.带宽         网络带宽是指在一个固定的时间内(1秒),能通过的最大位数据.就好象高速公路的车道一样,带宽越大,好比车道越多 带宽是一个非常有用的概念,在网络通信中的地位十分重要.带宽的实际 ...

  2. redis集群cluster模式搭建

    实验服务器 :192.168.44.139    192.168.44.138  192.168.44.144 在 192.168.44.139上操作: 将redis的包上传的新建的目录newtouc ...

  3. matlab 读取fig数据

    单曲线: open('figname.fig');h_line=get(gca,'Children');%get line handlesxdata=get(h_line,'Xdata');ydata ...

  4. Python中的分支结构和循环结构

    一.分支结构 语法: if  条件  :     .... else :    .... 例子: num = int(input("输入一个整数:")) if num<=10 ...

  5. 利用scrapy下载图片保存到本地

    1.先声明一下,起始位置已经是将所有的图片链接都能到pipelines.py中 2.创建一个类,继承于ImagesPipeline,因此也就需要导入ImagesPipeline from scrapy ...

  6. jQ常用选择器

    #id:    $('#div'); //查找id='div'; .class: $('.myclass'); //查找class='myclass';​ element:用于搜索的元素,指向DOM节 ...

  7. php基础-5

     php的面相对象 <?php class Hello { public function say_hello() { echo "hello"; } } $say = ne ...

  8. C++学习(三十二)(C语言部分)之 栈

    栈测试代码笔记如下: #include<stdio.h> #include<string.h> #include <stdlib.h> #define SIZE 1 ...

  9. 实验吧—密码学——WP之 杯酒人生

    首先我们研究题目 1.这是古典密码 2.喵星人要发送一段密码 3.加密过的秘钥“HTRUZYJW” 4.秘钥加密前是一个单词 我们先解决这个秘钥,用凯撒解密 而我们知道,在古典密码里,有秘钥的加密方式 ...

  10. 【HDOJ4857】【反向拓扑排序】

    http://acm.hdu.edu.cn/showproblem.php?pid=4857 逃生 Time Limit: 2000/1000 MS (Java/Others)    Memory L ...