壁纸网站模板,如何获得企业邮箱,搜钛建站,wordpress右侧的工具栏Class.forName(“类的全称”); 不仅表示类的类类型#xff0c;还代表了动态加载类 请大家区分编译、运行 编译时刻加载类时静态加载类、运行时刻加载类时动态加载类
编写一个Office.java文件#xff0c;在类中创建2个不存在的对象Word和Excel#xff0c;
public class Off…Class.forName(“类的全称”); 不仅表示类的类类型还代表了动态加载类 请大家区分编译、运行 编译时刻加载类时静态加载类、运行时刻加载类时动态加载类
编写一个Office.java文件在类中创建2个不存在的对象Word和Excel
public class Office {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();}}
}运行javac编译Office.java文件由于Word和Excel类都不存在因此抛出以下异常。
创建Word类提供start方法编译Word.java Word.java
class Word{public static void start(){System.out.println(word..start);}
}编译
javac Office.javaWord 类不抛出异常了Excel类不存在仍然不能进行编译。 从上面可以看出静态加载类在编译时如果有一个类不存在就会报错。
动态加载类可以解决此问题也就是在编译时不报错在运行时使用到具体类如果该类不存在就会报错
动态加载类 创建一个标准接口 IOfficeAndWord.java
public interface IOfficeAndWord {public void start();
}Word和Excel类都实现这个接口的方法 Word.java
public class Word implements IOfficeAndWord {Overridepublic void start() {System.out.println(word..start);}
}Excel.java
public class Excel implements IOfficeAndWord {Overridepublic void start() {System.out.println(excel..start);}
}public class OfficeBetter {public static void main(String[] args) {//动态加载类在运行时时刻加载try {Class c Class.forName(args[0]);//通过类类型,创建该类对象返回类型为该对象的类型IOfficeAndWord oaw (IOfficeAndWord) c.newInstance();oaw.start();} catch (Exception e) {e.printStackTrace();}}
}依次编译这几个类
javac OfficeBetter.java
javac Word.java
javac Excel.java运行OfficeBetter 类中的Word/Excel的方法
java OfficeBetter Word
java OfficeBetter Excel如果Excel不实现OfficeBetter 接口的方法运行时会抛出异常