首页 > 编程语言 >java反射之基础

java反射之基础

时间:2022-10-20 13:45:22浏览次数:48  
标签:反射 java name cl void 基础 public sb Class

1.加载并获取该Class对象可以通过三种方式:

1.1:Class.forName(类的全路径)

 

 Class cl = Class.forName("Demo1.GetClass");

 

 

1.2:实例对象.getClass()方法

 

  Class c = model.getClass();

 

 

1.3:类名.class属性

 

        Class modelClass = TestModel.class;

 

2.进行反射测试的实体类

package Demo1;

import javax.annotation.Resource;
import java.io.InputStream;
import java.io.Serializable;
import java.sql.SQLException;
import java.util.IllegalFormatCodePointException;

/**
 * Created by 123 on 2017/07/16.
 */
public class GetClass implements Serializable, Runnable {

    private String name;
    @Resource
    private int age;


    public GetClass() {
    }

    public GetClass(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }


    public String getStr(String name) throws SQLException, IllegalFormatCodePointException {
        return name;
    }


    public void run() {

    }
}

 

2.1-------------------->cl就是class对象

 

 public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, InstantiationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException {
        Class cl = Class.forName("Demo1.GetClass");
        
        //包名
        GetPackNameAndClassName(cl);

        //获取父类名称+所有的接口
        getSuperAndInterface(cl);

        //字段
        getManyFields(cl);

        //获取方法
        getAllMethod(cl);

        //调用方法
        GoMethod(cl);

        //获取构造
        GetConstructors(cl);

        //方法抛出的异常
        getExceptions(cl);

        //拿到注解
        getManyAnnotions(cl);
    }

 

3.获取包名

 

 public static void GetPackNameAndClassName(Class cl) {
        System.out.println("包名" + cl.getPackage().getName());
    }

 

4.获取父类名称+所有的接口

public static void getSuperAndInterface(Class cl) {
        System.out.println("此类父类的类名是:" + cl.getSuperclass().getName());
        Class[] interfaces = cl.getInterfaces();
        StringBuffer sb = new StringBuffer("此类实现的接口有:");
        for (Class cs : interfaces) {
            sb.append(cs.getSimpleName());
        }
        System.out.println(sb.substring(0, sb.length() - 1));
    }

 

5.获取字段

 private static void getManyFields(Class cl) throws NoSuchFieldException, IllegalAccessException, InstantiationException {
        StringBuffer sb = new StringBuffer("此类中的字段有:");
        Field[] declaredFields = cl.getDeclaredFields();

        Field name = cl.getDeclaredField("name");
        System.out.println("name字段" + name.getName());


        name.setAccessible(true);

        Object o = cl.newInstance();
        System.out.println("name字段的值为:" + name.get(o));


        for (Field item : declaredFields) {
            //忽略字段privet
            item.setAccessible(true);
            sb.append("若多字段" + item.getName() + ",");
        }
        System.out.println(sb.substring(0, sb.length() - 1));
    }

 

6.调用方法

 private static void GoMethod(Class cl) throws NoSuchMethodException, IllegalAccessException, InstantiationException, InvocationTargetException {
        Method method = cl.getMethod("getStr", String.class);
        Object obj = cl.newInstance();
        Object invoke = method.invoke(obj, "厉害了");
        System.out.println(invoke);
    }

 

7.获取或执行构造

 private static void GetConstructors(Class cl) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
        Constructor[] cs = cl.getConstructors();
        StringBuffer sb = new StringBuffer("此类中的构造有:");
        for (Constructor item : cs) {
            sb.append(item.getName() + ",");
        }
        System.out.println(sb.substring(0, sb.length() - 1));

        //执行带参构造
        Constructor cs1 = cl.getConstructor(String.class, Integer.class);
        //使用newinstance函数执行构造
        cs1.newInstance("呵呵", 18);

    }

 

8.获取方法抛出的异常

private static void getExceptions(Class cl) throws NoSuchMethodException {
        Method getStr = cl.getMethod("getStr", String.class);
        Class[] exces = getStr.getExceptionTypes();
        StringBuffer sb = new StringBuffer("此方法中抛出的异常有:");
        for (Class item : exces) {
            sb.append(item.getName() + ",");
        }
        System.out.println(sb.substring(0, sb.length() - 1));
    }

 

9.获取注解

private static void getManyAnnotions(Class cl) throws NoSuchFieldException {
        Field age = cl.getDeclaredField("age");
        Resource ans = age.getAnnotation(Resource.class);
        System.out.println(ans);
    }

 

标签:反射,java,name,cl,void,基础,public,sb,Class
From: https://www.cnblogs.com/quliang/p/7223946.html

相关文章

  • 如何利用Java在Word中创建表格
    当我们在编辑Word文档时,如果遇到大量数据需要体现,可以选择直接在Word文档中创建表格。将数据应用于表格内,不仅能够简化文档语言,而且也可以使数据内容更加清晰、直观。下面......
  • AcCoders 10477:【省选基础数据结构 树链剖分】【GDOI2016】疯狂动物城 题解
    算法:树链剖分,可持久化线段树。题目大意给定\(n\)个结点的一棵树,\(m\)次操作,操作有三种:将\(x\)至\(y\)最短路径上的所有点的权值加上\(delta\)。对于\(x\)至......
  • java学习笔记40
    面向对象static关键字详解静态属性packageoopzong.oop.opp6;//static:在类中使用修饰成员变量,在方法就是成员方法 静态方法和静态属性publicclassStudent{​ ......
  • k8s基础篇 pod(二)创建
    2.如何创建一个Pod资源Pod是Kubernetes中最基本的部署调度单元,可以包含container,逻辑上表示某种应用的一个实例。例如一个web站点应用由前端、后端及数据库构建而成,这三个组......
  • Java并发编程学习8-同步工具类
    同步工具类同步工具类可以是任意一个对象,只要它根据其自身的状态来协调线程的控制流。阻塞队列可以作为同步工具类,类似地还有信号量(Semaphore)、栅栏(Barrier)以及闭锁(Latch)......
  • 记事本写java程序带汉字时,编辑后发生错误解决办法
    程序中带有汉字,编辑时,出现在notpad中将字符集改为,nasi......
  • 【JavaWeb】一文搞懂Response
    @[Toc]1Response继承体系response和request一样2Response响应2.1响应行方法名方面类型方法作用setStatus(intsc)void设置响应状态码2.2响应头方法名方法类型方法作用se......
  • 【JavaWeb】 一文搞懂Request
     前言Request:获取请求数据Response:设置响应数据1Request的继承体系service(request,response)是由谁创建的?Tomcat。Tomcat需要解析请求数据,封装为request对象,并且创建requ......
  • 【JavaWeb】 Mybatis-01-Mybatis的简介:用对话的方式让你明白为什么要使用Mybatis
    一、什么是Mybatis?MyBatis是一款优秀的持久层框架,它支持自定义SQL、存储过程以及高级映射。MyBatis免除了几乎所有的JDBC代码以及设置参数和获取结果集的工作。MyBati......
  • 第一课:基础知识
    1、C的优点:高效(未理解)、可移植(某一系统编写的C程序可在多系统通行)、灵活、面向程序员(未理解)2、C的缺点:指针错误难发现、结合了大量运算符,代码难理解(未理解,传说中的“屎山......