首页 > 编程语言 >Java反射

Java反射

时间:2023-12-28 16:32:47浏览次数:28  
标签:反射 Java String stuClass System Student println out

一、获取Class对象

1、调用运行时类的 .class 属性

Class stuClass = Student.class;

2、调用运行时类的 getClass 方法

Student s = new Student();
Class stuClass = s.getClass();

3、调用 Class 类的静态方法:forName(String classPath)【该种方法用的多】

Class stuClass = Class.forName("com.example.demo.test.反射.Student");

二、获取字段

1、获取所有公有的字段

Field[] fieldArray = stuClass.getFields();
for (Field f : fieldArray) {
	System.out.println(f);
}

2、获取所有的字段(包括私有、受保护、默认的)

fieldArray = stuClass.getDeclaredFields();
for (Field f : fieldArray) {
	System.out.println(f);
}

3、获取公有字段 并调用

Field publicField = stuClass.getField("name");
System.out.println("publicField====" + publicField);

4、获取一个对象(产生Student对象--》Student stu = new Student();)

Object obj = stuClass.getConstructor().newInstance();
publicField.set(obj, "彭于晏");
//验证
Student stu = (Student) obj;
System.out.println("验证姓名:" + stu.name);

5、获取私有字段 并调用

Field privateField = stuClass.getDeclaredField("phoneNum");
System.out.println("privateField=====" + privateField);
privateField.setAccessible(true);//暴力反射,解除私有限定
privateField.set(obj, "123456");
System.out.println("验证电话:" + stu);

三、获取方法

1、获取所有公有方法

Method[] methodArray = stuClass.getMethods();
for (Method m : methodArray) {
	System.out.println(m);
}

2、获取所有的方法,包括私有的

Method[] methodArray = stuClass.getDeclaredMethods();
for (Method m : methodArray) {
	System.out.println(m);
}

3、获取公有的show1()方法

Method m = stuClass.getMethod("show1", String.class);
System.out.println(m);
//实例化一个Student对象
Object obj2 = stuClass.getConstructor().newInstance();
m.invoke(obj2, "刘德华");

4、获取私有的show4()方法

Method m = stuClass.getDeclaredMethod("show4", int.class);
System.out.println(m);
m.setAccessible(true);//解除私有限定
Object result = m.invoke(obj2, 20);//需要两个参数,一个是要调用的对象(获取有反射),一个是实参
System.out.println("返回值:" + result);



class Student {

    public String name;
    protected int age;
    char sex;
    private String phoneNum;

    @Override
    public String toString() {
        return "Student [name=" + name + ", age=" + age + ", sex=" + sex + ", phoneNum=" + phoneNum + "]";
    }

    public Student() {

    }

    public void show1(String s) {
        System.out.println("调用了:公有的,String参数的show1(): s = " + s);
    }

    protected void show2() {
        System.out.println("调用了:受保护的,无参的show2()");
    }

    void show3() {
        System.out.println("调用了:默认的,无参的show3()");
    }

    private String show4(int age) {
        System.out.println("调用了,私有的,并且有返回值的,int参数的show4(): age = " + age);
        return "abcd";
    }
}


标签:反射,Java,String,stuClass,System,Student,println,out
From: https://blog.51cto.com/u_16326878/9016350

相关文章

  • java-异常处理
    在Java中,异常是指程序在运行过程中遇到的错误或异常情况,它可能导致程序无法正常执行。Java提供了异常处理机制,允许我们捕获和处理这些异常,以便程序能够更加健壮地运行。Java中的异常分为两种类型:CheckedException(受检异常)和UncheckedException(非受检异常)。CheckedException(受......
  • JavaScript | Variable、Function、Module、Class (一)
    函数函数声明functionsayHello(){return"HelloJavaScript!!"}函数表达式letsayHello=function(){return"HelloJavaScript!!"}函数、变量提升:函数和变量都会被提升,且函数会被优先提升;提升的意思是只要有声明定义,那么先调用都可以。因为JS会把定义放到......
  • Java 原型模式
    原型模式是一种创建型设计模式,用于在保证性能的情况下创建新的对象实例。原型模式允许一个对象再创建另外一个可定制的对象,而无需知道创建的细节。其工作原理是通过拷贝实现对象创建,即clone()。但是我们通过new也能创建一个属性一样的对象,两者的区别是什么呢?new操作符:用于创建......
  • Linux 服务器 Java 进程消失问题怎么解决
    当您在使用NginxWebUI进行反向代理时遇到504错误,这通常是由于Nginx无法在合理的时间内完成请求处理。504错误是Nginx的通用错误,表示"网关超时"。以下是可能导致此问题的原因以及相应的解决方案:1.后端服务器问题原因:后端服务器可能由于各种原因无法及时响应。解决方案:检查后端服务......
  • 无涯教程-Java泛型 - 绑定类型清除
    如果使用有界的类型参数,Java编译器会用其界线替换通用类型的类型参数。packagecom.learnfk;publicclassGenericsTester{publicstaticvoidmain(String[]args){Box<Integer>integerBox=newBox<Integer>();Box<Double>doubleBox=newBox<Double>()......
  • 【类型转换】使用c#实现简易的类型转换(Emit,Expression,反射)
    引言哈喽。大家好,好久不见,最近遇到了一个场景,就是在FrameWork的asp.netmvc中,有个系统里面使用的是EntityFramework的框架,在这个框架里,提供了一个SqlQuery的方法,这个方法很好用啊,以至于在EFCORE8里面又添加了回来,不过不知道性能怎么样,我遇到的场景是通过SqlQuery查询的时......
  • java-类
    在Java中,类是面向对象编程的基本概念之一。类是用来描述对象的属性(状态)和行为(方法)的模板或者蓝图。当我们创建一个类时,实际上是定义了一个新的数据类型,可以根据这个类来创建相应的对象。下面是一个简单的类的示例:javaCopyCodepublicclassPerson{//定义类的属性S......
  • java-继承
    在面向对象编程中,继承是一种重要的特性,它允许我们创建一个新的类(称为子类),从已有的类(称为父类或超类)继承属性和方法。通过继承,子类可以获得父类的特性,并且可以在此基础上添加新的特性或修改已有的特性。下面是一个简单的继承的示例:javaCopyCode//定义父类classAnimal{......
  • 二十,JAVA File
    相对路径:IO流默认目录:当前项目工程开始自己算绝对路径:带盘符的路径:网络路径:https://img2.baidu.com/it/u=3164322677&fm=253&fmt=auto&app=120File:文件(带后缀的)和目录(文件夹)//静态字段:System.out.println("File.pathSeparator="+File.p......
  • 十九,反射
    //断言模式:10+10=30@TestpublicvoidtestAdd(){  Assert.assertEquals(20,newJiSuanQi().add(10,10));}  @Ignore//忽略该函数  @Test(timeout=3000)//单位:毫秒  publicvoidtestRun(){    //while(true){    //  ......