java中import java.util,我们初学者学到的是Scanner,但为什么不直接*呢?
目前看到最多的就是教我们importjava.util.Scanner,虽然对于初学者来说,了解全面是有必要的,但对于那些已经在工作的程序员来说,输入*或只输入Scann...
目前看到最多的就是教我们import java.util.Scanner,虽然对于初学者来说,了解全面是有必要的,但对于那些已经在工作的程序员来说,输入*或只输入Scanner会有什么区别?直接输入*不是更加方便吗?
我是自学java,很多规矩还不懂,在此询问一波大佬,谢谢! 展开
我是自学java,很多规矩还不懂,在此询问一波大佬,谢谢! 展开
5个回答
展开全部
引用的范围不同,* 标识引用 java.util 路径下所有的包,import java.util.Scanner 只引用import java.util.Scanner包;区别就是编译打包出来的应用包大小不一样,比如本来你应用程序只有10K大小,*方式就10M了;程序当然是只要把需要的包打包进去就可以了
更多追问追答
追问
哦哦,也就是节约空间?;
哦哦,也就是节约空间?;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
是方便,但是我们开发一般都遵从用什么引什么的规则.不用的就不要引入,你就当作这个是一个规范就好了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这通常是企业开发编码规范,单纯使用*方式虽然也可以,但是多少企业要求不这样写,也就是你所说的要具体引入某个类import java.util.Scanner;
这就像好比我要使用一把钳子就可以完成工作,你没必要把一百多斤重的工具箱全部拿来用一样。
所以应遵循用到某个包的类或接口时,只引入你需要的,不要引入包中所有工具,*就是引入所有包中工具,这样是不可取的,你可以看看java SE源代码中,没有任何一个文件中会使用*这种方式。
这就像好比我要使用一把钳子就可以完成工作,你没必要把一百多斤重的工具箱全部拿来用一样。
所以应遵循用到某个包的类或接口时,只引入你需要的,不要引入包中所有工具,*就是引入所有包中工具,这样是不可取的,你可以看看java SE源代码中,没有任何一个文件中会使用*这种方式。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼上一派胡言。
导入某个包下的一个类,和使用通配符*导入该包下所有类的唯一区别,就是当前命名空间中的可见性。
import java.util.Scanner;
有了这行语句后,你在代码中就可以直接使用类名Scanner,而不必写出全限定类名java.util.Scanner。然而,对于java.util包下的其他类如HashMap,想使用它仍然需要写出全限定类名java.util.HashMap。
import java.util.*;
而有了这行语句后,java.util包下的所有类和接口现在在你的命名空间中都是可见的。你可以直接使用Scanner、Map、Comparator、Iterator等名称,而不必写出它们的全限定名。
那么你会问既然java.util.*导入了更多的名称,用起来更方便,为什么还要用java.util.Scanner呢?这涉及到命名空间污染的问题。使用*将导入该包下所有的类和接口名,而这些名称可能与你的当前环境中某些已有的名称冲突,例如,你在当前文件中自己编写了一个Iterator类。这可能导致一系列意想不到的问题。所以,在代码规范较严格的公司,会要求使用全限定名导入每个需要的类,而禁止使用通配符。
导入一个类或是导入所有类,对编译结果没有影响,两种方式编译生成的文件大小是一致的。编译时并不会将被导入类的源代码插入到当前类中,而是在运行时动态加载这些类的class文件到JVM中,并且是按需加载,即哪怕你写的是import java.util.*,而代码里只用到了Scanner,那么JVM只会在执行到代码中Scanner的位置时才会将Scanner类装载进来,而java.util中的其他类并不会被装载进内存。
导入某个包下的一个类,和使用通配符*导入该包下所有类的唯一区别,就是当前命名空间中的可见性。
import java.util.Scanner;
有了这行语句后,你在代码中就可以直接使用类名Scanner,而不必写出全限定类名java.util.Scanner。然而,对于java.util包下的其他类如HashMap,想使用它仍然需要写出全限定类名java.util.HashMap。
import java.util.*;
而有了这行语句后,java.util包下的所有类和接口现在在你的命名空间中都是可见的。你可以直接使用Scanner、Map、Comparator、Iterator等名称,而不必写出它们的全限定名。
那么你会问既然java.util.*导入了更多的名称,用起来更方便,为什么还要用java.util.Scanner呢?这涉及到命名空间污染的问题。使用*将导入该包下所有的类和接口名,而这些名称可能与你的当前环境中某些已有的名称冲突,例如,你在当前文件中自己编写了一个Iterator类。这可能导致一系列意想不到的问题。所以,在代码规范较严格的公司,会要求使用全限定名导入每个需要的类,而禁止使用通配符。
导入一个类或是导入所有类,对编译结果没有影响,两种方式编译生成的文件大小是一致的。编译时并不会将被导入类的源代码插入到当前类中,而是在运行时动态加载这些类的class文件到JVM中,并且是按需加载,即哪怕你写的是import java.util.*,而代码里只用到了Scanner,那么JVM只会在执行到代码中Scanner的位置时才会将Scanner类装载进来,而java.util中的其他类并不会被装载进内存。
追问
大佬很全面哇!谢谢指导,采纳了!
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询