java反射机制
1.对于类类型的理解
1.1在面向对象的世界里,万物皆是对象,只有两种特例;
一种是普通的数据类型如int i=5;不能称为对象,但它们有封装类如Integer,Short等
另一种是由static修饰的东西,它们不属于对象而是属于某个类
1.2那么我们说的类(class)是不是对象呢?
答案是:我们没创建一个类它本身就是一个对象,它是java.lang.class类的一个对象
假设我们现在新建了一个Foo类,那么我们会有三种方法获取Foo类的类类型
package com.imooc.deom1; public class Foo { public static void main(String[] args) { Foo foo=new Foo(); //第一种 Class c1=foo.getClass(); //第二种 Class c2=Foo.class; //第三种 try { Class c3=Class.forName("com.imooc.deom1.Foo");
//打印结果是true,可以看出不管你用什么方法Foo类的类类型只有一个 System.out.println(c1==c3); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
2.动态加载类
在了解动态加载前,我们应该先了解编译和运行的概念
编译:是jvm(虚拟机)将xxx.java文件编译成xxx.class文件的过程
运行:是通过编译后实际使用这个点class文件的过程
想要验证使用记事本工具(Notepad++),先编译后运行
1、new 出来的都是静态加载类,一招出错,全盘皆输;
2、动态加载类
Class c = Class.forName(“类全名”);
OfficeAble oa = (OfficeAble)c.newInstance();//OfficeAble定义的功能类型接口就是让所有的类
实现我们的OfficeAble接口
浙公网安备 33010602011771号