Java教程

java--反射--Class类分析

本文主要是介绍java--反射--Class类分析,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
  1. 基本介绍:
    1. package com.model.Class;
      
      import com.model.reflection.Cat;
      
      /**
      *@Description:测试类
      *@Author: 张紫韩
      *@Crete 2021/6/28 16:56
       *
       * 介绍Class类的特点
      */public class classDemo01 {
      
          /**
           * 创建某个类的实例对象是都会创建这个类的 Class类对象,
           * 且只创建一个Class类对象,如果使用 new 创建了就不会在反射阶段创建了
           *
           *
           * */
          public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException {
      
              //传统的方法创建实例对象过程中,会创建一个 class类对象
              Cat cat = new Cat();
              /*
              通过Class类 的loadClass方法创建了Cat类的Class类对象
                  public Class<?> loadClass(String name) throws ClassNotFoundException {
                  return loadClass(name, false);
                   }
              * */
      
      
              Class<?> aClass = Class.forName("com.model.reflection.Cat");  //得到Class类对象,存放于堆中
              Object o = aClass.newInstance();  //得到实例对象
              //反射机制创建类的实例对象过程中,也同样是使用了Class类的loadClass方法加载Cat类的Class类对象
             /*
              通过Class类 的loadClass方法创建了Cat类的Class类对象
                  public Class<?> loadClass(String name) throws ClassNotFoundException {
                  return loadClass(name, false);
                   }
              * */
      
          }
      }
  2.  

     

    Class应用实例:

    1.  

       

      package com.model.Class;
      
      import java.lang.reflect.Field;
      
      /**
       * @Description:测试类
       * @Author: 张紫韩
       * @Crete 2021/6/28 17:40
       *
       * 演示Class类的常用方法
       */
      public class ClassDemo02 {
          public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException, NoSuchFieldException {
      
              String classFullPath="com.model.Class.Car";
      //        1.获取Car的类对象
              Class<?> aClass = Class.forName(classFullPath);
      //       2.输出类对象
              System.out.println(aClass); //显示aClass对象,是哪个类的的Class对象:com.model.Class.Car
              System.out.println(aClass.getClass()); //显示aClass的运行类型 java.lang.Class
      //        3.得到包名
              System.out.println(aClass.getPackage().getName());
      //        4.全类名
              System.out.println(aClass.getName());
      //        5.实例对象
              Object o = aClass.newInstance();
              Car car= (Car) o;
              System.out.println(car);
      
      //        6.得到属性
              Field brand = aClass.getField("brand");
              brand.set(car, "奔驰");
              System.out.println(brand.get(o));
      //          7.拿到所有的字段属性
              Field[] fields = aClass.getFields();
              for (int i = 0; i < fields.length; i++) {
                  System.out.println(fields[i].get(o));
              }
              for (Field f:fields){
                  System.out.println(f.get(o));
              }
      
          }
      }

       

       

        

        

        

         

       

        
这篇关于java--反射--Class类分析的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!