我正在研究一个小程序,并且正在使用数组,所以我已经完成了:
import java.util.Arrays;
后来我开始扩展我以前做过的事情,并决定我想从用户那里得到输入,所以当时我补充说:
import java.util.Scanner;
现在发生了一个想法。我知道我可以这样做:
import java.util.*
然后我只需要1个导入行而不是两个(或者我最终需要的很多),但导入中的通配符是否意味着它将从该包导入所有,而不管如果需要或不需要,或者只选择功能?
我的直觉是编写更多代码,只包含我知道我需要的软件包,但如果它没有区别,为什么有人会导入更多级别/软件包呢? (我宁愿懒得写少量代码)
答案 0 :(得分:8)
清楚导入正在做什么。它并不意味着加载.class
文件和字节码。
所有导入都允许您使用短类名来保存输入。
因此,如果您在代码中使用java.sql.PreparedStatement
,则导入PreparedStatement
时可以使用java.sql.PreparedStatement
。您可以永久编写Java代码,而无需使用单个import
语句。你只需拼出所有完全解析的类名。
在运行时首次使用时,类加载器仍将从.class
文件中引入字节代码。
它可以节省您的击键次数。就是这样。
它没有没有与类加载。
就个人而言,我更愿意避免使用*符号。我拼写每一个导出。我认为它更好地记录了我的意图。我的IDE是IntelliJ,所以我要求它动态插入导入。
懒惰通常是开发人员的一种美德,但在这种情况下并非如此。拼出它们并让你的IDE单独为它们插入它们。
如果您输入
import java.util.*;
您可以通过短名称来引用Scanner
和List
。
但是如果你想对FutureTask
和LinkedBlockingQueue
做同样的事情,你必须要这样做:
import java.util.concurrent.*;
答案 1 :(得分:3)
通配符导入该包中的所有内容。但是,使用像Eclipse这样的IDE,它为您提供了组织导入的可能性。
答案 2 :(得分:1)
通配符导入该包中的所有类和接口。
但是,通配符导入会不导入以相同名称开头的其他包。
例如,导入java.xml。* 不导入java.xml.bind包。