import 与 import static

原文连接:https://www.geeksforgeeks.org/static-import-java/java

java中的静态引用

直接解释

  • 通常引入类的方式:import java.lang.Math.*;翻译

  • 静态引入类的方式:import static java.lang.Math.*;code

  • 区别在于:
  • 通常引入须要使用 ClassName.method(); 的方式去调用类中的静态方法;
  • 而静态引入后,直接使用 method(); 便可使用静态方法。
  • 如下2张图能够清晰的查看。对象


原文翻译

Java中的静态引入

在Java中,静态引入的方式是jkd1.5开始有的。有了静态引入功能,就能够直接拿到类中的静态成员,不须要类名或者任何对象。
好比,咱们常常使用Math类中的sqrt()方法,使用方式为:Math.sqrt(),可是经过使用静态引入后,咱们就能够直接使用sqrt()方法了。
根据SUN公司的微系统,这种写法会提升代码可读性与效率。然而某些程序大佬说,这种写法会令人迷惑,对于程序没有什么好处。
若是没有明确的要求,咱们不该该使用静态引入。
直接上代码:blog

// Java程序说明
// 调用事先定义的方法
// 不使用静态引入
class Geeks { 
    public static void main(String[] args) 
    { 
        System.out.println(Math.sqrt(4)); 
        System.out.println(Math.pow(2, 2)); 
        System.out.println(Math.abs(6.3)); 
    } 
} 

---
Output:

2.0
4.0
6.3

// 使用静态引入
import static java.lang.Math.*; 
class Test2 { 
    public static void main(String[] args) 
    { 
        System.out.println(sqrt(4)); 
        System.out.println(pow(2, 2)); 
        System.out.println(abs(6.3)); 
    } 
} 
Copy CodeRun on IDE

Output:

2.0
4.0
6.3
  • 说明:Systemjava.lang package中的类,out存在因而System类中的静态变量。经过静态引入的方式,咱们能够不用类名去调用它。

静态引入带来的歧义

  • 若是静态导入了不一样的类,然而他们的静态成员名字刚好相同,编译器就会抛出一个异常,它在没有类名的条件下,没法决定到底要使用的究竟是哪一个成员。
  • 代码以下:
// Java程序说明
// 发生歧义
// 静态引入
import static java.lang.Integer.*; 
import static java.lang.Byte.*; 
class Geeks { 
    public static void main(String[] args) 
    { 
        out.println(MAX_VALUE); 
    } 
} 

Output:

Error:Reference to MAX_VALUE is ambigious

说明:在上面的代码中,咱们试图去拿MAX_VALUE的值,可是每一个在包装类中预先生命的元数据类型都包含了MAX_VALUE。这里,咱们同时引入了IntegerByte类,而且试图企业访问静态变量,可是当编译器看到两个导入语句的时候,必定不知道去调用IntegerByte其中哪一个的静态变量。所以编译器抛了个错误,说引用哪一个变量是不明确的。接口

普通引入与静态引入之间的不一样

  • 使用import,引入的是包中的类或者接口;而使用static import,能够不经过类名来拿到的是类中的成员(变量、方法)。
  • 最大的不一样是:可读性。原文说静态引入以后,调用时候的写法可读性更高? 我以为是正常引入的时候,使用类名去调用的可读性远高于直接一个方法直接写出来的形式
相关文章
相关标签/搜索