Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java/android的新功能:类装入器与导入_Java_Android - Fatal编程技术网

java/android的新功能:类装入器与导入

java/android的新功能:类装入器与导入,java,android,Java,Android,如果我正确理解类加载器,那么它就是在运行时从jar文件加载类。如果这是真的,我想我们可以不用类加载器,通过import语句(在构建路径中包含jar文件之后)轻松地完成这项工作。以下是一个例子: import android.app.Activity; import android.os.Bundle; import android.view.Menu; 因此,我不明白类装入器的目的是什么。有人能解释一下吗?导入是为了正确编译代码。假设您使用的是ArrayList,您必须通过指定import j

如果我正确理解类加载器,那么它就是在运行时从jar文件加载类。如果这是真的,我想我们可以不用类加载器,通过import语句(在构建路径中包含jar文件之后)轻松地完成这项工作。以下是一个例子:

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