java的import

来源:互联网 发布:怪物猎人2g多玩数据库 编辑:程序博客网 时间:2024/05/23 14:23

1.import作用

没有使用import之前,操作不在同一个包中的类,得使用全限定名来操作.

/**没有使用import每次调用Arrays类的方法时都要使用它的全限定名*/class ImportDemo {public static void main(String[] args) {int[] arr = {1,5,78,34,23,5,6,2};String arrString1 = java.util.Arrays.toString(arr); //打印数组返回字符串System.out.println(arrString1);java.util.Arrays.sort(arr);  //对数组进行排序String arrString2 = java.util.Arrays.toString(arr);   //打印排序后的数组返回字符串System.out.println(arrString2);}}

使用import语句,直接把某个包下的类导入到当前类中.

语法格式:  import   需要导入类的全限定名;

此后,在本Java文件中,只需要使用类的简单名称即可.

/**使用import每次调用Arrays类的方法时只需要简单类名即可*/import java.util.Arrays;class ImportDemo {public static void main(String[] args) {int[] arr = {1,5,78,34,23,5,6,2};String arrString1 = Arrays.toString(arr); //打印数组返回字符串System.out.println(arrString1);Arrays.sort(arr);  //对数组进行排序String arrString2 = Arrays.toString(arr);   //打印排序后的数组返回字符串System.out.println(arrString2);}}
注意:编译会自动去java.lang包中去寻找使用到的类,比如String,System.所以他们不需要导入.
推论:非java.lang包的类,都需要导入.


问题:如果我们还需要继续引入java.util包中其他的类,我们还得提供N个import语句,要写很多次,不爽.
解决方案:使用通配符(*).
import    类的全限定名;    只能导入某一个类.
import    包名.子包名.*;   表示会引入该包下的所有的在当前文件中使用到的类.
import  java.util.*; 此时的*表示类名.
   在Eclipse工具中,即使我们使用了通配符*,在格式化代码的时候,也会转换为N条import语句.

/**import java.util.*;  等价于下面3句import java.util.Arrays;import java.util.List;import java.util.Set;*/import java.util.*;class ImportDemo {public static void main(String[] args) {int[] arr = {1,5,78,34,23,5,6,2};String arrString1 = Arrays.toString(arr); //打印数组返回字符串System.out.println(arrString1);List list = new ArrayList();Set set= new HashSet();}}
   注意: 编译器会默认找java.lang包下的类. 但是却不会去找java.lang的子包下的类.
            比如:java.lang.reflect.Method类.此时我们也得使用import java.lang.reflect.Method.

2.静态导入(static import)

import java.util.*;class ImportDemo {public static void main(String[] args) {int[] arr = {1,5,78,34,23,5,6,2};String arrString1 = Arrays.toString(arr); //打印数组返回字符串System.out.println(arrString1);Arrays.sort(arr);  //对数组进行排序String arrString2 = Arrays.toString(arr);   //打印排序后的数组返回字符串System.out.println(arrString2);}}
在上述代码中,每次使用Arrays类中的静态方法,即使我们使用了import语句,但是每次都需要使用Arrays类名去调用静态方法.
我就觉得不爽, 我期望:我能把Arrays类中的静态成员作为自己的静态成员一样调用:sort(arr);
解决方案:
      语法格式: import  static 类的全限定名.该类中的static成员名;
import static java.util.Arrays.sort;import static java.util.Arrays.toString;class ImportDemo {public static void main(String[] args) {int[] arr = {1,5,78,34,23,5,6,2};String arrString1 = toString(arr); //直接调用toString方法打印数组返回字符串System.out.println(arrString1);sort(arr);  //直接调用sort方法对数组进行排序String arrString2 = toString(arr);   //打印排序后的数组返回字符串System.out.println(arrString2);}}
注意:也可以使用通配符 import static 类的全限定名.*; 此时的*表示当前类的任意使用到的静态成员.
--------------------------------------------------------------------------------------------------------------------------------
通过反编译工具,其实所谓的静态导入也是一个语法糖/编译器级别的新特性.
在实际开发中,我们不使用静态导入,因为如此,分不清某一个静态方法或字段来源于哪一个类.
Eclipse工具,当格式化代码的时候,就自动取消了所有的静态导入,变成使用类名调用.



原创粉丝点击