2011-06-29 13 views
6

Moje pytanie brzmi: kiedy JVM ładuje wszystkie klasy w projekcie? Ponadto, dlaczego potrzebujemy pojęcia programu ładującego klasy.Jaki jest cel modułu ładującego klasy Java?

Byłbym szczęśliwy, gdybyś mógł podać mi przykład sytuacji, w której używasz programu ładującego klasy i dlaczego używasz programu ładującego klasy w tej sytuacji.

+4

Może uczyć ładowarki klasy w ogóle i zadać konkretne pytania. Pytanie "Proszę wyjaśnić wszystko, co wiesz o ładowarkach klasowych" to IMHO, o które można prosić. – Arne

+0

+1 Arne. ClassLoaders/ładowanie klasy to ogromny temat. ClassLoader sam w sobie jest klasą, a ClassLoaders mogą być ułożone hierarchicznie z różnymi zasadami; self-first, parent-first i There's Context ClassLoaders - oszałamiająco duży temat, ale na szczęście dobrze udokumentowany przez liczne źródła, uzyskać Googling i przygotować się do czytania dużo. – earcam

Odpowiedz

13

kiedy JVM wczytuje wszystkie klasy w projekcie.

JVM ładuje klasy mniej więcej "na żądanie". To znaczy. wszystkie klasy w środowisku wykonawczym zazwyczaj nie zostaną załadowane po uruchomieniu.

Patrz tych adresów szczegółowe informacje na ten temat:

dlaczego potrzebujemy pojęcia ładowarki klasy

Ładowarki klas pozwalają nam ładować klasy z różnych źródeł.

  • plik jar na dysku
  • runtime generowane bajt array
  • z Internetu (który jest typowy przypadek użycia dla apletów)

To sprawia, że ​​uruchomienie aplikacji więcej elastyczny i modułowy.

dać mi przykład z sytuacją, w której używasz programu ładującego klasy i dlaczego używasz tam ładującego klasy.

Bez klasy-ładowarki nie dostaniesz daleko, więc będę interpretować swoje pytanie, „kiedy nie trzeba zwyczaj klasy Loader”.

Osobiście wykonałem kilka eksperymentów przy użyciu biblioteki manipulacji kodu bajtowego (ASM), w której zastąpiłem pola dostępami metodami get i set. Użyłem niestandardowego programu ładującego klasy, aby przepisać klasy podczas ich ładowania. Nie wiem, czy to typowy przypadek użycia, ale chodzi o to, że nie mogłem tego zrobić bez niego!

Można również wyobrazić sobie system wtyczek, który ładuje klasy urządzeń peryferyjnych z jakiegoś katalogu wtyczek.

+0

"Dynamiczne ładowanie klas" może być dobrym przykładem, w którym używamy metody Class.forName (String clazz) do dynamicznego ładowania klasy do kontenera ... – Rupesh

1

JVM klasy obciążenia na żądanie. Jeśli potrzebujesz jawnie załadowanej klasy, musisz odwołać się do tej klasy z głównej klasy, na przykład

 
static { 
    MyClass.class.getName(); 
} 

Custom classloader is rarely needed, most commons cases are: AOP (for example runtime on-load instrumentation of classes with Javassist), remote class loading (loading a class from remote location), encrypted class loading (deciphering class code and loading).

1

You use class Loader for loading classes if you are developing application which can support plugins. Sample: You have application for video player and each codec is plugin in your application. you have folder ./codecs and there you put your plugin codecs. You search the folder for jar files and load all jar files with Class loader.

2

A class is loaded whenever it is executed directly orif it is referenced in another class which is to be executed... for example

class A 
{} 
class B extends A 
{ 
    public static void main(String arr[]) 
    {} 
} 

here whenever u get execute class B,the class A is loaded automatically

now consider this

class A 
{} 

class B 
{ 
    public static void main(String arr[]) 
    { 
    A ob=new A();//here class A is need to be loaded by JRE 
    } 
} 
1

JVM loads a Class the first time it is referenced. For in depth analysis of Class Loaders look here

0

Class loader is used in many cases. Few examples are:

  1. Class.forName to get Java classes at runtime
  2. Reflection API
  3. Eclipse debugger

There are lot of other examples as well.

0

Default Class Loader will load .class file only once, even though you are using that multiple times in your program. After loading.class file, if it is modified outside then default class loader wont load updated version of class file(.class file is already available in method area). You can resolve this problem, by defining your own customized Class Loader.

Main advantage of customized class loader is you can control, class loading mechanism based on your requirement.

java.lang.ClassLoader, aby zdefiniować własny dostosowany program ładujący klasy. Każdy program ładujący klasy w JAVA powinien być klasą potomną klasy java.lang.ClassLoader, bezpośrednio pośrednio. Dlatego ta klasa działa jako klasa bazowa dla wszystkich dostosowanych ładowarek klas.

Uwaga: Przy projektowaniu/rozwój serwerów WWW i serwer aplikacji, zwykle dostosowane ładowarki klasy służą do niestandardowego mechanizmu klasa obciążenia.

Na przykład:

public class CustClassLoader extends ClassLoader{ 
    public Class loadClass(String cname) throws ClassNotFoundException{ 
    //check for updates and laod updated .class 
    //file and returns corresponding Class 
    } 
} 

class Client{ 
    public static void main(String [] args){ 
     Dog d1 = new Dog(); 
     CustClassLoader c1 = new CustClassLoader(); 
     c1.loadClass("Dog"); 
     // 
     // 
     // 
     c1.loadClass("Dog"); 
     // 
    // 
    } 
}