zoukankan      html  css  js  c++  java
  • Java Class类常用方法描述

    一 生成Class对象的三种方式

      1 Class.forName("全路径名")

      2  类名.Class

      3 实例对象.getClass()

       接着看三种方式生成Class对象的区别

    package com.shangcg.reflect;
    
    
    /**
     * 
     * <p>
     *  三种方式生成Class对象的区别测试
     *  说明:测试一、二、三可屏蔽代码分开进行看输出结果
     * </p>
     */
    public class ClassDemo {
    
      public static void main(String[] args)
    
      {
    
        try {
    
        
    
          /*  
           *  测试一   测试类名.class  
           *  输出为:
           *  testTypeClass---class com.shangcg.reflect.AnyOneObject 没有执行构造函数没有执行静态块
           */
    
          Class<?> testTypeClass = AnyOneObject.class;
    
          System.out.println("testTypeClass---" + testTypeClass);
          
          /*测试二   测试Class.forName()   
           * 输出为:
           ---静态的参数初始化--- 说明执行静态块
           testForName---class com.shangcg.reflect.AnyOneObject 
           */
    
           Class<?> anyOneTypeForName = Class.forName("com.shangcg.reflect.AnyOneObject");
     
           System.out.println("testForName---" + anyOneTypeForName);
    
           /* 测试三   测试Object.getClass()
            * 输出:
            * ---静态的参数初始化---  执行静态块
              ----非静态的参数初始化--- 执行非静态块初始化
              ----构造函数--- 执行构造函数
              testGetClass---class com.shangcg.reflect.AnyOneObject
            */
          AnyOneObject testGetClass = new AnyOneObject();
    
          System.out.println("testGetClass---" + testGetClass.getClass());
    
        } catch (Exception e) {
    
    
          e.printStackTrace();
    
        }
    
      }
    
    }
    
    class AnyOneObject {
    
      //构造函数  
    
      public AnyOneObject() {
    
        System.out.println("----构造函数---");
    
      }
    
      //静态的参数初始化  
    
      static {
    
        System.out.println("---静态的参数初始化---");
    
      }
    
      //非静态的参数初始化  
    
      {
    
        System.out.println("----非静态的参数初始化---");
    
      }
    }

     

    结论:

    1 类名.class(也称类字面常量)  方式生成Class对象不会初始化的静态块,不会初始化参数,不会调用构造函数
    2 Class.forName()方式生成Class对象会初始化类静态块,但不会初始化非静态的代码块,也不调用构造函数
    3 Object.getClass()方式生成Class对象会先初始化静态块,接着执行非静态块的初始化,最后调用构造函数

    二 java反射(介绍Class类中方法之前,先介绍一下反射)

      1 Java反射机制主要功能:

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

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

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

        4.在运行时调用任意一个对象的方法。

          2 对反射提供支持的类(反射功能主要由Class对象和java.lang.relflect包中的类提供支持)

        Class类:代表一个类,位于java.lang包下。

         Field类:代表类的成员变量(成员变量也称为类的属性)。

         Method类:代表类的方法。

         Constructor类:代表类的构造方法。

         Array类:提供了动态创建数组,以及访问数组的元素的静态方法。

    三 Class常用方法解释

     Class就是普通的一个类,和我们平时写的类没有什么区别,它位于java.lang包下,和java.lang.reflect包下的类共同支持了java的整个反射功能

     常用方法列表

      1getName():返回String形式的该类的名称。
      2 newInstance():根据某个Class对象产生其对应类的实例,它调用的是此类的默认构造方法(没有默认无参构造器会报错)
      3 getClassLoader():返回该Class对象对应的类的类加载器。
      4 getSuperClass():返回某子类所对应的直接父类所对应的Class对象
      5 isArray():判定此Class对象所对应的是否是一个数组对象
      6 getComponentType() :如果当前类表示一个数组,则返回表示该数组组件的 Class 对象,否则返回 null。
      7 getConstructor(Class[]) :返回当前 Class 对象表示的类的指定的公有构造子对象。
      8 getConstructors() :返回当前 Class 对象表示的类的所有公有构造子对象数组。
      9 getDeclaredConstructor(Class[]) :返回当前 Class 对象表示的类的指定已说明的一个构造子对象。
      10 getDeclaredConstructors() :返回当前 Class 对象表示的类的所有已说明的构造子对象数组。
      11 getDeclaredField(String) :返回当前 Class 对象表示的类或接口的指定已说明的一个域对象。
      12 getDeclaredFields() :返回当前 Class 对象表示的类或接口的所有已说明的域对象数组。
      13 getDeclaredMethod(String, Class[]) :返回当前 Class 对象表示的类或接口的指定已说明的一个方法对象。
      14 getDeclaredMethods() :返回 Class 对象表示的类或接口的所有已说明的方法数组。
      15 getField(String) :返回当前 Class 对象表示的类或接口的指定的公有成员域对象。
      16 getFields() :返回当前 Class 对象表示的类或接口的所有可访问的公有域对象数组。
      17 getInterfaces() :返回当前对象表示的类或接口实现的接口。
      18 getMethod(String, Class[]) :返回当前 Class 对象表示的类或接口的指定的公有成员方法对象。
      19 getMethods() :返回当前 Class 对象表示的类或接口的所有公有成员方法对象数组,包括已声明的和从父类继承的方法。
      20 isInstance(Object) :此方法是 Java 语言 instanceof 操作的动态等价方法。
      21 isInterface() :判定指定的 Class 对象是否表示一个接口类型
      22 isPrimitive() :判定指定的 Class 对象是否表示一个 Java 的基类型。
      23 newInstance() :创建类的新实例

     

     

    参考文章http://www.cnblogs.com/mengdd/archive/2013/01/26/2877972.html

        http://blog.csdn.net/ghuilee/article/details/45821537
     

     

  • 相关阅读:
    数据结构前言
    Linux---远程连接、命令行基础、文件及目录管理
    HTTP协议
    Docker---dockerfile
    Docker---指令
    Docker---介绍
    进程模块的使用
    numpy---(精简)
    OpenJudge/Poj 2105 IP Address
    OpenJudge 2786 Pell数列
  • 原文地址:https://www.cnblogs.com/cs-forget/p/7732413.html
Copyright © 2011-2022 走看看