java反射机制(上)

Java反射机制
在这之前首先得有一定java基础

IDEA通过类名就能点出方法、成员变量,那么IDEA是如何知道类里面有什么方法、成员变量的?

什么是反射?
反射是一种机制,可以通过该机制在程序运行过程中对类进行解剖,解剖之后就可以操作类的所有成员。

反射是一种变态的机制,在反射面前所谓的私有都是浮云,看下文。

反射的使用场景
*开发IDE(集成开发环境,英文名:Integrated Development Environment):IDE具体是什么不做解释,自行百度,一般人接触不到。
开发框架:一个牛的框架肯定会用到反射
*框架:类库,一堆类放在一起的一个后缀jar的架包,其他自行百度。
*学习框架:初学者学反射为了学框架,也需要会反射,从上可理解不解释

构造方法:通过反射操作构造方法创建对象
成员方法:通过反射操作成员方法调用该成员方法
成员变量:通过反射操作成员变量给成员变量赋值和取值

反射前提条件:获得类对应的Class对象

Class对象概述

.java文件编译后成为.class文件,class文件加载中jvm截取文件内容获得class文件的东西(成员变量、方法),然后把这些东西封装成class对象
Class文件:字节码文件
反射就是通过class对象来操作的
.java:死去的你
编译:投胎
Class:在奈何桥喝过汤的你
程序运行:投胎过程
已经加载到内存:现在的你
你的前世死去后去投胎,喝了孟婆汤后跳下凡间,在来到凡间之前一秒你跟阎王签下了今生契约,契约包含了你今生今世所有故事,这就是你的命!这份契约就是class对象,通过契约就可以操作你的命,就好比僧悟空闹阎王那时候划生死账簿得永生。
Class有该对象所有信息

获得class方式
- 方式1:通过类名点class获得class对象
- 语法:Class 对象名 = 类名.class;
- 方式2:通过对象调用getClass方法获取Class对象
- 语法:Class对象名 = 对象名.getClass;
- 方式3:通过Class类的静态方法forName(“类全名”)方法获取
- 语法:Class 对象名 = Class.forName(“类全名”);
需要处理找不到类异常ClassNotFoundException

用的比较多的是第三种

public static void main(String[] args) throws ClassNotFoundException {
        //字符串
        String str = "反射";
        //通过类名点class获得class对象
        Class strClass1 = String.class;
        System.out.println(strClass1);//class java.lang.String

        //通过对象调用getClass方法获取Class对象
        Class strClass2 = str.getClass();
        System.out.println(strClass2);//class java.lang.String

        //strClass1跟strClass2比较是否相等
        System.out.println(strClass1 == strClass2);//true   相等

        //通过Class类的静态方法forName(“类全名”)方法获取
        Class strClass3 = Class.forName("java.lang.String");//class java.lang.String
        System.out.println(strClass3);

        //strClass1跟strClass3比较是否相等
        System.out.println(strClass1==strClass3);//true     相等
    }

Class对象常用方法
*获得类全名
String getSimpleName()

*获得类名
String getName()

*创建类的对象
T newInstance()
*在JDK9.0已过时,需要抛出异常IllegalAccessException, InstantiationException,
默认走无参构造

public static void main(String[] args) throws IllegalAccessException, InstantiationException {

        Class c1 = Student.class;

        System.out.println(c1.getName());//com.***.反射机制.Student
        System.out.println(c1.getSimpleName());//Student
        System.out.println(c1.newInstance());//com.***.反射机制.Student@4b6995df

    }

扯了那么久还进入主题哈!下文Constructor类

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值