反射Demo

使用反射之前的代码

public class P1 {
public void eat(){
    System.out.println("p1的方法");
}
}

public class P2 {
    public void sleep(){
        System.out.println("p2的方法");
    }
}
public class Reflect1 {
    public static void main(String[] args) throws Exception {
        //可以创建任意类的对象,不能改变任何代码
      /*  P1 p = new P1();
        p.eat();
        P2 stu = new P2();
        stu.sleep();*/
}

使用反射之后的代码

public class Reflect1 {
    public static void main(String[] args) throws Exception {
        //可以创建任意类的对象,不能改变任何代码
      /*  P1 p = new P1();
        p.eat();
        P2 stu = new P2();
        stu.sleep();*/
        //加载配置文件
        Properties properties = new Properties();
        ClassLoader loader = Reflect1.class.getClassLoader();
        InputStream is = loader.getResourceAsStream("pro.properties");
        properties.load(is);
        //获取配置文件加载的数据
        String className = properties.getProperty("className");
        String methodName = properties.getProperty("methodName");
        //加载类进内存
        Class<?> cla = Class.forName(className);
        //创建对象
        Object o = cla.newInstance();
        //获取方法对象
        Method method = cla.getMethod(methodName);
        //执行方法
        method.invoke(o);
    }
}
#只是一个配置文件pro.properties
className=domain.P1
methodName=eat

总结:看上去反射代码更加复杂,但是倘若我们并不知道字节码文件,可以通过反射技术调用方法即可,简单修改配置文件就能实现对象以及功能的改变,还可以爆破一些方法和变量(也不知道是好是坏)

反射提高了程序的灵活性和扩展性,降低耦合性,提高自适应能力。它允许程序创和控制任何类的对象,无需提前硬编码目标类,我认为还是非常符合代码设计原则的。

原文地址:https://www.cnblogs.com/shun998/p/12579451.html

时间: 2024-10-19 16:22:15

反射Demo的相关文章

反射demo(拷贝一个对象)

经过了上一次对反射的初步认知,最近又接触到了后,做了一个小demo,感觉这次带了一点理解去做的,比第一次接触反射好了许多. 上次学习的链接,有一些反射用的基础语句.https://www.cnblogs.com/deepSleeping/p/9381785.html package deep.blob.test; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import j

Java_反射demo

package com.cnit.reflect; import java.lang.reflect.Field; import java.lang.reflect.Method; public class Main { /** * @param args */ public static void main(String[] args) { try { Class<?> classObj = Class.forName("com.cnit.reflect.bean.Person&q

java 反射demo

基于类的反射 Class 对象为您提供接入类元数据的反射的所有基本hook.这类元数据包括关于类自身的信息,如包和类的父类,以及该类实施的接口.它还包括该类定义的构造函数.字段和方法的详细信息.这些最后的项目都是编程中最经常使用的项目, 因此我将在本小节的稍后部分给出一些与它们协作的实例. 对于以下三类组件中的任何一类来说 -- 构造函数.字段和方法 -- java.lang.Class 提供四种独立的反射调用,以不同的方式来获得信息.调用都遵循一种标准格式.以下是用于查找构造函数的一组反射调用

简单的反射Demo

1 private void button1_Click(object sender, EventArgs e) 2 {//计时器 3 System.Diagnostics.Stopwatch watcher = new System.Diagnostics.Stopwatch(); 4 //开启计时器 5 watcher.Start(); 6 Users user = new Users(); 7 user.Name = "sa"; 8 user.Password = "1

[No000085]C#反射Demo,通过类名(String)创建类实例,通过方法名(String)调用方法

using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; class test { public void Method()//1 { Console.WriteLine("1:__" + "Method调用成功!"); } public void Method(string str)//2 { Cons

Java 反射 调用 demo

基础类.供demo反射练习 1 package fanshe; 2 3 public class Person { 4 public String name; 5 private String age; 6 private int p; 7 public Person() {}; 8 public Person(String name, String age) { 9 super(); 10 this.name = name; 11 this.age = age; 12 } 13 private

java反射的使用

Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类:在运行时构造任意一个类的对象:在运行时判断任意一个类所具有的成员变量和方法:在运行时调用任意一个对象的方法:生成动态代理. 下面介绍下java反射机制的使用 package cn.csdn.reflect; import java.awt.Button; import java.lang.reflect.Array; import java.lang.reflect.Constructor; import java.lang

反射(C#)______ITOO项目技术总结(一)

反射提供了封装程序集.模块和类型的对象(Type类型).可以使用反射动态创建类型的实例.将类型绑定到现有对象,或从现有对象获取类型并调用其方法或访问其字段和属性.如果代码中使用了属性,可以利用反射对它们进行访问. 一.概述 反射在下列情况下很有用: 需要访问程序元数据的属性. 检查和实例化程序集中的类型 在运行时构建新类型. 执行后期绑定,访问在运行时创建的类型的方法. 在程序集中可以直接引用dll文件,从而达到使用该dll文件中的类和方法,现在可以通过反射机制达到同样的效果. 二.用途 有了反

6.C#知识点:反射

1.反射是什么? 反射提供描述组件,模块和类型的对象(类型为Type).您可以使用反射来动态创建类型的实例,将类型绑定到现有对象,或从现有对象获取类型,并调用其方法或访问其字段和属性.如果您在代码中使用属性,反射使您可以访问它们.有关更多信息,请参阅属性.-----来自微软官方. 微软的解释我觉得还可以.用大白话讲就是我们可以以通过反射让我们知道位置类型的信息.类似显示生活中的B超啊.医生用B超看到孕妇肚子里的内部情况,因为医生无法从内部查看.反射也是一样,对于位置类型.或者引用过来的dll.我