• Java反射机制(详解)——获取class的三种方式


    其最重要的一个作用就是可以动态地创建类的对象,获取方法如下

    第一种方式:通过Class c1 = Class.forName(“java.lang.String”);

    public static 类 forName(String className)
    返回与具有给定字符串名称的类或接口关联的类对象

    public class test03{
        public static void main(String args[]){
            /*Class.forName:
            *       1、静态方法
            *       2、方法的参数是String类型的
            *       3、字符串必须是一个完整的类名,即必须带有包名*/
            Class c1 = null;
            try {
                c1 = Class.forName("java.lang.String");
            } catch (ClassNotFoundException e) {
                throw new RuntimeException(e);
            }
            System.out.println(c1);//c1代表String.class文件,或者说c1代表String类型
            //class java.lang.String
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    第二种方式:通过Class x = 对象.getClass();

    import java.util.Date;
    public class test03{
        public static void main(String args[]){
            Class c1 = null;
            Class c2 = null;
            try {
                c1 = Class.forName("java.lang.String");
                c2 = Class.forName("java.util.Date");
            } catch (ClassNotFoundException e) {
                throw new RuntimeException(e);
            }
            System.out.println(c1);
            
            //第二种方式:Java中任何一个对象都有一个方法:get.class()
            String s = "abc";
            Class x = s.getClass(); //x代表String.class文件,或者说x代表String类型
            System.out.println(x==c1);//true(==比较的是内存地址,说明两个的内存地址是一样的)
            Date date = new Date();
            Class y = date.getClass();
            System.out.println(y==c2);//true
     //(y和c2两个变量中保存的内存地址都是一样的,都指向方法区中的字节码文件)
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    第三种方式:Java语言中 任何一种数据类型(包括基本数据类型),都有一个.Class属性

    Class c= 任何类型.class;

    import java.util.Date;public class test03{
        public static void main(String args[]){
            Class c1 = null;
            Class c2 = null;
            try {
                c1 = Class.forName("java.lang.String");
                c2 = Class.forName("java.util.Date");
            } catch (ClassNotFoundException e) {
                throw new RuntimeException(e);
            }
            System.out.println(c1);//c1代表String.class文件,或者说c1代表String类型
            //输出:class java.lang.String
            //第二种方式:Java中任何一个对象都有一个方法:get.class()
            String s = "abc";
            Class x = s.getClass(); //x代表String.class文件,或者说x代表String类型
            System.out.println(x==c1);//true(==比较的是内存地址,说明两个的内存地址是一样的)
            Date date = new Date();
            Class y = date.getClass();
            System.out.println(y==c2);//true//第三种方式:Java语言中 任何一种数据类型(包括基本数据类型),都有一个.Class属性
            Class z = String.class;
            Class w = int.class;
            System.out.println(z==x);//true
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    面试题

    Java创建对象的方式总共有以下几种:

    1)通过new语句实例化一个对象

    2)通过反射机制创建对象

    3)通过clone()方法创建对象

    4)通过反序列化的方式创建对象

    获取到对象 进而可以获取 方法, 属性,。。。。。

    在这里插入图片描述

  • 相关阅读:
    大道至简读后感
    【爬虫】(一)fossies.org
    手动构造神经网络前向传播算法(Numpy代码手写)
    Kafka部署、原理和使用介绍
    AnatoMask论文汇总
    http模块中----------res响应对象 与服务器相关的数据和属性
    【ESP8266】烧录无线中继固件详细教学
    [02] BLEMotion-Kit 基于QMI8658传感器使用加速度计进行倾斜检测
    【JVM笔记】类型转换字节码指令
    EFK部署centos7.9(一)ES单节点部署
  • 原文地址:https://blog.csdn.net/wufagang/article/details/128214042