首页 > 其他分享 >通过类的字节码文件对象获取构造方法并创建对象

通过类的字节码文件对象获取构造方法并创建对象

时间:2024-08-23 21:28:27浏览次数:9  
标签:字节 构造方法 System 创建对象 获取 Constructor println out

package com.shujia.day21;

import java.lang.reflect.Constructor;
import java.util.Arrays;

/*
    类中的三大成员:
        成员变量:Field
        构造方法:Constructor
        成员方法:Method

    获取构造方法,通过类的字节码文件对象进行获取
    public Constructor<T> getConstructor(Class<?>... parameterTypes) 获取一个类中某一个公共的构造方法
            getConstructors          获取类中所有公共的构造方法
            getDeclaredConstructors  获取类中所有的构造方法,包括私有的
    创建对象 通过获取的构造方法进行创建对象
            newInstance()
            con.newInstance(“zhangsan", 20);

    反射获取构造方法并创建对象
    调用私有的构造方法赋值需要先进行暴力访问  c3.setAccessible(true);
 */
public class StructureDemo1 {
    public static void main(String[] args) throws Exception{
        //如何通过反射获取一个类中的构造方法,并创建对象
        //获取类的Class对象
        Class<?> studentClass = Class.forName("com.shujia.day21.Student");

        //public Constructor<T> getConstructor(Class<?>... parameterTypes) 获取一个类中某一个公共的构造方法
        //获取一个类中无参的公共的构造方法
        Constructor<?> c1 = studentClass.getConstructor(); // 无参的构造方法
        System.out.println(c1);
        //获取一个有一个参数是String类型的构造方法
        Constructor<?> c2 = studentClass.getConstructor(String.class);
        System.out.println(c2);
//        Constructor<?> c3 = studentClass.getConstructor(String.class, int.class);
//        System.out.println(c3);
        //如何获取私有的构造方法
        Constructor<?> c3 = studentClass.getDeclaredConstructor(String.class, int.class);
        System.out.println(c3);

        System.out.println("------------------------------------------------");
        //getConstructors() 获取类中所有公共的构造方法
        Constructor<?>[] cs = studentClass.getConstructors();
        System.out.println(Arrays.toString(cs));

        System.out.println("------------------------------------------------");
        //获取类中所有的构造方法,包括私有的
        Constructor<?>[] cs2 = studentClass.getDeclaredConstructors();
        System.out.println(Arrays.toString(cs2));
        System.out.println("------------------------------------------------");
        //如何通过获取的构造方法进行创建对象
        //newInstance(Object ... initargs)
        Object o = c1.newInstance();
        System.out.println(o);
        System.out.println("------------------------------------------------");
        Object o2 = c2.newInstance("魏一民");
        System.out.println(o2);
        System.out.println("------------------------------------------------");
        c3.setAccessible(true); // 暴力访问
        Object o3 = c3.newInstance("魏一民", 18);
        System.out.println(o3);


    }
}

标签:字节,构造方法,System,创建对象,获取,Constructor,println,out
From: https://www.cnblogs.com/qiwei-bigdata/p/18377108

相关文章

  • 获取一个字节码文件对应的Class对象
    packagecom.shujia.day21;/*如何获取一个字节码文件(编译后得到的.class后缀的文件)对应的Class对象一个字节码文件,在内存中只会存在一个对应的Class类对象*/publicclassClassDemo1{publicstaticvoidmain(String[]args)throwsException{//......
  • 【15】Java字节码
    Java方法栈帧的组成:操作数栈+局部变量表操作数栈Java字节码是Java虚拟机所使用的的指令集。它与JVM基于栈的计算模型是分不开的。在解释执行过程中,每当为Java方法分配栈桢时,Java虚拟机往往需要开辟一块额外的空间作为操作数栈,来存放计算的操作数以及返回结果。执行......
  • I/O(输入/输出)——字节流和字符流
    一、字节流    在计算机中,无论是文本、图片、音频还是视频,所有文件都是以二进制的形式(也就是字节)存在的。为字节的输入输出流提供的一系列流统称为字节流。在JDK中提供了两个抽象类InputStream和OutputStream,它们是字节流的顶级父类。1.InputStream    Inpu......
  • 微软发布 Phi-3.5 系列模型,涵盖端侧、多模态、MOE;字节 Seed-ASR:自动识别多语言丨 RTE
       开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(Real-TimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编......
  • C# Deflate压缩字节数组(和java压缩结果一样)利用zlib.net对文件进行压缩
    今天在对接一个三方接口时,需要传一个附件数据,附件需要使用Deflate压缩算法压缩后的文件二进制流,再进行base64编码后的字符串。刚开始使用的官方自带的System.IO.Compression.DeflateStream方式,结果不管怎么改变CompressionLevel级别,压缩结果始终和java的压缩结果不一致,结果不一致......
  • lcd屏幕显示jpeg图片,其中lcd每个像素占据4字节
    //编译//arm-openwrt-linux-muslgnueabi-gcc-o17_safe_lcd_camera_test./jpeg_show.c-L./lib/-ljpeg-I./include/#include<stdio.h>#include<stdlib.h>#include<jpeglib.h>#include<setjmp.h>#include<stdint.h>#includ......
  • 字节显示转换操作类 - C#小函数类推荐
          此文记录的是一个将字节大小的值转换为KB、MB等显示的小函数。/***字节显示转换操作类AustinLiu刘恒辉ProjectManagerandSoftwareDesignerE-Mail:[email protected]:http://lzhdim.cnblogs.comDate:2024-01-1515:......
  • 由字节对齐引发的一场“血案“
    最近在搞个网络通信协议,采用socketudp传输,运行时,居然报段错误了,经过debug,发现居然是因为字节对齐问题导致的。这个问题在实现通信协议,是经常会遇到的问题,为了方便读者理解,我把内容做了简化,分享给大家。1、协议说明通信协议信令格式如下:typedefstructprotocol_msg_s{ ......
  • 静态块,实例块,构造方法执行顺序
    publicclassTest{privatefinalStringa;static{System.out.println("静态初始化块执行");}//类加载时执行{System.out.println("实例初始化块执行");a="123";}//实例块在构造之前publicTest(){......
  • 字节缓冲输出流BufferedOutputStream day17
    packagecom.shujia.day17.ketang;importjava.io.BufferedOutputStream;importjava.io.FileOutputStream;/*java针对字节输入流和字节输出流都提供了相应的缓冲流来提高读写的速度。字节流:输入流:InputStream-FileInput......