首页 > 编程语言 >java反射代码案例

java反射代码案例

时间:2023-05-25 19:33:57浏览次数:41  
标签:反射 java Field fields System 案例 Wolf println out

反射案例代码

点击查看代码
package com.bh.zoo;

public class Wolf extends Animal{
    public String name;
    public String color;
    protected String blood;
    private int age;

    public void eat(){
        System.out.println("狼吃肉");

    }
    public void eat(String food){
        System.out.println("狼吃"+food);
    }
    private void sleep(){
        System.out.println("sleep....");
    }

}

点击查看代码
package com.bh.demo;

import com.bh.zoo.Wolf;

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

public class Test {
    public static void main(String[] args) {
        System.out.println("start-----------");

        //获得类对象,方法1
        Class clz1=null;
        try {
             clz1 = Class.forName("com.bh.zoo.Wolf");
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        }
        //获得类的所有成员属性
        //通过getFields方法获得是所有public的成员属性
       /* Field[] fields = clz1.getFields();
        for (int i = 0; i < fields.length; i++) {
            Field f= fields[i];
            System.out.println(f.getName());
        }*/

        // 通过getDeclaredFields方法,可以获得所有的成员属性
      /*  Field[] declaredFields = clz1.getDeclaredFields();
        for (int i = 0; i < declaredFields.length; i++) {
            System.out.println(declaredFields[i].getName());
        }*/



        //获得类对象,方法2(同1)
        Class<Wolf> clz2 = Wolf.class;
      /*  Field[] fields = clz2.getFields();
        for (int i = 0; i < fields.length; i++) {
            Field f= fields[i];
            System.out.println(f.getName());
        }*/


        //获得类对象,方法3
        Wolf northWolf = new Wolf();
        Class clz3 = northWolf.getClass();
      /*  Field[] fields = clz3.getFields();
        for (int i = 0; i < fields.length; i++) {
            Field f= fields[i];
            System.out.println(f.getName());
        }*/
      /*  Field[] declaredFields = clz3.getDeclaredFields();
        for (int i = 0; i < declaredFields.length; i++) {
            System.out.println(declaredFields[i].getName());}*/

        //获得成员方法(包括父类)公共的
      /*  Method[] methods = clz2.getMethods();
        for (Method m:methods) {
            System.out.println(m.getName());
        }*/

        //获得成员方法(自己)
      /*  Method[] declaredMethods = clz2.getDeclaredMethods();
        for (Method m:declaredMethods) {
            System.out.println(m.getName());
        }*/

        Wolf w1 = null;
        Wolf w2 = null;
        Wolf w3 = null;

        try {
            w1 = (Wolf) clz2.newInstance();
            w2 = (Wolf) clz2.newInstance();
            w3 = (Wolf) clz2.newInstance();
        } catch (InstantiationException e) {
            throw new RuntimeException(e);
        } catch (IllegalAccessException e) {
            throw new RuntimeException(e);
        }
        //w1.eat();
        w2.eat("草");

        try {
            //获取指定无参方法,通过w2对象调用
            /*Method eatMethod = clz2.getMethod("eat", null);
            eatMethod.invoke(w2,null);*/
            //获取指定有参方法,通过w1对象赋值调用
            Method eatMethod = clz2.getMethod("eat", String.class);
            eatMethod.invoke(w1,"苹果");
        } catch (NoSuchMethodException e) {
            throw new RuntimeException(e);
        } catch (InvocationTargetException e) {
            throw new RuntimeException(e);
        } catch (IllegalAccessException e) {
            throw new RuntimeException(e);
        }

        System.out.println("end-----------");

    }
}

标签:反射,java,Field,fields,System,案例,Wolf,println,out
From: https://www.cnblogs.com/liangkuan/p/17432647.html

相关文章

  • Java比较两个实体属性值是否相同,将不同的属性输出
    /** *比较两个实体属性值,返回一个map以有差异的属性名为key,value为一个Map分别存oldObject,newObject此属性名的值 *@paramoldObject进行属性比较的对象1 *@paramnewObject进行属性比较的对象2 *@return属性差异比较结果map */ @SuppressWarnings("rawtypes")......
  • JAVA List和Map切割方法
    importorg.springframework.util.CollectionUtils;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.Iterator;importjava.util.List;importjava.util.Map;importjava.util.Set;publicclassCollectionUtil{/***将map切成段,作......
  • java两个对象属性比较
    两个对象进行比较相等,有两种做法:1,情况一:当仅仅只是判断两个对象是否相等时,只需重写equals()方法即可。这里就不用说明2.情况二:当除了情况一之外,还需知道是那个属性不同,那么就需要采用类反射,具体代码如下:publicstaticvoidmain(String[]args){Aa=newA();a.setUserName(......
  • IDEA下查看Java字节码(插件ByteCode Viewer)
    安装jclasslibbytecodeviewer插件 使用结果......
  • jenkins--构建传输jar包后启动java服务
    jenkins--构建传输jar包后启动java服务目标:针对单体java服务前置条件:jdk1.8日志切割cronologjdk1.8安装cronolog安装创建server.sh脚本文件#!/bin/bashJAR_PATH="/data/forwarder"#文件目录JAR_FILE="ruoyi-admin.jar"#文件名LOG_PATH="/data/forwarder/logs"#cro......
  • scrapy:CrawlSpider及其案例
    1.CrawSpider介绍运行原理:2.pymysqlcondainstallpymysql3.案例-读书网爬虫&数据入库3.1案例需求3.2网页分析3.3创建爬虫项目3.4创建爬虫文件(与之前有区别)scrapygenspider-tcrawlreadhttps://www.dushu.com/book/1188.html3.5实现爬虫impor......
  • [Javascript] Generator with example - 1
    Differencebetween yieldand returnreturnset donetotrue/***Example1*/function*loggerator(){console.log("running");yield"paused";console.log("runningagain");return"stopped";}letlogger=......
  • Java的访问控制修饰符
    为什么使用访问控制修饰符使用访问控制修饰符,主要是为了实现信息的隐藏,在编写程序时,有些核心数据往往不希望被用户调用,需要控制这些数据的访问。对类成员访问的限制,有利于防止对象的误用。只允许通过一系列定义完善的方法来访问私有数据,就可以(通过执行范围检查)防止数据赋予不正......
  • scrapy:电影天堂案例
    嵌套数据封装成一个item(一个item包含多级页面的数据):每条记录的名称+点进去之后第二页中的图片1.创建爬虫项目scrapystartprojectscrapy_movie_52.创建爬虫文件scrapygenspidermvhttps://www.ygdy8.net/html/gndy/china/index.html3.实现爬虫importsc......
  • java removeAll 返回2个数组的差集
    注意:removeAll不是差集importjava.util.ArrayList;publicclassImoocStudent{publicstaticvoidmain(Stringargs[]){ArrayList<String>objArray=newArrayList<String>();ArrayList<String>objArray2=newArrayList......