Java基础学习:注解和反射06(获得反射对象)

Java基础学习:注解和反射06

  • 获得反射对象:

     

  • Java反射机制提供的功能:

    • 在运行时判断任意一个对象所属的类;

    • 在运行时构造任意一个类的对象;

    • 在运行时判断任意一个类所具有的成员变量和方法;

    • 在运行时获取泛型信息

    • 在运行时调用任意一个对象的成员变量和方法

    • 在运行时处理注解

    • 生成动态代理

 

  • 反射的优点和缺点:

    • 优点:可以实现动态创建对象和编译,体现出很大的灵活性;

    • 缺点:对性能有影响,使用反射基本上是一种解释操作,我们可以告诉JVM,我们希望做什么并且它满足我们的要求,这类操作总是慢于直接执行相同的操作;

 

  • 反射的主要API:

    • java.lang.Class:代表一个类

    • java.lang.reflect.Method:代表类的方法

    • java.lang.reflect.Field:代表类的成员变量

    • java.lang.reflect.Constructor:代表类的构造器

 

  • 代码案例:反射获取Class对象

    import java.io.ObjectInputStream;

    /**
    * 什么是反射:
    */
    public class Test01 extends Object {
       public static void main(String[] args) throws ClassNotFoundException {
           //通过反射获取类的Class对象
           Class  c1 = Class.forName("com.ljx5.demo02.User");
           System.out.println(c1);//class com.ljx5.demo02.User


           Class  c2 = Class.forName("com.ljx5.demo02.User");
           Class  c3 = Class.forName("com.ljx5.demo02.User");
           Class  c4 = Class.forName("com.ljx5.demo02.User");

           //一个类在内存中只有一个Class对象
           //一个类被加载后,类的整个结构都会被封装在Class对中;
           System.out.println(c2.hashCode());//21685669
           System.out.println(c3.hashCode());//21685669
           System.out.println(c4.hashCode());//21685669


      }

    }


    //实体类pojo :实体类一般是和数据库去映射
    class User{

       private String name;
       private int age;
       private int id;

       public User(String name, int age, int id) {
           this.name = name;
           this.age = age;
           this.id = id;
      }

       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 int getId() {
           return id;
      }

       public void setId(int id) {
           this.id = id;
      }

       //方便程序调试
       @Override
       public String toString() {
           return "User{" +
                   "name='" + name + '\'' +
                   ", age=" + age +
                   ", id=" + id +
                   '}';
      }

    }

     

  • Class类:

    • 在Object类中定义了以下的方法,此方法将被所有子类继承;

      public final Class getClass();
      //1,该方法的返回值的类型是一个Class类,
      //2,此类是Java反射的源头,实际上所谓反射从程序的运行结果来看也很好理解;
      //3,可以通过对象反射求出类的名称

 

 

 

posted @   gzs1024  阅读(218)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示