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
Java Class类常用方法描述的更多相关文章
- JAVA String类常用方法
一.String类String类在java.lang包中,java使用String类创建一个字符串变量,字符串变量属于对象.java把String类声明的final类,不能有类.String类对象创建 ...
- java File类常用方法
file类常用方法 delete()删除此抽象路径名表示的文件和目录. equals()测试此抽象路径名与给定对象是否相等. exists()测试此抽象路径名表示的文件或目录是否存在. getName ...
- 下面有关 JAVA 异常类的描述,说法正确的有()
都是Throwable的子类: 1.Exception(异常) :是程序本身可以处理的异常. 2.Error(错误): 是程序无法处理的错误.这些错误表示故障发生于虚拟机自身.或者发生在虚拟机试图执行 ...
- Java Map类常用方法
关于Map集合中常用的方法: void clear(); 清空Map boolean containsKey(Object key); 判断Map中是否包含这样的key boolean contain ...
- AJPFX关于Java Object类常用方法小总结
java.lang.Object java.lang包在使用的时候无需显示导入,编译时由编译器自动导入. Object类是类层次结构的根,Java中所有的类从根本上都继承自这个类. Object类 ...
- Java File类常用方法及实例
创建:createNewFile()在指定位置创建一个空文件,成功就返回true,如果已存在就不创建,然后返回false. createTempFile(String prefix, String s ...
- Java Object 类常用方法总结
总结 public final native Class<?> getClass() //返回此 Object 运行时的类 public native int hashCode() //返 ...
- java Math类常用方法
package com.niuke.test; public class MathDemo { public static void main(String args[]){ /** * abs求绝对 ...
- 【Demo 0004】Java基础-类封装性
本章学习要点: 1. Java封装特性; 2. 掌握类的定义: 3. 掌握类的调用方法; 一.封装特性 Java 纯面向对象语言,面向对象语言遵 ...
随机推荐
- nginx高可用集群
1.配置: (1)需要两台nginx服务器 (2)需要keepalived (3)需要虚拟ip 2.配置高可用的准备工作 (1)需要两台服务器192.168.180.113和192.168.180.1 ...
- user_login
username=input("username:")password=input("password:")name,passwd='ducai','123'i ...
- 前端技术之:JSON.stringfy详细说明
JSON.stringify() 语法JSON.stringify(value[, replacer[, space]]) value 被序列化为字符串的对象 replacer 根据类型不同,其行为也 ...
- vue学习之插槽
插槽 插槽(Slot)是Vue提出来的一个概念,正如名字一样,插槽用于决定将所携带的内容,插入到指定的某个位置,从而使模板分块,具有模块化的特质和更大的重用性. 个人理解:我感觉插槽就是父组件控制插槽 ...
- 单点登录 - OAuth 2.0 授权码模式(一)
OAuth 2.0定义了四种授权方式 授权码模式(authorization code) 简化模式(implicit) 密码模式(resource owner password credentials ...
- 05 MySQL之查询、插入、更新与删除
01-查询数据 语法格式: select * | 字段列表 from 表1, 表2 where 表达式 group by ... having ... order by ... limit .. # ...
- .Net Core Vue Qucik Start
.Net Core Vue Qucik Start This is a ASP.NET Core 3.0 project seamlessly integrationed with Vue.js te ...
- 第一行python代码
Hello Python 其实和大家一样为了以后多一条生存之路,本人也比较感兴趣python,因为它相比较JAVA来说,实现功能真的太方便了. 万事开头难,python不例外,本人在校过程学习了jav ...
- git 生成密匙时遇到报错 :Too many arguments.
今天在我用新电脑想要向github上的远程库上传项目时,由于新电脑上的本地库没有与远程库建立连接,所以要在本地生成密匙添加到github上才可以上传,在我执行命令 ssh-keygen -t rsa- ...
- 通俗地说逻辑回归【Logistic regression】算法(二)sklearn逻辑回归实战
前情提要: 通俗地说逻辑回归[Logistic regression]算法(一) 逻辑回归模型原理介绍 上一篇主要介绍了逻辑回归中,相对理论化的知识,这次主要是对上篇做一点点补充,以及介绍sklear ...