其实import了之后没用的话跟JVM啊classloader什么的完全没关系。
import语句只在编译时有效,编译过后不会带到class文件里的。所以import了之后用了的类的信息才会出现在编译出来的class文件里,没用的则不会出现。
有兴趣可以自己动手试试。
- //import java.util.regex.*;
- public class Test {
- public static void main(String[] args) {
- System.out.println("test");
- }
- }
//import java.util.regex.*; public class Test { public static void main(String[] args) { System.out.println("test"); } }
那行import无论被注释掉还是没有被注释掉,编译出来的class文件的内容都是这样的:(javap -private -s -verbose Test)
- Compiled from "Test.java"
- public class Test extends java.lang.Object
- SourceFile: "Test.java"
- minor version: 0
- major version: 50
- Constant pool:
- const #1 = Method #6.#15; // java/lang/Object."<init>":()V
- const #2 = Field #16.#17; // java/lang/System.out:Ljava/io/PrintStream;
- const #3 = String #18; // test
- const #4 = Method #19.#20; // java/io/PrintStream.println:(Ljava/lang/String;)V
- const #5 = class #21; // Test
- const #6 = class #22; // java/lang/Object
- const #7 = Asciz <init>;
- const #8 = Asciz ()V;
- const #9 = Asciz Code;
- const #10 = Asciz LineNumberTable;
- const #11 = Asciz main;
- const #12 = Asciz ([Ljava/lang/String;)V;
- const #13 = Asciz SourceFile;
- const #14 = Asciz Test.java;
- const #15 = NameAndType #7:#8;// "<init>":()V
- const #16 = class #23; // java/lang/System
- const #17 = NameAndType #24:#25;// out:Ljava/io/PrintStream;
- const #18 = Asciz test;
- const #19 = class #26; // java/io/PrintStream
- const #20 = NameAndType #27:#28;// println:(Ljava/lang/String;)V
- const #21 = Asciz Test;
- const #22 = Asciz java/lang/Object;
- const #23 = Asciz java/lang/System;
- const #24 = Asciz out;
- const #25 = Asciz Ljava/io/PrintStream;;
- const #26 = Asciz java/io/PrintStream;
- const #27 = Asciz println;
- const #28 = Asciz (Ljava/lang/String;)V;
- {
- public Test();
- Signature: ()V
- Code:
- Stack=1, Locals=1, Args_size=1
- 0: aload_0
- 1: invokespecial #1; //Method java/lang/Object."<init>":()V
- 4: return
- LineNumberTable:
- line 3: 0
- public static void main(java.lang.String[]);
- Signature: ([Ljava/lang/String;)V
- Code:
- Stack=2, Locals=1, Args_size=1
- 0: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream;
- 3: ldc #3; //String test
- 5: invokevirtual #4; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
- 8: return
- LineNumberTable:
- line 5: 0
- line 6: 8
- }
Compiled from "Test.java" public class Test extends java.lang.Object SourceFile: "Test.java" minor version: 0 major version: 50 Constant pool: const #1 = Method #6.#15; // java/lang/Object."<init>":()V const #2 = Field #16.#17; // java/lang/System.out:Ljava/io/PrintStream; const #3 = String #18; // test const #4 = Method #19.#20; // java/io/PrintStream.println:(Ljava/lang/String;)V const #5 = class #21; // Test const #6 = class #22; // java/lang/Object const #7 = Asciz <init>; const #8 = Asciz ()V; const #9 = Asciz Code; const #10 = Asciz LineNumberTable; const #11 = Asciz main; const #12 = Asciz ([Ljava/lang/String;)V; const #13 = Asciz SourceFile; const #14 = Asciz Test.java; const #15 = NameAndType #7:#8;// "<init>":()V const #16 = class #23; // java/lang/System const #17 = NameAndType #24:#25;// out:Ljava/io/PrintStream; const #18 = Asciz test; const #19 = class #26; // java/io/PrintStream const #20 = NameAndType #27:#28;// println:(Ljava/lang/String;)V const #21 = Asciz Test; const #22 = Asciz java/lang/Object; const #23 = Asciz java/lang/System; const #24 = Asciz out; const #25 = Asciz Ljava/io/PrintStream;; const #26 = Asciz java/io/PrintStream; const #27 = Asciz println; const #28 = Asciz (Ljava/lang/String;)V; { public Test(); Signature: ()V Code: Stack=1, Locals=1, Args_size=1 0: aload_0 1: invokespecial #1; //Method java/lang/Object."<init>":()V 4: return LineNumberTable: line 3: 0 public static void main(java.lang.String[]); Signature: ([Ljava/lang/String;)V Code: Stack=2, Locals=1, Args_size=1 0: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream; 3: ldc #3; //String test 5: invokevirtual #4; //Method java/io/PrintStream.println:(Ljava/lang/String;)V 8: return LineNumberTable: line 5: 0 line 6: 8 }
所以别在意,import多余的东西不会对运行性能带来影响。JVM根本不知道你import了哪些类,只知道你用了哪些类。
import多余的东西主要带来的影响是污染了当前编译单元(也就是单个Java源代码文件)的命名空间而已,名字冲突的可能性变大了而已。例如说package A里有MyClass,你当前的文件在package B里,也有MyClass,这个时候直接写MyClass就容易有歧义,需要写成完整的A.MyClass或B.MyClass来区分。只是这个问题而已。
相关推荐
当两个或多个不同的包中含有相同名称的类时,直接使用 `import` 语句会导致编译错误。为了避免这个问题,可以使用 `as` 关键字来重命名导入的类。例如: ```kotlin import foo.a.Bar as ABar import foo.b.Bar as ...
在Java编程语言中,`import`语句是一个至关重要的部分,它允许我们引用其他类、接口或包,以便在我们的程序中使用它们。这个过程被称为“导入”或“导包”,使得代码更加简洁且易于管理。以下是关于Java `import`...
总结,理解和熟练运用`import`语句以及在命令行环境中编译和运行带有包的Java类,是Java开发的基础技能。在编写代码时,合理地使用`import`可以提高代码的可读性和维护性。同时,正确地编译和运行程序,对于调试和...
例如,可以使用 Python 的交互式 shell 来验证 Numpy 库是否安装成功,或者使用 import 语句来验证其他第三方库是否安装成功。 Python 和第三方库交叉编译过程需要meticulous 的准备工作、编译 Python 和第三方库,...
在预编译中使用 like 时,需要在值的地方加 % 号,以便正确地实现模糊查询。例如,String sql = "select * from t_Content where title like ?";ResultSet rs;rs = null;try {rs = db.getResult(sql, new String[]{...
在Python中,`import` 语句有多种形式: 1. **基本导入**:`import module_name`,这会将整个模块导入,并允许通过 `module_name` 访问其所有公开属性(即非下划线开头的变量和函数)。 2. **别名导入**:`import ...
例如,我们可以使用@ConditionalOnClass或@ConditionalOnBean等Spring Boot的注解,来确保某些组件只在类路径中有特定类或者存在特定bean的情况下才生效。 在"JAVA100例之实例54"中,可能包含了一个展示如何使用...
这意味着在封装高阶函数时,需要考虑路径的相对性,因为编译后的路径会变成 Webpack 命令执行目录的相对路径。这可能会导致路径解析的问题,需要在编写代码时格外留意。 总之,理解并正确使用 `import()` 动态加载...
在这个例子中,`import()`表达式会异步加载`myModule.js`,只有当代码执行到这一行时才会发起请求并编译模块,而不是在应用启动时一次性加载所有模块。 Webpack支持动态导入,并且可以通过配置来优化这种加载方式。...
在protobuf中,“导入”(import)是一个关键概念,它允许你在一个.proto文件中引用另一个.proto文件中的定义。这样,你可以在多个文件之间共享消息类型、枚举或服务定义,避免代码重复,提高代码的可维护性和组织性...
- **带引号的文件名**: 预处理器首先在包含 `#import` 语句的文件所在目录中搜索类型库文件,然后在编译器的其他指定路径中搜索。 - **带尖括号的文件名**: 预处理器会在环境变量 `PATH` 和 `LIB` 定义的路径中搜索...
在Java编程中,调试SQL语句是开发过程中的常见任务,尤其当面对复杂且冗长的查询时。为了提高效率并使SQL语句更易于理解和分析,格式化SQL语句显得尤为重要。标题提及的"Java打印漂亮的SQL语句(被格式化的SQL语句)...
4. 如果在所有指定的路径中都没有找到对应的类文件,则会出现编译错误或运行时错误。 #### 五、示例 假设有一个名为`Test`的类位于`p1`包中,并且`CLASSPATH`设置为`.;%JAVA_HOME%\lib`。当使用`import p1.Test;`...
在编译和运行Java程序时,系统需要知道去哪里寻找所需的类。`classpath`环境变量指定了这些类的位置。为了使程序能够找到`A.class`和`B.class`文件,我们需要确保它们位于`classpath`设置的目录中。 **4. 实际应用*...
`import`语句位于所有类定义之前,且在`package`语句之后。需要注意的是,`import`只是告诉编译器类的位置,并不会将这些类的定义引入到代码中。对于`java.lang`包,其下的类如String、Integer等是默认导入的,无需...
描述虽然为空,但我们可以推测博主可能分享了一个实现或一个工具,使JavaScript开发者可以以类似于Java的`import`语句来组织和引用他们的代码模块。这可能涉及到命名空间、模块管理和静态分析等方面。 标签“源码”...
`rollup-plugin-ignore-import`是一个Rollup插件,其主要任务是在打包时自动忽略开发者指定的导入语句。这可以显著减少最终输出文件的大小,提高加载速度,特别是在处理大型项目或库时。通过配置,你可以明确指定...
在处理import语句时,我们需要避免Sass将import的文件内容合并到当前文件中,因为这可能导致文件过大,超出微信小程序2MB的单包代码限制。有两种解决方法: 1. 修改Sass处理源码,跳过import语句。 2. 注释import...
在ABAP编程中,SQL语句的动态操作是高级编程技术的一个重要方面,它允许根据程序运行时的条件和用户输入来构建和执行SQL查询。本程序“ZSQL_EXEC_RICOO”展示了如何使用ABAP实现动态SQL操作,包括SELECT、UPDATE、...