首页 > 编程语言 >java的反射

java的反射

时间:2022-11-09 19:55:51浏览次数:43  
标签:反射 java clazz1 System 获取 println class out

package com.tedu.day16;

import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;

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

/**
 * 反射student类,获取student类的class类
 */
public class ReflectionStudent01 {
    public static void main(String[] args) throws Exception {
        // 获取class对象
        //方式1:通过student类的对象去调用getClass方法
        Class  clazz1 = new Student().getClass();
        // 方式二 通过类名.class
        Class<Student> clazz2 = Student.class;
        // 方式三通过class类中forName(类路径(包名.类名))方法
        Class  clazz3 = Class.forName("com.tedu.day16.Student");
        System.out.println(clazz1);
        System.out.println(clazz2);
        System.out.println(clazz3);
        //获取类的包名
        System.out.println("包名为:"+clazz1.getPackage().getName());
        //获取反射类的类名
        System.out.println("类名为:"+clazz1.getSimpleName());
        //获取反射类的全限定名(包名.类名)
        System.out.println("全限定名称为:"+clazz1.getName());
        System.out.println("==============================");
        //获取构造方法
        Constructor c1 = clazz1.getConstructor();
        System.out.println(c1);
        // 获取全参构造方法
        Constructor[] c2 = clazz1.getConstructors();
        for (Constructor con :
                c2) {
            System.out.println(con);
        }
        // 获取属性
        Field name = clazz1.getDeclaredField("name");
        System.out.println(name);
        // 获取所有的成员变量
        Field[] dec = clazz1.getDeclaredFields();
        for (Field f :
                dec) {
            System.out.println(f);
        }
        System.out.println("------------------------------------------");
        // 获取类的方法
        Method study = clazz1.getMethod("study", String.class);
        System.out.println(study);
        System.out.println("所有的方法==============================");
        Method[] methods = clazz1.getMethods();
        for (Method me :
                methods) {
            System.out.println(me);
        }
        // 利用反射去获取到class对象(student类),并创建student对象
        System.out.println("获取对象=========================");
        Object o = clazz1.newInstance();
        System.out.println(o);
        System.out.println("创建student对象时调用全参构造");
        Constructor con = clazz1.getConstructor(String.class, int.class);
        // 通过带参构造去进行studnet对象创建
        Object o2 = con.newInstance("蔡恒", 30);
        System.out.println(o2);
        //想要获取student类中的set或者get,必须向下转型
        Student stu1 = (Student)o;
        stu1.setAge(29);
        stu1.setName("钱嘉菲");
        stu1.study("java");
    }
}

标签:反射,java,clazz1,System,获取,println,class,out
From: https://www.cnblogs.com/ch2020/p/16874956.html

相关文章

  • SpringBoot 01: JavaConfig + @ImportResource + @PropertyResource
    springboot的前置知识:通过注解创建对象和读取配置文件1.JavaConfig设计思想使用java类作为xml配置文件的替代,是配置spring容器的纯java的方式可以创建java对象并把......
  • javascript初识以及总结
    今天主要学习了js的概述,书写的三种位置(和css一样内嵌外联和内联三种)以及变量的定义,变量的定义用的是var来定义的并且学了五种数据类型 有number数值型strin......
  • Java并发编程一ThreadLocal初使用
    推荐:​​Java并发编程汇总​​Java并发编程一ThreadLocal初使用任务为了方便使用以及展现​​ThreadLocal​​​的优点,这里首先给出一个任务,然后不断地去加大任务难度,再根据......
  • Java并发编程一引用类型、升级类型原子类初使用加源码分析
    推荐:​​Java并发编程汇总​​Java并发编程一引用类型、升级类型原子类初使用加源码分析首先我们来看一看有哪些原子类。现在我们来看看该如何去使用这些引用类型、升级类......
  • Java并发编程一ReentrantReadWriteLock初使用
    推荐:​​Java并发编程汇总​​Java并发编程一ReentrantReadWriteLock初使用​​ReentrantReadWriteLock​​是一种读写锁,从类名也可以看出来。​​ReentrantReadWriteLock​......
  • Java中String被称为不可变字符串的原因
    很多东西,看似可变,实际上不过是是新桃换旧符罢了。 代码:/***String之所以被称为不可变字符串*/staticvoidtestString(){Stringstr="i......
  • mac下java和mvn的环境配置
    原文:https://blog.csdn.net/w605283073/article/details/111770386   https://www.pudn.com/news/62f8c6905425817ffc462029.htmlmvn打包报错:Nocompilerisprov......
  • Net6 反射反射程序员的快乐/遍历属性、字段、构造方法、函数及相关操作
    十年河东,十年河西,莫欺少年穷学无止境,精益求精反射反射,程序员的快乐,利用反射可以获取到私有属性及其值 在C#中反射无处不在,用好反射,就可以为所欲为有这么一个学生类:......
  • JAVA遍历Map所有元素
    //JDK1.5Mapmap=newHashMap();for(Objectobj:map.keySet()){Objectkey=obj;Objectvalue=map.get(obj);}123456//JDK1.4......
  • java 串口工具jSerialComm
    由于项目之前用的串口工具RXTX只支持到jdk1.8然后项目目前用到的jdk是13的所以在网上找了一下找到了这个 jSerialComm目前使用是支持13及1.8的没做其它jdk版本测试......