zoukankan      html  css  js  c++  java
  • JAVA反射机制

    下面就简单的总结一下java反射机制,加深印象:

    什么是反射机制?

    JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;

    对于任意一个对象,都能够调用它的任意方法和属性;

    这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。

    Class类

    我们知道Java是一门面向对象语言,在Java的世界里,万物皆为对象,比如我们有一个Person类:

    public class Person { }

    我们创建一个Person类的实例,Person person = new Person; 那么这个person,就是Person类的实例对象。

    那么既然万物都为对象,所以类也是对象。

    类是什么的对象呢?类是Class类的对象,表示方式有三种:

    第一种,任何一个类都有一个隐含的静态成员变量class Class c1 = Person.class;

    第二种,已经知道该类的对象,通过getClass获得 Class c2 = person.getClass;

    第三种,Class类的forName方法 Class c3 = Class.forName("Person"); 

     

    通过类的类类型,我们经常会用到的方法就是newInstance方法,通过该方法可以创建该类的实例:

    Person personA = new Person;

    //直接new一个实例 Person personB = Person.class.newInstance;

    //通过newInstance方法获得Person的实例

    //在学习JAVAEE时候,newInstance方法我们最常见于获取数据库驱动 Class.forName("com.mysql.jdbc.Driver").newInstance;

    //需要注意的是,在使用newInstance方法的前提是该类必须要有无参构造方法

    动态加载类:

    编译时刻加载类称为静态加载,运行时刻加载类称为动态加载,使用new方法新建实例即为静态加载类,在编译时候就要加载全部类。

     

    方法的反射操作

    可以通过方法的反射操作实现方法的调用:

    import java.lang.reflect.Method;
    public class MethodDemo1 { 
        public static void main(String[] args) { 
        //要获取print(int, int) 
        //要获取类的方法就要获取类的信息,获取类的信息就要获取类的类类型 
        A a1 = new A; Class c = a1.getClass; 
        //2,获取方法 名称和参数列表 
        //getMethod获取的是public的方法
        try { 
            Method m = c.getDeclaredMethod("print", int.class,int.class);            
         //方法的反射操作 //a1.print(10, 20);方法的反射操作,用m来进行方法调用和前者效果一致 Object obj = m.invoke(a1, 10,20); //如果方法有返回值返回值,没有就null } catch (Exception e) { e.printStackTrace; } } } class A { public void print(int a , int b) { System.out.println(a + b); } public void print(String a , String b) {
       System.out.println(a.toUpperCase + "," + b.toUpperCase); } }

     

  • 相关阅读:
    python-正则表达式
    python-定制类
    阿里云全新发布云市场能力中心,招募10个领域、500家供应商
    《DNS攻击防范科普系列3》 -如何保障 DNS 操作安全
    《DNS攻击防范科普系列2》 -DNS服务器怎么防DDoS攻击
    《DNS攻击防范科普系列1》—你的DNS服务器真的安全么?
    云栖干货回顾 |“顶级玩家”集结!分布式数据库专场精华解读
    AnalyticDB for PostgreSQL 6.0 新特性介绍
    云栖干货回顾 | 云原生数据库POLARDB专场“硬核”解析
    从零开始入门 K8s | 可观测性:你的应用健康吗?
  • 原文地址:https://www.cnblogs.com/ZRJ-boke/p/6099452.html
Copyright © 2011-2022 走看看