IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 2021-7-23反射 -> 正文阅读

[Java知识库]2021-7-23反射

获取字节码对象

1)Class.forName("类的全路径");

2)类名.class

3)new 对象.getClass

反射

反射的前提:我们要获取、使用别人代码的功能

代码必须获取字节码对象(3种方式),才能进一步操作

单元测试方法

@Test+void+没有参数+public1
package cn.tedu.reflection;
/*反射测试的物流类,假装不是自己写的 别人写的*/
public class Student {
    String name;
    int age;

    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public void eat(){
        System.out.println("普通方法吃"+name);
    }
}



package cn.tedu.reflection;

import org.junit.Test;

public class TestReflect {
    /*单元测试方法:java运行测试的最小单位,使用灵活,推荐程度5
    * 语法要求:@Test+void+没有参数+public
    * */
    @Test
    public void getClazz() throws ClassNotFoundException {
        Class<?> student1 = Class.forName("cn.tedu.reflection.Student");
        Class<Student> student2 = Student.class;
        Class<? extends Student> student3 = new Student().getClass();
        System.out.println(student1);//字节码对象
        System.out.println(student2.getName());//获取类的全路径名
        System.out.println(student3.getSimpleName());//
    }
}
package cn.tedu.reflection;

import org.junit.Test;
import java.awt.event.FocusEvent;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Arrays;

public class TestReflection1 {

    @Test
    public void getConstrct(){
        Class<?>  clazz=Student.class;
        //获取构造方法
        Constructor<?>[] constructors = clazz.getConstructors();
        for ( Constructor<?> df:constructors
             ) {
            System.out.println(df);
            String name = df.getName();//构造方法名
            Class<?>[] parameterTypes = df.getParameterTypes();//构造方法类型—(数组打印)
        }
    }

    //获取Student普通方法
   @Test
    public void getfuntion(){
        Class<Student> clazz = Student.class;
        Method[] methods = clazz.getMethods();
        for (Method tt:methods
             ) {
           // System.out.println(tt);
         String name = clazz.getName();
            Class<?>[] parameterTypes = tt.getParameterTypes();

        }
    }



    //获取所有成员变量
    @Test
    public void getFields(){
        Class<Student> clazz = Student.class;
        Field[] fs = clazz.getFields();
        for (Field tt:fs
             ) {
            System.out.println(tt.getName());//成员变量名
            System.out.println(tt.getType().getName());//类型
        }
    }


    //创建对象
    @Test
    public void getObject() throws IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException {
        Class<Student> clazz = Student.class;
        //无参构造快捷
        Student student = clazz.newInstance();
        System.out.println(student);
        //创建含参数的对象,传入的字节码对象
        Constructor<Student> constructor = clazz.getConstructor(String.class, int.class);
        Student haimian = constructor.newInstance("海绵韩云", 3);
        String name = haimian.name;
        System.out.println(name);
        haimian.eat(66);
    }
     
     
}

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-07-24 11:18:43  更:2021-07-24 11:20:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 8:17:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码