zoukankan      html  css  js  c++  java
  • 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("动态代码块");
    	}
    }
    

      

  • 相关阅读:
    hdu 4710 Balls Rearrangement()
    hdu 4707 Pet(DFS水过)
    hdu 4706 Children's Day(模拟)
    hdu 4712 Hamming Distance(随机函数暴力)
    csu 1305 Substring (后缀数组)
    csu 1306 Manor(优先队列)
    csu 1312 榜单(模拟题)
    csu 1303 Decimal (数论题)
    网络爬虫
    Python处理微信利器——itchat
  • 原文地址:https://www.cnblogs.com/1020182600HENG/p/7357119.html
Copyright © 2011-2022 走看看