Java反射之静态加载和动态加载举例小记

静态加载:

package com.imooc.加载类;

public class Office_Static {
	public static void main(String[] args) {
		//new 创建对象,是静态加载类,在编译时刻就需要加载所有的可能使用到的类
		if("Word".equals(args[0])){
			Word w = new Word();
			w.start();
		}
		if("Excel".equals(args[0])){
			Excel e = new Excel();
			e.start();
		}
	}
}

这个程序编译时必须有Word和Excel这两个类存在才行,即使判断后用不到Excel也要加载

动态加载:

1、接口OfficeAble :

package com.imooc.加载类;

public interface OfficeAble {
	public void start();
}

2、Word实现接口:

package com.imooc.加载类;

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

}

3、Excel实现接口:

package com.imooc.加载类;

public class Excel implements OfficeAble{

	public void start(){
		System.out.println("excel start");
	}
}

4、Main方法

package com.imooc.加载类;

public class OfficeBetter {
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		try {
			//动态加载类,在运行时刻加载
			Class c = Class.forName(args[0]);//在运行配置里面输入com.imooc.加载类.Excel
			//通过类类型,创建该类对象(先转换为Word和Excel的共同接口OfficeAble)
			OfficeAble oa = (OfficeAble)c.newInstance();
			oa.start();

			//不推荐下面两种,因为不确定是加载Word还是Excel,要强转
//			Word word = (Word)c.newInstance();
//			word.start();
//			Excel excel = (Excel)c.newInstance();
//			excel.start();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}
时间: 2024-11-07 10:08:25

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(); } } 编译后报错

Java中的静态代理、通用动态代理类以及原理剖析

代理模式和静态代理 在开发中,代理模式是常用的模式之一,一般来说我们使用的代理模式基本上都是静态代理,实现模式大致如下 : 我们以网络代理为例,简单演示一下静态代理的实现 : // 网络接口 interface Network { public void surfTheInternet(); public void gotoFacebook(); } // 普通网络 class CommonNetwork implements Network { @Override public void su

使用js加载器动态加载外部Javascript文件

今天在网上找到了一个可以动态加载js文件的js加载器,具体代码如下: JsLoader.js 1 var MiniSite=new Object(); 2 /** 3 * 判断浏览器 4 */ 5 MiniSite.Browser={ 6 ie:/msie/.test(window.navigator.userAgent.toLowerCase()), 7 moz:/gecko/.test(window.navigator.userAgent.toLowerCase()), 8 opera:/o

Android学习笔记之fragment的静态加载和动态加载

1.xml布局文件: main.xml 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 android:layout_width="match_parent" 3 android:layout_height="match_parent" > 4 5 <LinearLayout 6 android:id="@+i

Java的类类型和类的动态加载

有如下简化代码: 准备知识: Student judy = new Student; Class s1 = Student.class; Class s2 = judy.getClass(); Class s3 = null; s3 = Class.forName("com.Student"); 这里s1, s2, s3都是类类型 new创建对象是静态加载类,在编译时刻就需要加载所有的可能用到的类. 动态加载类的例子: 1 // OfficeAble.java2 interface O

[转载] 动态链接库dll的 静态加载 与 动态加载

转载自:http://blog.csdn.net/youxin2012/article/details/11538491 dll 两种链接方式  : 动态链接和静态链接(链接亦称加载) 动态链接是指在生成可执行文件时不将所有程序用到的函数链接到一个文件,因为有许多函数在操作系统带的dll文件中,当程序运行时直接从操作系统中找. 而静态链接就是把所有用到的函数全部链接到exe文件中. 动态链接是只建立一个引用的接口,而真正的代码和数据存放在另外的可执行模块中,在运行时再装入: 而静态链接是把所有的

include的静态加载和动态加载

动态加载是jsp解析时就生成两个Servlet文件,静态加载是在jsp解析时生成一个Servlet文件. 两个Servlet之间可以传值,所以动态加载的时候可以传值. 静态加载的时候不能传值.

关于apk加壳之动态加载dex文件

由于自己之前做了一个关于手机令牌的APK软件,在实现的过程中尽管使用了native so进行一定的逻辑算法保护,但是在自己逆向破解的过程中发现我的手机令牌关键数据能够“轻易地”暴露出来,所以我就想进一步的对其进行加固.于是,我使用的网上常用的梆梆加固.爱加密和阿里的聚安全应用来对我的apk进行一个加固保护.加固后,出于好奇心,我想对这些加固的原理进行一个了解,便于我自己能够实现这个加固的方法.于是开始了网上关于这方面的学习,我将这些加固的大致原理进行了一个总结,发现它们实现的最主要的方法就是利用

java 反射之静态and动态代理

首先说一下我们什么情况下使用代理? (1)设计模式中有一个设计原则是开闭原则,是说对修改关闭对扩展开放,我们在工作中有时会接手很多前人的代码,里面代码逻辑让人摸不着头脑(sometimes the code is really like shit),这时就很难去下手修改代码,那么这时我们就可以通过代理对类进行增强. (2)我们在使用RPC框架的时候,框架本身并不能提前知道各个业务方要调用哪些接口的哪些方法 .那么这个时候,就可用通过动态代理的方式来建立一个中间人给客户端使用,也方便框架进行搭建逻