zoukankan      html  css  js  c++  java
  • Cedar老师的java中的反射学习笔记(二)--动态加载

    静态加载:

         编译时刻加载类

         (1)new创建对象是静态加载类,在编译时加载类

    动态加载:

        运行时刻加载类

         (2)Class c=Class.forName() 动态加载类

                               c.newInstance();

    代码:

    (1)创建一个office类:

    class Office 
    {
    	public static void main(String[] args) 
    	{
    		Word w=new Word();
    		w.start();
    
            Excel e=new Excel();
    		e.start();
    	}
    }
    

      

       编译后报错:

    C:UsersSheroHuoDesktop	est>javac office.java
    office.java:5: error: cannot find symbol
            Word w=new Word();
            ^
      symbol:   class Word
      location: class Office
    office.java:5: error: cannot find symbol
            Word w=new Word();
                       ^
      symbol:   class Word
      location: class Office
    office.java:8: error: cannot find symbol
            Excel e=new Excel();
            ^
      symbol:   class Excel
      location: class Office
    office.java:8: error: cannot find symbol
            Excel e=new Excel();
                        ^
      symbol:   class Excel
      location: class Office
    4 errors

           new创建对象是静态加载类,在编译时加载类,因为没有word和excel类。

    (2)创建word类:

    class Word 
    {
    	public void start(){
    	System.out.println("word....start");
    	}
    }
    

       编译word 在编译office

    编译结果:

    C:UsersSheroHuoDesktop	est>javac Word.java
    
    C:UsersSheroHuoDesktop	est>javac Office.java
    Office.java:8: error: cannot find symbol
            Excel e=new Excel();
            ^
      symbol:   class Excel
      location: class Office
    Office.java:8: error: cannot find symbol
            Excel e=new Excel();
                        ^
      symbol:   class Excel
      location: class Office
    2 errors
    

      有时候word或excel可能不会用到,希望采用动态加载:

    创建一个新的OfficeNew类,通过类类型创建对象。

    class OfficeNew 
    {
    	public static void main(String[] args) 
    	{    
    		try{
    		Class c=Class.forName(args[0]);
    		OfficeAll oa=(OfficeAll)c.newInstance();  //通过类类型创建对象
    		oa.start();
    		}catch(Exception e){
    			e.printStackTrace();
    		}
    	}
    }
    

      创建一个标准-接口:OfficeAll,使word excel实现这个接口:

    interface OfficeAll
    {
    	public void start();
    }
    

      

    class Word implements OfficeAll
    {
    	public void start(){
    	System.out.println("word....start");
    	}
    }
    

      分别编译word,OfficeNew,再运行word方法:

    C:UsersSheroHuoDesktop	est>javac Word.java
    C:UsersSheroHuoDesktop est>javac OfficeNew.java C:UsersSheroHuoDesktop est>java OfficeNew Word word....start

      

  • 相关阅读:
    java并发编程
    Linux C++服务器端进程SDK
    定时器SDK
    Redis3.0集群方案分析
    DES
    生成验证码
    MVC Ajax.BeginForm 提交上传图片
    EF LIKE 查询
    JS 60秒后重发送验证码
    EF 指定字段修改
  • 原文地址:https://www.cnblogs.com/fatfatdachao/p/4050754.html
Copyright © 2011-2022 走看看