反射、Tomcat执行

反射:是一种获取类信息的能力。

类是生成对象的模版,一个类可以生成多个对象。

堆:生成对象;方法区:存放类对象(--->类信息)

1.磁盘阶段 Class clazz=Class.forName("全类名");

2.类对象阶段 Class clazz=类名.class;

3.运行时阶段 Class clazz=对象名.getClass()

java 复制代码
package com.qcby.test;

public class Animal {
    private String name = "小花猫";
    public Integer age = 18;
    String sex = "男";
    protected String color = "花色";


    public Animal() {
        System.out.println("这是无参构造方法");
    }

    public Animal(String name) {
        System.out.println("这是有参构造方法");
    }

    private Animal(String name, String color) {
        System.out.println("这是普通方法");
    }


    private void run(String name){
        System.out.println("跑的很快");
    }

    public void eat(String name,Integer age){
        System.out.println("吃的很多");
    }

    void sleep(){
        System.out.println("睡得Many");
    }

    protected void show(){
        System.out.println("这是受保护的方法");
    }


}
java 复制代码
package com.qcby.test;

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

public class Test {
    public static void main(String[] args) throws Exception{
        Class clazz1  = Class.forName("com.qcby.test.Animal");
        //获取类信息
        System.out.println(clazz1.getName());
        //获取变量信息
        Field[] fields = clazz1.getFields();  //获取public变量
        for (Field field : fields) {
            System.out.println(field.getName());
        }
        Field[] fields1 = clazz1.getDeclaredFields();  //获取所有变量
        for (Field field : fields1) {
            System.out.println(field.getName());
        }
        System.out.println("-----------------------------");

        Field ageFiled = clazz1.getDeclaredField("age"); //getField("age");
        System.out.println(ageFiled);

        //private defulted protected  度需要使用Declared
        Field colorFiled = clazz1.getDeclaredField("color");
        System.out.println(colorFiled);
        Field sexFiled = clazz1.getDeclaredField("sex");
        System.out.println(sexFiled);
        Field nameFiled = clazz1.getDeclaredField("name");
        System.out.println(nameFiled);

        //方法
        System.out.println("-----------------------------");
        Method[] methods = clazz1.getMethods();  //获取public方法
        for (Method method : methods) {
            System.out.println(method.getName());
        }
        System.out.println("-----------------------------");
        Method[] methods1 = clazz1.getDeclaredMethods(); //获取所有方法

        System.out.println("-----------------------------");
        //getDeclaredMethod
        Method eatMethod = clazz1.getDeclaredMethod("eat", String.class, Integer.class);

        System.out.println("-------------------------");
        Method runMethod = clazz1.getDeclaredMethod("run", String.class);

        Method sleepMethod = clazz1.getDeclaredMethod("sleep");

        Method showMethod = clazz1.getDeclaredMethod("show");

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


       Constructor[] constructor =  clazz1.getDeclaredConstructors();
       Constructor constructor1 = clazz1.getDeclaredConstructor(String.class);
       Constructor constructor2 = clazz1.getDeclaredConstructor(String.class, String.class);

    }
}

对类信息的使用:

注解

内置注解、元注解、自定义注解。

自定义注解:

相关推荐
坤坤子吖1 分钟前
C++智能指针:RAII、shared_ptr与内存泄漏
开发语言·c++·笔记·学习
奋斗的阿狸_198611 分钟前
ESP32-S3 + ES7210 四通道麦克风录音上传方案
c语言·开发语言·fpga开发
夜之眷属26 分钟前
Core dump 崩溃排查:JVM 宕机后,那份 core 文件怎么用 gdb 还原现场
java·运维·服务器·jvm
weixin1997010801626 分钟前
《1688图片空间API踩坑:img.upload 与 album.* 的防盗链与CDN缓存问题》(附Python源码)
开发语言·python·缓存
波加曼大王28 分钟前
# vLLM不要迷信PagedAttention神话,聊聊线上藏着的内部碎片陷阱
java·架构
SL_staff33 分钟前
目标健康度自检清单:开发者视角下的目标-计划-任务链路断点诊断
java·开源·github
for_ever_love__36 分钟前
MySQL 高频面试题 30 问:索引、事务、锁、日志、主从与分库分表(MySQL 8.0 版)
java·数据库·spring boot·mysql·spring cloud·面试·总结
神仙别闹38 分钟前
基于C++实现的贪吃蛇游戏平台
java·c++·游戏
ACP广源盛1392462567340 分钟前
Type‑C 扩展坞方案选型笔记|国产 DP1.4 转 HDMI2.0 桥接芯片 GSV2201S @ACP评估
c语言·开发语言·笔记·硬件架构·硬件工程·国产芯片
布吉岛的石头1 小时前
Java 程序员第 49 阶段11:Java 接 BERT:用 ONNX Runtime 做句向量推理
java·人工智能·python·深度学习·bert·transformer