首页 > 编程语言 >java反射简介

java反射简介

时间:2024-08-14 18:24:01浏览次数:9  
标签:反射 java name 简介 age System println public out

1.反射定义

  反射是一种可以间接操作目标对象的机制。当使用反射时,JVM 在运行的时候才动态加载类,对于任意类,知道其属性和方法,并不需要提前在编译期知道运行的对象是谁,允许运行时的 Java 程序获取类的信息并对其进行操作。

2.获取类的四个方式

 3.class从类中获取构造器的方法

请看下面例子:

先创建一个cat类:

package 反射;

public class Cat {
    public static int a;
    public static  final String country = "中国";
    private String name;
    private int age;

    @Override
    public String toString() {
        return "Cat{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    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;
    }

    public void run(){
        System.out.println("跑得脱马老壳");
    }
    public Cat(String name, int age) {
        System.out.println("有参构造器");
        this.name = name;
        this.age = age;
    }

    public Cat() {
        System.out.println("无参构造器");
    }
}

package 反射;

import jdk.jfr.StackTrace;
import jdk.swing.interop.SwingInterOpUtils;
import org.junit.Test;

public class Constructor {
    @Test
    public void testGetConstructors() throws ClassNotFoundException {
        Class c1 = Class.forName("反射.Cat");
        System.out.println(c1.getName());
        System.out.println(c1.getSimpleName());
        //获取类的全部构造器
        java.lang.reflect.Constructor[] constructors = c1.getDeclaredConstructors();
        for (java.lang.reflect.Constructor constructor : constructors) {
            System.out.println(constructor.getName() + "-->"+constructor.getParameterCount());
        }
    }

    @Test
    public void testGetConstructor() throws Exception{
        Class catClass = Class.forName("反射.Cat");
        //获取无参构造器
        java.lang.reflect.Constructor constructor = catClass.getConstructor();
        System.out.println(constructor.getName()+"->"+constructor.getParameterCount());

        //获取有参构造器
        java.lang.reflect.Constructor declaredConstructor = catClass.getDeclaredConstructor(String.class, int.class);
        System.out.println(declaredConstructor.getName()+"->"+declaredConstructor.getParameterCount());
    }
}

 4.class提供了从类中获取成员变量的4个方法

请看下面代码:

package 反射;

import org.junit.Test;

import java.lang.reflect.Field;

//获取类的成员变量
public class Test2 {
    @Test
    public void getField() throws NoSuchFieldException, IllegalAccessException {
        Class<Cat> catClass = Cat.class;
        Field[] fields = catClass.getDeclaredFields();
        for (Field field : fields) {
            System.out.println(field.getName()+"->"+field.getType());
        }

        //定位成员变量
        Field catName = catClass.getDeclaredField("name");
        //赋值
        Cat cat = new Cat();
        catName.setAccessible(true);
        catName.set(cat,"加菲猫");
        System.out.println(cat);
    }
}

5.类获取成员变量的API

标签:反射,java,name,简介,age,System,println,public,out
From: https://blog.csdn.net/unstoppable_619/article/details/141191099

相关文章

  • 计算机毕业设计推荐-基于JAVA的航空机票预定管理系统
    ......
  • 进阶 Java冒泡排序递归法 有点难度哦
    简介这里有用到递归的冒泡排序思路,难度对新手很大,不明白递归和冒泡排序的小伙子可以先看看我的其他两个文章。连接在这里:Java冒泡排序https://blog.csdn.net/ouhexie/article/details/140985984?spm=1001.2014.3001.5501Java递归算法https://blog.csdn.net/ouhexie/articl......
  • 基于Java的校园外卖系统设计与实现。开题报告+答辩PPT+万字论文
    准备毕业设计的时候到了,相信大部分宝子们还没有头绪吧。看完本文会让你受益匪浅。一、项目介绍 本系统是面向所有人的外卖点餐系统。系统内的角色分为管理员和前台用户。管理员有权登录管理端进行如员工信息管理、分类、菜品与套餐管理、查看订单详情及编辑个人资料等操作......
  • java+testng+selenium实现测试用例过程的录制,生成GIF。
    1.功能需求:支持灵活配置:因为本身已有用例执行失败的截图功能,所以需要支持针对单条测试用例的配置;支持testng框架xml多线程的执行;录制内容文件小、支持调整录制每帧间隔、每条用例录制最大时长(避免用例元素未定位到时长时间录制)。2.灵活配置实现创建注解,通过在测试用......
  • JavaSE基础知识分享(六)
    写在前面前面讲的是面向对象中的多态这部分,下面让我们来看看java中常用类这部分的内容!常用类Object概述:是Java中所有类的父类,包括自己定义的类和数组都继承自Object类。成员方法hashCode()获取对象地址值的int类型形式。getClass()获取对象的类的字节码文件对......
  • java流程控制之选择结构
    if单选择结构:我们很多时候需要去判断一个东西是否可行,然后我们才去执行,这样一个过程在程序中用if语句来表达。语法为:if(布尔表达式){//为true执行语句}if双选择结构:两个判断,if-else。语法为:if(布尔表达式){//为true执行语句}else{//为......
  • java后端详解中
    1.日期时间yyyy表示当天所在的年YYYY代表是weekinwhichyear,表示当天所在的周属于的年份,一周从周日开始,周六结束,只要本周跨年,返回的YYYY就是下一年。表示日期和时间的格式:newSimpleDateFormat("yyyy-MM-dd:HH:mm:ss")1)表示月份是大写的M;2)表示分钟则是小写的m;3)24小......
  • JAVA毕业设计|ssm高校宿舍管理系统的设计与开发jsp包含文档代码讲解
    收藏点赞不迷路 关注作者有好处文末获取源码一、系统展示二、万字文档展示 基于ssm高校宿舍管理系统的设计与开发jsp开发语言:Java数据库:MySQL技术:Spring+SpringMVC+MyBatis+Vue工具:IDEA/Ecilpse、Navicat、Maven 编号:ssm283一、系统展示二、万字文档展示第......
  • JAVA毕业设计|(免费)ssm实验室管理与排课系统包含文档代码讲解
     收藏点赞不迷路 关注作者有好处编号:ssm458ssm实验室管理与排课系统开发语言:Java数据库:MySQL技术:Spring+SpringMVC+MyBatis+Vue工具:IDEA/Ecilpse、Navicat、Maven文末获取源码(免费领源码)1.系统展示2.万字文档展示第5章系统详细设计最后对选题、开题、毕设开......
  • JAVA毕业设计|(免费)基于ssm的星巴克咖啡店管理系统包含文档代码讲解
     收藏点赞不迷路 关注作者有好处编号:ssm449基于ssm的星巴克咖啡店管理系统开发语言:Java数据库:MySQL技术:Spring+SpringMVC+MyBatis+Vue工具:IDEA/Ecilpse、Navicat、Maven文末获取源码(免费领源码)1.系统展示2.万字文档展示第5章系统详细设计5.1管理员角色功能设计......