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

一、反射机制概述

1、反射机制的作用:

​              通过Java语言中的反射机制可以操作字节码文件

可以读和修改字节码文件(类似于黑客)

Java中,反射是一种强大的工具。

 2、Java反射机制相关类在:java.lang.reflect

3、反射机制相关的重要的类有:

java.lang.class:代表整个字节码。class文件

java.lang.reflect.Method:代表字节码中的方法字节码

java.lang.reflect.Constructor:代表字节码中的构造方法字节码

java.lang.reflect.Field:代表字节码中的属性字节码

 4、必须掌握的重点就是:

其它的只需要了解就行。

二、获取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文件,或者说c2代表String类型
        //class java.lang.String
    }
}

第二种方式:通过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两个变量中保存的内存地址都是一样的,都指向方法区中的字节码文件)
    }
}

第三种方式: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
    }
}

 

在反射机制中,Class是一个非常重要的类,那么如何才能获取Class类呢?总共有以下三种方法可以获取

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

2)类名.Class

3)实例.getClass()

三、面试题

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

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

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

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

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

如果你觉得博主的文章的不错或者对你有帮助,可以点一个免费的关注支持一下博主,你的鼓励将是我创作的最大动力!! 

相关文章

显卡天梯图2024最新版,显卡是电脑进行图形处理的重要设备,...
初始化电脑时出现问题怎么办,可以使用win系统的安装介质,连...
todesk远程开机怎么设置,两台电脑要在同一局域网内,然后需...
油猴谷歌插件怎么安装,可以通过谷歌应用商店进行安装,需要...
虚拟内存这个名词想必很多人都听说过,我们在使用电脑的时候...
win11本地账户怎么改名?win11很多操作都变了样,用户如果想要...