Heim  >  Artikel  >  Java  >  Ausführliche Erläuterung, wie Java das reflektierende statische Laden und das dynamische Laden von Beispielcode implementiert

Ausführliche Erläuterung, wie Java das reflektierende statische Laden und das dynamische Laden von Beispielcode implementiert

伊谢尔伦
伊谢尔伦Original
2017-07-17 16:06:511776Durchsuche

1. Der Unterschied zwischen dynamisch geladenen Java-Klassen und statisch geladenen Klassen

Die neue Art, Objekte zu erstellen, heißt statisches Laden und verwendet Class.forName („XXX“) wird als dynamisches Laden bezeichnet. Der wesentliche Unterschied besteht darin, dass das Quellprogramm einer statisch geladenen Klasse während der Kompilierung geladen wird (muss vorhanden sein), während das Quellprogramm einer dynamisch geladenen Klasse während der Kompilierung fehlen kann (die Quellprogramm muss nicht vorhanden sein).

2. Warum ist es notwendig, Klassen dynamisch zu laden?

Nach meinem eigenen Verständnis erhöht das dynamische Laden von Klassen die Flexibilität des Programms. Beispielsweise gibt es 50 Funktionen in einem Programm, aber Sie dürfen nur eine davon verwenden. Wenn Sie statisches Laden verwenden, müssen Sie vor der Kompilierung alle Definitionen von 100 Funktionen bereitstellen, da die Kompilierung sonst nicht erfolgreich ist Ein dynamischer Lademechanismus, sodass Sie nicht so viel Zeit aufwenden müssen. Definieren Sie einfach, welcher verwendet werden soll.

Statisches Laden:

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();
		}
	}
}

Beim Kompilieren dieses Programms müssen die beiden Klassen Word und Excel vorhanden sein, auch wenn Excel nach dem Laden nicht verwendet wird

Dynamisches Laden:

1. Schnittstelle OfficeAble:

public interface OfficeAble {
	public void start();
}

2. Word-Implementierungsschnittstelle:

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

3. Excel-Implementierungsschnittstelle:

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

4. Hauptmethode

public class OfficeBetter {
	public static void main(String[] args) {
		try {
			//动态加载类,在运行时刻加载
			Class c = Class.forName(args[0]);//在运行配置里面输入加载类.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();
		}
	}
}

Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung, wie Java das reflektierende statische Laden und das dynamische Laden von Beispielcode implementiert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn