一 生成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

Java Class类常用方法描述的更多相关文章

  1. JAVA String类常用方法

    一.String类String类在java.lang包中,java使用String类创建一个字符串变量,字符串变量属于对象.java把String类声明的final类,不能有类.String类对象创建 ...

  2. java File类常用方法

    file类常用方法 delete()删除此抽象路径名表示的文件和目录. equals()测试此抽象路径名与给定对象是否相等. exists()测试此抽象路径名表示的文件或目录是否存在. getName ...

  3. 下面有关 JAVA 异常类的描述,说法正确的有()

    都是Throwable的子类: 1.Exception(异常) :是程序本身可以处理的异常. 2.Error(错误): 是程序无法处理的错误.这些错误表示故障发生于虚拟机自身.或者发生在虚拟机试图执行 ...

  4. Java Map类常用方法

    关于Map集合中常用的方法: void clear(); 清空Map boolean containsKey(Object key); 判断Map中是否包含这样的key boolean contain ...

  5. AJPFX关于Java Object类常用方法小总结

    java.lang.Object   java.lang包在使用的时候无需显示导入,编译时由编译器自动导入. Object类是类层次结构的根,Java中所有的类从根本上都继承自这个类. Object类 ...

  6. Java File类常用方法及实例

    创建:createNewFile()在指定位置创建一个空文件,成功就返回true,如果已存在就不创建,然后返回false. createTempFile(String prefix, String s ...

  7. Java Object 类常用方法总结

    总结 public final native Class<?> getClass() //返回此 Object 运行时的类 public native int hashCode() //返 ...

  8. java Math类常用方法

    package com.niuke.test; public class MathDemo { public static void main(String args[]){ /** * abs求绝对 ...

  9. 【Demo 0004】Java基础-类封装性

    本章学习要点:       1.  Java封装特性;       2.  掌握类的定义:       3.  掌握类的调用方法; 一.封装特性        Java 纯面向对象语言,面向对象语言遵 ...

随机推荐

  1. SpringBoot整合elasticsearch(三)

    Docker安装elasticsearch 启动注意2点,1是内存,2是线程数(此处进行简单安装,后面会详细补充es文档) [root@topcheer ~]# docker images REPOS ...

  2. 一篇文章让你彻底理解java中抽象类和接口

    目录 1.我所理解的抽象类 2.我所理解的接口 3.抽象类和接口本质区别 相信大家都有这种感觉:抽象类与接口这两者有太多相似的地方,又有太多不同的地方.往往这二者可以让初学者摸不着头脑,无论是在实际编 ...

  3. 明解C语言 入门篇 第三章答案

    练习3-1 #include <stdio.h> int main() { int x; int y; puts("请输入两个整数."); printf("整 ...

  4. xml 需要转义的字符

    XML实体中不允许出现"&","<",">"等特殊字符,否则XML语法检查时将出错,如果编写的XML文件必须包含这些字符 ...

  5. AD中如何插入logo(图片)

    图片转成protel altium AD PCB封装 LOGO方法 1. 2. 3. 4.打开下列顺序文件夹 Examples-->Scripts-->Delphiscript Scrip ...

  6. [考试反思]0922csp-s模拟测试50:谜朦

    这辈子第5个rank1,是在长期状态低迷再度偶遇傻逼出题人然后总算在下午而不是晚上考了一场试 然后莫名其妙选对了头铁的题把其它暴力打满之后发现sdfz没有参加之后竞争减弱的综合结果. 说是在的其实这套 ...

  7. strGame:博弈论,trie

    挺有意思的一道题.初探博弈论. 最好自己思考? 我们先考虑只有1轮游戏的情况. 这题明显要在字符串上一位一位地走,所以对字符串建立起trie. 最终建立起的trie的叶节点就是必败位置了. 对于非叶节 ...

  8. NOIP模拟34

    考试的时候被T2卡了一年....考虑了一下正解的式子,然后没去给左边分解因数,去给后面乘倍数...理论复杂度O(n^2),实际好像卡不掉的样子.但是由于我智障的打了一棵主席树,他M了.... 预计得分 ...

  9. 基于canvas的流程编辑器

    今年由于项目上需要给客户的流程管理系统进行升级,其中包含流程的可视化.于是在网上找一些可以用的轮子,考察了D3,js.GooFlow.js.G6-Editor等工具后,发现D3,js学习成本太高,G6 ...

  10. 易初大数据 2019年11月14日 spss笔记 王庆超

    “均匀分布”的随机数 需要打开本章的数据文件“sim.sav.”. 1.设置随机数种子 1选择[转换]--[随机数字生成器],勾选‘设置起点’,并在‘固定值’ 的下‘值’中输入一个用户给定的数值.该数 ...