18.3.1获得Class对象
package d18_3_1; /**
* Java中的java.lang.Class,简单理解就是为每个java对象的类型标识的类,
* 虚拟机使用运行时类型信息选择正确的执行方法,用来保存这些运行时类型信息的就是Class类。
* 虚拟机为每种类型管理一个独一无二的对象,即Class对象,
* 当类被加载时,对应的Class类型对象会通过调用类加载器中的 defineClass方法自动构造自动创建。
* 注意Class对象是单实例的,在运行时,如果该Class对象没有创建,虚拟机会自动创建,如果已经存在,就不会创建了。
*
* 形如className.class,我们称之为类字面常量。
* Class c = java.awt.Button.class;
* Class c = Integer.TYPE;
* 注意:TYPE用于基本数据类型的包装器类。TYPE字段是一个引用,指向对应的基本数据类型的Class对象。所以:
* boolean.class 等价于 Boolean.TYPE
* char.class 等价于 Char.TYPE
*
* 总结:三种方式均能够获得Class对象,区别是
* 方法一不执行静态块和动态构造块,
* 方法二执行静态块、不执行动态构造块,
* 方法三需要创建对象,静态块和动态构造块均会执行;
*
* 注意:静态块仅在类加载时执行一次,若类已加载便不再重复执行;而动态构造块在每次new对象时均会执行
*/
public class Client { public static void main(String[] args) throws ClassNotFoundException {
// TODO Auto-generated method stub
Class t1 = Test.class;
System.out
.println("通过类名.class方式获得Class对象,Class<?> cType = ClassName.class"); //
Class t2 = Class.forName("d18_3_1.Test");
System.out
.println("通过Class.forName()方法获得,Class<?> cType = Class.forName('类全名');"); //
Test t = new Test();
Class t3 = t.getClass();
System.out
.println("通过对象名.getClass()方法获取,Class<?> cType3 = objName.getClass();");
}
} class Test {
static {
System.out.println("静态代码块");
}
{
System.out.println("动态代码块");
}
}
18.3.1获得Class对象的更多相关文章
- Python_day8_面向对象(多态、成员修饰符、类中特殊方法、对象边缘知识)、异常处理之篇
一.面向对象之多态 1.多态:简而言子就是多种形态或多种类型 python中不支持多态也用不到多态,多态的概念是应用与java/C#中指定传参的数据类型, java多态传参:必须是传参数的数据类型或传 ...
- java对象数组的概述和使用
1 public class Student 2 { 3 // 成员变量 4 private String name; 5 private int age; 6 7 // 构造方法 8 public ...
- ObjectiveC1基础代码——类和对象
// // main.m // ObjectiveC1 // // Created by scjy on 15/10/30. // Copyright © 2015年 lizhipeng. A ...
- JavaSE_ 集合框架 总目录(15~18)
JavaSE学习总结第15天_集合框架1 15.01 对象数组的概述和使用15.02 对象数组的内存图解15.03 集合的由来及与数组的区别15.04 集合的继承体系图解15.05 Collectio ...
- JavaSE学习总结第18天_集合框架4
18.01 Map集合概述和特点 Map接口概述:将键映射到值的对象,一个映射不能包含重复的键,每个键最多只能映射到一个值 Map接口和Collection接口的不同 1.Map是双列的,Coll ...
- 关于Class对象、类加载机制、虚拟机运行时的内存布局的全面解析和推测
简介: 本文是对Java的类加载机制,Class对象,反射原理等相关概念的理解.验证和Java虚拟机中内存布局的一些推测.本文重点讲述了如何理解Class对象以及Class对象的作用. 欢迎探讨,如有 ...
- JavaScript函数与对象
函数 函数的定义 JavaScript中的函数和Python中的非常类似,只是定义方式有点区别. // 普通函数定义 function f1() { console.log("Hello w ...
- javascript基础之对象
老师的博客:https://www.cnblogs.com/liwenzhou/p/8004649.html#autoid-1-8-6 JavaScript中的所有事物都是对象:字符串.数字.数组.日 ...
- JavaScript—Date对象详情
Date对象概述 javaScript 提供了 Date 类型来处理时间和日期.Date 对象内置一系列获取和设置日期时间信息的方法.(不是内置对象,需要自己new) javaScript 中的 Da ...
随机推荐
- DCOS之Mesos-DNS介绍
DCOS的Mesos-DNS它主要提供域名解析服务,Mesos-DNS 在DCOS框架中支持服务发现,同意应用程序和服务通过域名系统(DNS)来相互定位.DCOS中的 Mesos-DNS充当的角色和在 ...
- Hibernate commit() 和flush() 的区别
<<精通Hibernate java对象持久化技术详解>> ,flush()方法进行清理缓存的操作,执行一系列的SQL语句,但不会提交事务;commit()方法会先调用flus ...
- BZOJ2163: 复杂的大门
BZOJ2163: 复杂的大门 Description 你去找某bm玩,到了门口才发现要打开他家的大门不是一件容易的事……他家的大门外有n个站台,用1到n的正整数编号.你需要对每个站台访问一定次数以后 ...
- 【独立开发人员er Cocos2d-x实战 007】使用Cocos2dx UserDefault.xml
这篇博客是因为下述问题产生的 -(代码1): std::string str = FileUtils::getInstance()->getWritablePath(); CCLOG(str.c ...
- Mysql的Merge存储引擎实现分表查询
对于数据量很大的一张表,i/o效率底下,分表势在必行! 使用程序分,对不同的查询,分配到不同的子表中,是个解决方案,但要改代码,对查询不透明. 好在mysql 有两个解决方案: Partition(分 ...
- Linux监控命令
dd命令用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换.注意:指定数字的地方若以下列字符结尾,则乘以相应的数字:b=512:c=1:k=1024:w=2它不是一个专业的测试工具,不过如果对于 ...
- Java类加载器(ClassLoader)
类加载的机制的层次结构 每个编写的”.java”拓展名类文件都存储着需要执行的程序逻辑,这些”.java”文件经过Java编译器编译成拓展名为”.class”的文件,”.class”文件中保存着Jav ...
- poj 1258 Agri-Net 解题报告
题目链接:http://poj.org/problem?id=1258 题目意思:给出 n 个 farm,每个farm 之间通过一定数量的fiber 相连,问使得所有farm 直接或间接连通的 最少 ...
- Android Studio自动生成带系统签名的apk
介绍签名的两种方式: 1.signapk.jar命令行方式: 如果你需要开发一个带有系统权限的app,往往需要配置SharedUserId,比如: </pre><pre name=& ...
- this调用属性
示例: class Person{ private String name; private int age; public Person(String name,int age){ this.nam ...