第16章 反射 类别载入与检视 使用反射生成与操作对象
第16章 • 反射 – 类别载入与检视 – 使用反射生成与操作对象
简介Cass与类别载人 真正需要使用一个类别时才会加以加载 java. lang Class对象代表了Java应用程序在 运行时所加载的类别或接口实例 可以透过○ eject的 getclass(0方法来取得每 个对象对应的Cass对象,或者是透过 class"常量( Classliteral
简介Class与类别载入 • 真正需要使用一个类别时才会加以加载 • java.lang.Class对象代表了Java应用程序在 运行时所加载的类别或接口实例 • 可以透过Object的getClass()方法来取得每 一个对象对应的Class对象,或者是透过 "class"常量(Classliteral)
简介C|ass与类别载人 string name caterpillar i Class stringclass =name getClass() System.out. print1n("类别名称:"+ stringClass. getName()) System.out. print1n("是否为接口:"+ stringclass. isInterface ())i System.out. println("是否为基本型态:"+ stringclass imPrimitive())i System.out. print1n("是否为数组对象:"+ stringclass. isArray() System.out. print1n("父类别名称:"+ stringclass. getSuperclass().getName())i Class stringclass String class
简介Class与类别载入 String name = "caterpillar"; Class stringClass = name.getClass(); System.out.println("类别名称:" + stringClass.getName()); System.out.println("是否为接口:" + stringClass.isInterface()); System.out.println("是否为基本型态:" + stringClass.isPrimitive()); System.out.println("是否为数组对象:" + stringClass.isArray()); System.out.println("父类别名称:" + stringClass.getSuperclass().getName()); Class stringClass = String.class;
简介 Class与类别载入 所谓「真正需要」通常指的是要使用指定 的类别生成对象 例如使用 Class. forNameo加载类别’或是 使用 Classloader的 Jloadclass0载人类别 public class TestClass i tatic i System.out. println("类别被载人") TestClass test null System.out. print1n("宣告 Tes tc1ass参考名称") test new Testclass( System.out. print1n("生成 Tes tc1ass实例");
简介Class与类别载入 • 所谓「真正需要」通常指的是要使用指定 的类别生成对象 • 例如使用Class.forName()加载类别,或是 使用ClassLoader的loadClass()载入类别 public class TestClass { static { System.out.println("类别被载入"); } } TestClass test = null; System.out.println("宣告TestClass参考名称"); test = new TestClass(); System.out.println("生成TestClass实例");
简介C|ass与类别载人 Class的讯息是在编译时期就被加入 至.c!ass档案中 ·执行时期JVM在使用某类别时,会先检查 对应的Cass对象是否已经加载 如果没有加载,则会寻找对应的c!ass档案 并载人
简介Class与类别载入 • Class的讯息是在编译时期就被加入 至.class档案中 • 执行时期JVM在使用某类别时,会先检查 对应的Class对象是否已经加载 • 如果没有加载,则会寻找对应的.class档案 并载入