java/android的新功能:类装入器与导入
如果我正确理解类加载器,那么它就是在运行时从jar文件加载类。如果这是真的,我想我们可以不用类加载器,通过import语句(在构建路径中包含jar文件之后)轻松地完成这项工作。以下是一个例子:java/android的新功能:类装入器与导入,java,android,Java,Android,如果我正确理解类加载器,那么它就是在运行时从jar文件加载类。如果这是真的,我想我们可以不用类加载器,通过import语句(在构建路径中包含jar文件之后)轻松地完成这项工作。以下是一个例子: import android.app.Activity; import android.os.Bundle; import android.view.Menu; 因此,我不明白类装入器的目的是什么。有人能解释一下吗?导入是为了正确编译代码。假设您使用的是ArrayList,您必须通过指定import j
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
因此,我不明白类装入器的目的是什么。有人能解释一下吗?
导入是为了正确编译代码。假设您使用的是ArrayList,您必须通过指定import java.util.ArrayList告诉编译器您使用的是哪个ArrayList
代码>或您可以直接使用
java.util.ArrayList al = new java.util.ArrayList();
不进口任何东西
类装入器在运行时使用。如果在运行时需要类,则通过类加载器将其加载到运行时环境(JVM)
注意:import语句说-我正在将这个类用于编译器。类加载器用于将类(ArrayList或任何其他类)动态加载到JVM中
编辑:
假设你有两件衬衫(衬衫=等级),一件红色带黑色条纹,另一件红色带白色条纹。现在,你告诉你妈妈(编辑者),请熨这件红衬衫,你妈妈问你说的是哪件红衬衫——白条纹的红衬衫。请注意,您实际上并没有使用这件衬衫,您只是告诉您将使用哪件红色衬衫。
第二天,你需要去上大学,所以你告诉你爸爸给我那件白条纹的红衬衫(爸爸就像一个学生),然后你就穿上了。(类已加载并正在使用)import
用于正确编译代码。假设您使用的是ArrayList,您必须通过指定import java.util.ArrayList告诉编译器您使用的是哪个ArrayList
代码>或您可以直接使用
java.util.ArrayList al = new java.util.ArrayList();
不进口任何东西
类装入器在运行时使用。如果在运行时需要类,则通过类加载器将其加载到运行时环境(JVM)
注意:import语句说-我正在将这个类用于编译器。类加载器用于将类(ArrayList或任何其他类)动态加载到JVM中
编辑:
假设你有两件衬衫(衬衫=等级),一件红色带黑色条纹,另一件红色带白色条纹。现在,你告诉你妈妈(编辑者),请熨这件红衬衫,你妈妈问你说的是哪件红衬衫——白条纹的红衬衫。请注意,您实际上并没有使用这件衬衫,您只是告诉您将使用哪件红色衬衫。
第二天,你需要去上大学,所以你告诉你爸爸给我那件白条纹的红衬衫(爸爸就像一个学生),然后你就穿上了。(类已加载并正在使用)不能使用import
语句加载类。事实上,import语句并不做任何事情,它们只是语法上的糖分,因此在代码中引用类时可以省略包
例如:
import java.util.ArrayList; // ArrayList will now refer to java.util.ArrayList in this code file.
// Using the shorthand provided by the import statement:
ArrayList myList1 = new ArrayList();
// Without using the shorthand provided by the import statement:
java.util.ArrayList myList2 = new java.util.ArrayList();
程序使用的每个类都必须由类装入器装入。JavaRumtime环境提供了一个通常使用的默认类加载器。因此,当代码第一次遇到创建新ArrayList的语句时,它将从类装入器获取类定义
类加载器还可以动态加载类,只需使用完整的类名(例如“java.util.ArrayList”
)。如果实例化其他类加载器,则可以让每个加载器加载具有相同名称的类。这意味着,如果一个类发生了更改,您可以在新的类加载器中加载它的新版本
应用服务器(如GlassFish或JBoss)使用加载同一类的多个版本的技术,这样您就可以在不重新启动应用服务器的情况下重新部署应用程序。同样,同一应用服务器中的不同应用程序可以使用不同版本的类
例如:
import java.util.ArrayList; // ArrayList will now refer to java.util.ArrayList in this code file.
// Using the shorthand provided by the import statement:
ArrayList myList1 = new ArrayList();
// Without using the shorthand provided by the import statement:
java.util.ArrayList myList2 = new java.util.ArrayList();
假设您开发了一个用户类,该类由部署在同一应用服务器中的两个不同应用程序使用。您希望部署新版本的应用程序1,该应用程序使用新版本的用户类。您不能使用import
语句来加载类。事实上,import语句并不做任何事情,它们只是语法上的糖分,因此在代码中引用类时可以省略包
例如:
import java.util.ArrayList; // ArrayList will now refer to java.util.ArrayList in this code file.
// Using the shorthand provided by the import statement:
ArrayList myList1 = new ArrayList();
// Without using the shorthand provided by the import statement:
java.util.ArrayList myList2 = new java.util.ArrayList();
程序使用的每个类都必须由类装入器装入。JavaRumtime环境提供了一个通常使用的默认类加载器。因此,当代码第一次遇到创建新ArrayList的语句时,它将从类装入器获取类定义
类加载器还可以动态加载类,只需使用完整的类名(例如“java.util.ArrayList”
)。如果实例化其他类加载器,则可以让每个加载器加载具有相同名称的类。这意味着,如果一个类发生了更改,您可以在新的类加载器中加载它的新版本
应用服务器(如GlassFish或JBoss)使用加载同一类的多个版本的技术,这样您就可以在不重新启动应用服务器的情况下重新部署应用程序。同样,同一应用服务器中的不同应用程序可以使用不同版本的类
例如:
import java.util.ArrayList; // ArrayList will now refer to java.util.ArrayList in this code file.
// Using the shorthand provided by the import statement:
ArrayList myList1 = new ArrayList();
// Without using the shorthand provided by the import statement:
java.util.ArrayList myList2 = new java.util.ArrayList();
假设您开发了一个用户类,该类由部署在同一应用服务器中的两个不同应用程序使用。您希望部署新版本的应用程序1,该应用程序使用新版本的用户类。LastMind对import
语句进行了详细描述
要稍微扩展类加载器,假设您有一个类
class Foo {
static Object foo() {
return new java.util.ArrayList();
}
}
在运行时,当调用foo()时,它隐式地使用自己的类加载器来加载其他类。请注意,直到应用程序在运行时实际使用ArrayList类,ArrayList类才真正加载到内存中!这就是equ