• import 与 import static


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

    java中的静态引用

    直接解释

    • 一般引入类的方式:import java.lang.Math.*;

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

    • 区别在于:

    • 一般引入需要使用 ClassName.method(); 的方式去调用类中的静态方法;

    • 而静态引入后,直接使用 method(); 即可使用静态方法。

    • 以下2张图可以清晰的查看。


    原文翻译

    Java中的静态引入

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

    // 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
    
    • 说明:System java.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 。这里,我们同时引入了Integer Byte 类,并且试图企业访问静态变量,但是当编译器看到两个导入语句的时候,一定不知道去调用Integer Byte 其中哪个的静态变量。因此编译器抛了个错误,说引用哪个变量是不明确的。

    普通引入与静态引入之间的不同

    • 使用import,引入的是包中的类或者接口;而使用static import,可以不通过类名来拿到的是类中的成员(变量、方法)。
    • 最大的不同是:可读性。原文说静态引入之后,调用时候的写法可读性更高? 我觉得是正常引入的时候,使用类名去调用的可读性远高于直接一个方法直接写出来的形式
  • 相关阅读:
    求取32位无符号整数中最低位位值为1的位置 && 求取32位无符号整数中最高位位值为1的位置
    交换寄存器中的相应字段
    NDK与JNI
    plt_0
    32位无符号整数平方根
    提取 主 设备号
    爱江山更爱美人
    mysql oracle sqlserver 数据库分页
    详解JDBC驱动的四种类型
    oracle sqlplus 中的清屏命令
  • 原文地址:https://www.cnblogs.com/kangkaii/p/9984651.html
Copyright © 2020-2023  润新知