温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Java基础之反射原理与用法详解

发布时间:2020-09-19 20:14:41 来源:脚本之家 阅读:119 作者:扎心了,老铁 栏目:编程语言

本文实例讲述了Java基础之反射原理与用法。分享给大家供大家参考,具体如下:

1.什么是反射?

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

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

2.反射机制能做什么?

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

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

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

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

3.反射机制相关的API

获得完整的包名和类名

Student.java

package com.reflect.test;
public class Student {
  private int id;
  private String name;
  public Student() {}
  public Student(int id, String name) {
    super();
    this.id = id;
    this.name = name;
  }
  public int getId() {
    return id;
  }
  public void setId(int id) {
    this.id = id;
  }
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  @Override
  public String toString() {
    return "Student [id=" + id + ", name=" + name + "]";
  }
}

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

获取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

更多java相关内容感兴趣的读者可查看本站专题:《Java面向对象程序设计入门与进阶教程》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》

希望本文所述对大家java程序设计有所帮助。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI