实例化Class类的5种方式
Java的数据类型可以分为两类,即引用类型和原始类型。对于每种类型的对象,Java虚拟机会实例化不可变的java.lang. Class对象。它提供了在运行时检查对象属性的方法,这些属性包括它的成员和类型信息。更重要的是Class对象是所有反射API的入口。本实例演示如何获得Class对象。实例运行效果如图
技巧:Class类是泛型类,可以使用@SuppressWarnings (“unchecked”)忽略泛型或者使用Class<?>类型。
通常有5种方式可以获得Class对象,详细说明如下。
(1)Object.getClass():如果一个类的对象可用,则最简单的获得Class的方法是使用Object.getClass()。当然,这种方式只对引用类型有用。
(2).class语法:如果类型可用但没有对象,则可以在类型后加上“.class”来获得Class对象。这也是使原始类型获得Class对象的最简单的方式。
(3) Class.forName():如果知道类的全名,则可以使用静态方法Class.forName()来获得Class对象。它不能用在原始类型上,但是可以用在原始类型数组上。
U 注意:Class.forName()会抛出ClassNotFoundException异常。
(4) 包装类的TYPE域:每个原始类型和void都有包装类。利用其TYPE域就可以获得Class对象。
(5)以Class为返回值的方法:请参考反射API
编写类ClassTest,在该类的main()方法中,演示了各种获得Class对象的方法。代码如下:
package com.mingrisoft.reflection;
import java.util.Date;
public class ClassTest {
@SuppressWarnings("unchecked")
public static void main(String[] args) throws ClassNotFoundException {
System.out.println("第1种方法:Object.getClass()");
Class c1 = new Date().getClass();// 使用getClass()方式获得Class对象
System.out.println(c1.getName());// 输出对象名称
System.out.println("第2种方法:.class语法");
Class c2 = boolean.class;// 使用.class语法获得Class对象
System.out.println(c2.getName());// 输出对象名称
System.out.println("第3种方法:Class.forName()");
Class c3 = Class.forName("java.lang.String");// 使用Class.forName()获得Class对象
System.out.println(c3.getName());// 输出对象名称
System.out.println("第4种方法:包装类的TYPE域");
Class c4 = Double.TYPE;// 使用包装类获得Class对象
System.out.println(c4.getName());// 输出对象名称
}
}
心法领悟:掌握获得Class对象的方法。
除了java.lang.reflect.ReflectPermission和java.lang.reflect包外,所有类都没有公共的构造方法。为了获得这些类的对象,必须使用Class类中适当的方法。对于不同的数据类型,Class对象的获得方式是不同的,读者要注意掌握。
实例化Class类的5种方式的更多相关文章
- javascript创建类的6种方式
javascript创建类的7种方式 一 使用字面量创建 1.1 示例 var obj={}; 1.2 使用场景 比较适用于临时构建一个对象,且不关注该对象的类型,只用于临时封装一次数据,且不适合代码 ...
- Java中创建(实例化)对象的五种方式
Java中创建(实例化)对象的五种方式1.用new语句创建对象,这是最常见的创建对象的方法. 2.通过工厂方法返回对象,如:String str = String.valueOf(23); 3.运用反 ...
- Yii中实例化类的四种方式
1.最简单的也是最基本的,大家都会的一种 use yii\caching\FileCache; $cache = new FileCache(); $cache->set("name& ...
- Python 实现接口类的两种方式+邮件提醒+动态导入模块+反射(参考Django中间件源码)
实现接口类的两种方式 方式一 from abc import ABCMeta from abc import abstractmethod class BaseMessage(metaclass=AB ...
- python_106_创建类的两种方式
class Foo(object): def __init__(self, name): self.name = name f = Foo("alex") print(type(f ...
- 实例化Class类的5种方法
实例说明 java的数据类型分为两类:基础数据类型和引用数据类型.对于每种类型的对象,java虚拟机会实例化不可变的java.lang.Class对象.它提供了在运行时检查对象属性的方法,这些属性包括 ...
- Spring:Spring-IOC实例化bean的常用三种方式
Spring容器提供了三种对bean的实例化方式: 1)构造器实例化 public class Demo { private String name; //getter和setter方法略 } < ...
- 【Unity3D游戏开发】之全局管理类的几种方式 (十六)
如何在Unity中实现全局管理类?由于Unity脚本的运行机制和面向组件编程(COP)的思想,实现起来和普通的方式略有差别. 第一种方式是使用静态类.适合存储一些全局的变量,如游戏当前关卡.玩家得分等 ...
- xml转json和实体类的两种方式
本文为博主原创,未经允许不得转载: xml在http通信中具有较高的安全性和传输速度,所以应用比较广泛, 在项目中往往需要对xml,json和实体类进行相互转换,在这里总结一下自己所用到的一些方法: ...
随机推荐
- How to force immediate stop of threads in Jmeter servers如何在jmeter执行完,立即停止jmeter
https://stackoverflow.com/questions/38900315/how-to-force-immediate-stop-of-threads-in-jmeter-server ...
- 【CV论文阅读】Detecting events and key actors in multi-person videos
论文主要介绍一种多人协作的视频事件识别的方法,使用attention模型+RNN网络,最近粗浅地学习了RNN网络,它比较适合用于处理序列的存在上下文作用的数据. NCAA Basketball数据集 ...
- MariaDB基础操作
MariaDB: MariaDB是MySQL源代码的一个分支,随着Oracle买下Sun,MySQL也落入了关系型数据库王者之手.在意识到Oracle会对MySQL许可做什么后便分离了出来(MySQL ...
- 省市县三级联动js代码
省市县三级联动菜单,JS全国省市县(区)联动代码,一般可以用于用户注册或分类信息二手交易网站,需要的朋友直接复制代码就可以用了,不过有朋友反馈说缺少某些城市,具体缺少哪个尚不知,请想用的朋友自己补全吧 ...
- android 特殊符号开头的联系人归并至“#”下
在PeopleActivity界面.联系人的显示位置是由其display name的第一个字符决定的. 数字开头的联系人会显示在"#"这个header下. 中英文联系人会显示在&q ...
- POJ 1625 Censored! (AC自己主动机 + 高精度 + DP)
题目链接:Censored! 解析:AC自己主动机 + 高精度 + 简单DP. 字符有可能会超过128.用map映射一下就可以. 中间的数太大.得上高精度. 用矩阵高速幂会超时,简单的DP就能解决时间 ...
- js 判断手机横竖屏的实现方法(不依赖任何其他库)
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- CF 908 D New Year and Arbitrary Arrangement —— 期望DP
题目:http://codeforces.com/contest/908/problem/D 首先,设 f[i][j] 表示有 i 个 a,j 个 ab 组合的期望,A = pa / (pa + pb ...
- jquery中$()的使用
在jquery中最常使用的就是$这个符号了,在我没有系统的学习jquery之前,我用到的$都是用于对元素的选择,而这只是$的很简单的用法.在jquery$()函数一共有三种用法: $(selector ...
- 一句powershell调用mimikatz抓密码
mimikatz神器大家都知道吧,可以抓取系统内的明文密码,但是平时我们测试的时候需要把mimikatz的几个文件上传到目标系统上面,然后再手工执行几个命令才能搞定,今天无意访问一个大神的博客,发现其 ...