zoukankan      html  css  js  c++  java
  • Java基础加强之反射

    1.什么是反射?

    反射其实就是动态的加载类,我们在写JDBC的时候加载驱动Class.forName("xxx")时就涉及到了反射。

    反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

    2.反射机制能做什么?

    1. 在运行时判断任意一个对象的所属的类Class

    2. 在运行时判断构造任意一个类的对象Constructor

    3. 在运行时判断任意一个类所具有的成员变量Field和方法Method

    4. 在运行时调用任意一个对象的方法。method.invoke(object,args)

    3.反射机制相关的API

    获得完整的包名和类名

    Student.java

     1 package com.reflect.test;
     2 
     3 public class Student {
     4     private int id;
     5     private String name;
     6     
     7     public Student() {}
     8     
     9     public Student(int id, String name) {
    10         super();
    11         this.id = id;
    12         this.name = name;
    13     }
    14 
    15     public int getId() {
    16         return id;
    17     }
    18 
    19     public void setId(int id) {
    20         this.id = id;
    21     }
    22 
    23     public String getName() {
    24         return name;
    25     }
    26 
    27     public void setName(String name) {
    28         this.name = name;
    29     }
    30 
    31     @Override
    32     public String toString() {
    33         return "Student [id=" + id + ", name=" + name + "]";
    34     }
    35     
    36     
    37     
    38     
    39 }
    View Code

    Test.java

    package com.reflect.test;
    
    public class Test {
        
        Student stu = new Student();
        
        public static void main(String[] args) {
            Test test = new Test();
            test.getClassName();
        }
        //获得完整的包名和类名
        public void getClassName() {
            System.out.println(stu.getClass().getName());
        }
    
    }

    运行结果

    com.reflect.test.Student
    View Code

    获取Class的三种方法

       public static void main(String[] args) {
            Test test = new Test();
            test.getStudentClass();
        }
        
        //获取Class对象的三种犯法
        public void getStudentClass() {
            //第一种方法,forName
            Class<?> class1;
            try {
                class1 = Class.forName("com.reflect.test.Student");
                System.out.println("class1:"+class1);
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }        
            //第二种方法,class
            Class<?> class2 = Student.class;
            System.out.println("class2:"+class2);
            //第三种方法,getClass()
            Student stu1 = new Student();
            Class<?> class3 = stu1.getClass();
            System.out.println("class3:"+class3);
        }

    运行结果

    class1:class com.reflect.test.Student
    class2:class com.reflect.test.Student
    class3:class com.reflect.test.Student
    View Code
  • 相关阅读:
    influxdb 使用
    【刷题】如何查找最长链
    学习中的开源框架和系统
    常见错误总结
    开发者必备网站
    计算机基础知识以及常用业务场景
    (1)、hive框架搭建和架构简介
    hadoop安装和配置
    linux基础
    UML学习目录
  • 原文地址:https://www.cnblogs.com/qingyunzong/p/8480648.html
Copyright © 2011-2022 走看看