Static class loading
Classes
are loaded using new operator. Whenever you define new object using the new
keyword, then java class loader fetches and load the corresponding class, if
that class is not loaded already.
Dynamic class loading
Dynamic
class loading allows you to load the classes at run time. It is useful to load
the class, when the name of class is not known at compile time.
Let
me explain with an example, suppose you are a toy vendor, where you sell
different toys to the customers. When you launch your application, instead of
loading all the toy classes, load the class whenever customer asks for the toy
first time. This way you can reduce the memory foot print.
Find
the below working application.
ToyInformation.java
package com.sample.toys; public interface ToyInformation { String toyInformation(); }
Car.java
package com.sample.toys; public class Car implements ToyInformation{ @Override public String toyInformation() { return "I am a car"; } }
Lion.java
package com.sample.toys; public class Lion implements ToyInformation{ @Override public String toyInformation() { return "I am a lion"; } }
Train.java
package com.sample.toys; public class Train implements ToyInformation { @Override public String toyInformation() { return "I am a train"; } }
Application.java
package com.sample.app; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.HashMap; import java.util.Map; import com.sample.toys.Car; import com.sample.toys.Lion; import com.sample.toys.ToyInformation; import com.sample.toys.Train; public class Application { private static Map<Integer, ToyInformation> toysMap = new HashMap<>(); private static void printToyNames() { System.out.println("*********************"); System.out.println("1. Car"); System.out.println("2. Lion"); System.out.println("3. Train"); System.out.println("*********************"); System.out.println("Select the toy that you want"); } private static void getToyInformation() throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int selected = -1; try { selected = Integer.parseInt(br.readLine()); } catch (NumberFormatException e) { System.out.println("Not a valid selection"); return; } switch (selected) { case 1: if (!toysMap.containsKey(1)) { Car car = (Car) Class.forName("com.sample.toys.Car").newInstance(); toysMap.put(1, car); } break; case 2: if (!toysMap.containsKey(2)) { Lion lion = (Lion) Class.forName("com.sample.toys.Lion").newInstance(); toysMap.put(2, lion); } break; case 3: if (!toysMap.containsKey(3)) { Train train = (Train) Class.forName("com.sample.toys.Train").newInstance(); toysMap.put(3, train); } break; default: System.out.println("Sorry...We do not have the copy"); } ToyInformation toyInfo = toysMap.get(selected); if (toyInfo != null) { System.out.println(toyInfo.toyInformation()); } } public static void main(String args[]) throws Exception { while (true) { printToyNames(); getToyInformation(); } } }
You may like
No comments:
Post a Comment