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("动态代码块");
	}
}

  

时间: 2024-10-06 12:59:33

18.3.1获得Class对象的相关文章

并发编程 18—— 显式的Conditon 对象

并发编程 01—— ConcurrentHashMap 并发编程 02—— 阻塞队列和生产者-消费者模式 并发编程 03—— 闭锁CountDownLatch 与 栅栏CyclicBarrier 并发编程 04—— Callable和Future 并发编程 05—— CompletionService : Executor 和 BlockingQueue 并发编程 06—— 任务取消 并发编程 07—— 任务取消 之 中断 并发编程 08—— 任务取消 之 停止基于线程的服务 并发编程 09——

18.03.14 类和对象作业2

A:Apple 描述 程序填空,使其输出4 5 1 #include <iostream> using namespace std; class Apple { // 在此处补充你的代码 static void PrintTotal() { cout << nTotalNumber << endl; } }; int Apple::nTotalNumber = 0; Apple Fun(const Apple & a) { a.PrintTotal(); ret

4、Math对象

1.编辑html页面 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <meta http-e

iOSDay10OC类和对象

本次是OC的第一节课,主要是学习和理解类与对象 1.面向对象 1> OOP(Object Oriented Programming)面向对象编程. 面向对象以事物为中心,完成某件事情都需要哪些事物来参与,参与该事件的事物都有哪些功能,完成该事件需要这些事物相互协作共同完成,并且完成该事件只是所有事物功能中其中的?个?功能. 2> 面向对象与面向过程的区别 3> 面向对象优点 面向对象具有良好的可扩展性和重用性. 面向对象可以降低我们代码的耦合度,提高代码的可移植性. 面向对象接近于日常生

JavaSE_ 集合框架 总目录(15~18)

黑马程序员_JavaSE学习总结第15天_集合框架1 15.01 对象数组的概述和使用15.02 对象数组的内存图解15.03 集合的由来及与数组的区别15.04 集合的继承体系图解15.05 Collection集合的功能概述15.06 Collection集合的基本功能测试15.07 Collection集合的高级功能测试15.08 集合的遍历之集合转数组遍历15.09 Collection存储自定义对象并遍历案例(使用数组)15.10 集合的遍历之迭代器遍历15.11 Collection

将DataTable数据转化为Model对象列表

最近做项目实现了自动将DataTable对象中的数据转化为制定Model类型对象列表的功能,这里做记录: 首先是定义转化类 : 1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Linq; 6 using System.Reflection; 7 using System.Text; 8 using Syste

API解读第二篇——执行SQL的核心对象(JDBC)

结构图 核心对象 Statement Statement主要用来执行SQL语句.它执行SQL语句的步骤为: 第一步:创建statement对象. 第二步:配置statement对象,此步骤可以忽略. 第三步:调用statement的executeXXX方法执行SQL语句. 第四步:处理结果集.示例中只是打印结果集. 第五步:关闭statement对象. Statement执行SQL语句的方法有四种类型. execute执行返回结果包含一个或者多个结果集,或结果包含一个或多个更新记录数量的SQL语

使对象具有ES6中Iterator接口的实现方法

es6中只有具有iterator接口的数组或者类数组(arguments)都可以使用for of来循环,但是对于对象来说不行,可以利用迭代器中的原理来给对象生成一个迭代器,实现让对象可以使用for of 1 var j={ 2 name:'小红', 3 age:18 4 } 5 //给j对象添加一个iterator接口 6 j[Symbol.iterator]=function(){ 7 //使用object.keys()方法把j对象中的k值读取出来存在数组当中 8 var arr=Object

Java笔记(18):集合框架(04)

1.Map集合概述特点及测试 1 package cn.itcast_01; 2 3 import java.util.HashMap; 4 import java.util.Map; 5 6 /* 7 * 作为学生来说,是根据学号来区分不同的学生的,那么假设我现在已经知道了学生的学号,我要根据学号去获取学生姓名,请问怎么做呢? 8 * 如果采用前面讲解过的集合,我们只能把学号和学生姓名作为一个对象的成员,然后存储整个对象,将来遍历的时候,判断,获取对应的名称. 9 * 但是呢,如果我都能把学生