首页 > 其他分享 >反射机制1

反射机制1

时间:2022-11-29 11:01:58浏览次数:26  
标签:反射 name age Person println 机制 public String

Person类

package day1;

public class Person {
    private String name;
    public int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    private Person(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return "姓名:"+ name + ",年龄:" + age;
    }
    public String show(){
        return this.name+" , "+this.age;
    }
    private String showNation(String nation){
        return "我来自"+nation;
    }
}

利用反射机制操作Person对象

package day1;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class ReflectionDemo1 {
    //反射机制,允许程序在运行期间获取类的内部信息,操作对象的内部属性和方法
    //加载类后,产生Class类对象,含有类的完整信息
    public static void main(String[] args) throws Exception {
        Person p1=new Person("张三",20);
        p1.age=30;
        System.out.println(p1.show());

        //通过反射,创建对象
        Class c1=Person.class;
        Constructor cons=c1.getConstructor(String.class,int.class);
        Person p2=(Person) cons.newInstance("李四",40);
        System.out.println(p2);
        //调用对象的指定属性
        Field age=c1.getDeclaredField("age");
        age.set(p2,50);
        System.out.println(p2);
        //调用指定方法
        Method show=c1.getDeclaredMethod("show");
        System.out.println(show.invoke(p1));

        //通过反射,可以调用Person类的私有结构,如私有构造器、属性、方法
        System.out.println("******************************");
        Constructor cons1=c1.getDeclaredConstructor(String.class);
        cons1.setAccessible(true);
        Person p3=(Person) cons1.newInstance("WangWu");
        System.out.println(p3);

        Field name=c1.getDeclaredField("name");
        name.setAccessible(true);
        name.set(p3,"ZhaoLiu");
        System.out.println(p3);

        Method showNation=c1.getDeclaredMethod("showNation", String.class);
        showNation.setAccessible(true);
        System.out.println(showNation.invoke(p3,"中国"));
    }
}

标签:反射,name,age,Person,println,机制,public,String
From: https://www.cnblogs.com/fighterk/p/16934779.html

相关文章

  • 论文赏析【EMNLP19】多粒度自注意力机制(MG-SA)
    论文地址Multi-GranularitySelf-AttentionforNeuralMachineTranslation[1]介绍现在主流的机器翻译模型基本都是采用多头注意力机制来对句子进行编码解码,但是有一些研究......
  • Java 注解和反射(五)创建运行时类的对象
    获取运行时类的完整结构通过反射获取运行时类的完整结构Field,Method,Constructor,Superclass,Interface,Annotation~实现的全部接口~所继承的父类~全部的构造器~全部的方......
  • 数仓系列 | 深入解读 Flink 资源管理机制
    作者:宋辛童(五藏)整理:王文杰(Flink社区志愿者)摘要:本文根据ApacheFlink系列直播整理而成,由阿里巴巴高级开发工程师宋辛童分享。文章主要从基本概念、当前机制与策略、未来发......
  • 通过类加载机制实现加载相同包名和类名的不同版本的类
    有些地方有这种需求,要同时用到两个不兼容的jar包版本的某个工具类,它们的包名和类名又是一样的,即比如都叫org.xxx.Foo;在项目里已经用到了该jar包的1.0版本,但是现在新的需求......
  • java泛型机制
    泛型概述泛型使用的必要性泛型类泛型接口泛型对象引用传递的解决方案泛型方法泛型的简单应用---本文中将介绍泛型的基础知识以及简单应用,后面还计划......
  • java泛型机制(基础知识总结篇)
    泛型概述泛型使用的必要性泛型类泛型接口泛型对象引用传递的解决方案泛型方法泛型的简单应用---本文中将介绍泛型的基础知识以及简单应用,后面还计划......
  • 代码块缓存机制
    id的作用:获取内存地址namis作用:用于判断两个地址是否相等i1=1000i2=1000print(i1isi2)>>>False e='taibai'print(id(name))is作用:用于判断两个地址是否相等i......
  • Java 注解和反射(四)Java内存分析
     类的加载过程 类的加载与ClassLoader的理解加载:将class文件字节码内容加载到内存中,并将这些静态数据转换成方法去区的运行时数据结构,然后生成一个代表这个......
  • 从零开始学习Java系列之Java运行机制与跨平台特性
    全文大约【4000】字,不说废话,只讲可以让你学到技术、明白原理的纯干货!并带有丰富的案例及配图,让你更好地理解和运用文中的技术概念,给你带来具有足够启迪的思考……在上一篇......
  • Kafka的Exactly-once语义与事务机制
    https://www.cnblogs.com/luxiaoxun/p/13048474.htmlKafka0.11.x版本(对应ConfluentPlatform3.3),该版本引入了exactly-once语义。精确一次确实很难实现(Exactly-onceis......