java静态导入

时间:2019-01-11
本文章向大家介绍java静态导入,主要包括java静态导入使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

正常的import声明从包中导入类,因此可以在没有包引用的情况下使用它们。类似地,静态导入声明从类中导入静态成员,并允许它们在没有类引用的情况下使用。

静态导入声明还有两种形式:单静态导入和静态导入按需。单静态导入声明从类型中导入一个静态成员。static-import-on-demand声明导入一个类型的所有静态成员。静态导入声明的一般语法如下:

//Single-static-import declaration:

 

import static <<package name>>.<<type name>>.<<static member name>>;

 

//Static-import-on-demand declaration:

 

import static <<package name>>.<<type name>>.*;

静态导入示例

例如,您记得使用该System.out.println()方法在标准输出中打印消息。Systemjava.lang包中的一个类,它有一个名为的静态变量out。当你使用时System.out,你指的是System该类之外的那个静态变量。您可以使用静态导入声明outSystem类中导入静态变量,如下所示:

import static java.lang.System.out;

您的代码现在可以在程序中使用名称out表示System.out。编译器将使用静态进口报关来解析名称outSystem.out

public class StaticImportTest {

        public static void main(String[] args) {

                out.println("Hello static import!");

        }

}

静态导入规则

以下是有关静态导入声明的一些重要规则。

1)如果导入两个具有相同简单名称的静态成员,一个使用单静态导入声明,另一个使用静态导入按需声明,则使用单静态导入声明导入的静态成员优先。

假设有两个类,package1.Class1package2.Class2。这两个类都有一个名为的静态方法methodA。以下代码将使用package1.Class1.methodA()方法,因为它是使用单静态导入声明导入的:

import static package1.Class1.methodA; // Imports Class1.methodA() method

import static package2.Class2.*;  // Imports Class2.methodA() method too

  

public class Test {

        public static void main(String[] args) {

                methodA();   // Class1.methodA() will be called

        }

}

2)不允许使用单静态导入声明导入两个具有相同简单名称的静态成员。以下静态导入声明会生成错误,因为它们都使用相同的简单名称导入静态成员methodA

import static package1.Class1.methodA;

import static package1.Class2.methodA; // An error

3)如果使用单静态导入声明导入静态成员,并且在同一个类中存在具有相同名称的静态成员,则使用该类中的静态成员。

// A.java

package package1;

  

public class A {

        public static void test() {

                System.out.println("package1.A.test()");

        }

}

  

// Test.java

package package2;

  

import static package1.A.test;

  

public class Test {

        public static void main(String[] args) {

                test(); // Will use package2.Test.test() method, not package1.A.test() method

        }

  

        public static void test() {

                System.out.println("package2.Test.test()");

        }

}

 

Output:

 

package2.Test.test()

静态导入似乎可以帮助您使用静态成员的简单名称来简化程序的编写和读取。有时静态导入可能会在程序中引入细微的错误,这可能很难调试。建议您根本不使用静态导入,或仅在极少数情况下使用静态导入。