• Java反射【二、Class类的使用】


    类本身也是对象,是java.lang.Class类的实例对象——There is a class named Class.

    Class类表示方式

    Class类只有Java虚拟机才能初始化,有三种表示方式(Demo是一个类)
    1、Class c1=Demo.class;
    2、Demo d = new Demo();
       Class c2 = d.getClass();
    3、Class c3 = Class.forName("PackageName+ClassName");//使用类的全名获取类的类对象,需要try catch
    

    使用类的类对象创建类对象(有点绕,就是用Class对象创建具体的类对象)

    Demo d1 = c1.newInstance();

    编译和运行

    使用eclipse时Run会一并进行编译和运行,感知不是很清晰
    用txt写java代码,命令行编译执行比较明确
    javac 用于编译.java 文件为 .class文件
    java 用于运行.class 文件

    静态加载类和动态加载类

    静态:使用new创建一个类即为静态加载(编译时刻加载)
    动态:使用class.newInstance()创建一个类即为动态加载(运行时刻加载)

    • 以下举例说明动态加载的优势:
      有一个Porject程序,其中需要使用到A类和B类,最初实现如下:

        public class StaticAndDynamicClass {
        public static void main(String[] args) {
        AClass a = new AClass();
        a.exe();
        
        BClass b = new BClass();
        b.exe();
        }
        }
      

    这样运行肯定会报错,因为AClass和BClass不存在

    如果AClass存在呢?

    public class AClass {
    public static void Exe(){
    	System.out.println("AClass execute...");
    }
    }
    

    此时报两个错,BClass找不到

    这就是静态加载类的特点,需要将用到的所有类全部加载之后才能编译
    如果利用newInstance动态的加载类,就可以不用关心类是否完全加载,只要在运行时判断即可

    public class StaticAndDynamicClass {
    
    public static void main(String[] args) {
    //		AClass a = new AClass();
    //		a.Exe();
    //		
    //		BClass b = new BClass();
    //		b.Exe();
    	//创建一个接口,符合该接口定义的类都可以被动态加载
    	Class c = null;
    	try {
    		 c = Class.forName(args[0]);
    		 ISADC a = (ISADC) c.newInstance();
    		 a.Exe();
    	} catch (ClassNotFoundException e) {
    		// TODO Auto-generated catch block
    		e.printStackTrace();
    	} catch (InstantiationException e) {
    		// TODO Auto-generated catch block
    		e.printStackTrace();
    	} catch (IllegalAccessException e) {
    		// TODO Auto-generated catch block
    		e.printStackTrace();
    	}
    }
    }
    

    ISADC是一个统一定义接口,凡是符合该接口的类名称都可以通过传参动态的加载进来

  • 相关阅读:
    svn 提交时强制注释、不允许指定的文件类型的钩子写法
    开源跨平台网络库(lxnet)
    关于android studio的配置记录
    一般处理程序(ashx)对session处理摘要
    利用反射代替switch -转
    c#+jquery.autocomplete.js
    C#+ajaxupload实现图片上传
    几种常见SQL分页方式效率比较-转
    js页面跳转
    C#编码规范-转
  • 原文地址:https://www.cnblogs.com/shanelau/p/6577823.html
Copyright © 2020-2023  润新知