原文链接: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,可以不通过类名来拿到的是类中的成员(变量、方法)。
  • 最大的不同是:可读性。原文说静态引入之后,调用时候的写法可读性更高? 我觉得是正常引入的时候,使用类名去调用的可读性远高于直接一个方法直接写出来的形式

import 与 import static的更多相关文章

  1. package、import和import static

    package 语句: 该语句必须作为源文件的第一条非注释性语句,一个源文件只能指定一个包,即只能包含一条package语句. import 和import static 关键字: 引入import关 ...

  2. Dart & import show & import hide & import as & part & part of

    Dart & import show & import hide & import as & part & part of // 部分导入,即仅仅导入 dart ...

  3. #import、#include、#import<>和#import””的区别

    一.#import与#include #import不会引起交叉编译的问题.因为在Objective-C中会存在C/C++和Object-C混编的问题,如果用#include引入头文件,会导致交叉编译 ...

  4. 模块的语法 import ,from...import....

    ------------------------积极的人在每一次忧患中都看到一个机会, 而消极的人则在每个机会都看到某种忧患 1. 认识模块 模块可以认为是一个py文件. 模块实际上是我们的py文件运 ...

  5. import()、import语句、require() 区别

    import命令能够接受什么参数,import()函数就能接受什么参数,两者区别主要是后者为动态加载. import() 与 import语句 区别 区别项 import() import语句 参数都 ...

  6. python3 from Tkinter import * 和import Tkinter as tk两个区别import Tkinter

    原文https://stackoverflow.com/questions/15974787/difference-between-import-tkinter-as-tk-and-from-tkin ...

  7. from module import 和 import 的区别

    最近在用codecademy学python,遇到一些题目错误,小小记录一下 如from math import sqrt是把sqrt作为本文件的方法导入进来了,使用的时候只需要直接调用sqrt. 而如 ...

  8. OC导入框架方式#import、@import的区别

    #import负责导入程序所需的文件的信息导入到程序中,随着程序所需的文件越来越多,程序就要导入更多的文件,这就带来了越来越长的编译时间,而且有大量重复的.为了解决这个问题可以采用以下办法解决,创建. ...

  9. python from import与import as 的含义

    from os import makedirs, unlink, sep #从os包中引入 makedirs.unlink,sep类 from os.path import dirname, exis ...

  10. 2019-7-16 import / from...import... 模块的调用

    模块调用的总结:如果你是pycharm打开文件,会自动帮你把文件根目录加到system.path中,你要调用模块直接以根目录为基准开始找.1.假如你要调用和文件根目录为同级的文件,你直接import ...

随机推荐

  1. windows上备份mysql数据库

    方案一:采用mysql自带的工具mysqldump. 脚本文件backup.bat如下: set  "YMD=%date:~,4%%date:~5,2%%date:~8,2%"cd ...

  2. Lower Power with CPF(二)

    CPF文件可以有两种组织方式:Flat CPF file or Hierarchical CPF file. 由于在大型的SoC设计中,一般都采用Hierarchical的形式,所以本文主要按这个方式 ...

  3. Linux基础命令---显示文本grep

    grep 按照指定的模式,在文件中搜索匹配的行,将结果显示在标准输出.另外还有两个指令egrep相当于grep –E,fgrep相当于grep -F.如果没有给出文件名,那么从标准输入读取. 此命令的 ...

  4. iPhone手机获取uuid 安装测试app

    iPhone手机获取uuid 安装测试app UDID是一种iOS设备的特殊识别码.除序号之外,每台ios装置都另有一组独一无二的号码,我们就称之为识别码( Unique Device Identif ...

  5. C/C++之标准库和标准模板库

    C++强大的功能来源于其丰富的类库及库函数资源.C++标准库的内容总共在50个标准头文件中定义.在C++开发中,要尽可能地利用标准库完 成.这样做的直接好处包括:(1)成本:已经作为标准提供,何苦再花 ...

  6. web前端----jQuery基础语法

    一.jQuery基础1.为什么要用jquery? 写起来简单,省事,开发效率高,兼容性好2.什么是jQuery? jQuery是一个兼容多浏览器的JavaScript库(类似python里面的模块)3 ...

  7. Winform 出现“Win已停止工作”解决方法

    一.错误描述 错误名称如上.整体错误如下: Win已停止工作 二.解决方法: 1.请以管理员身份运行命令:“netsh winsock reset”,重启电脑后再次尝试运行本工具. 2.使用360安全 ...

  8. 20145313张雪纯exp7

    问题 (1)通常在什么场景下容易受到DNS spoof攻击 处于局域网中的时候,例如连接了学校/公司/餐厅wifi. (2)在日常生活工作中如何防范以上两攻击方法 不要轻易点开未知网址.鼠标在链接处停 ...

  9. 20145334赵文豪网络对抗Web安全基础实践

    1.SQL注入攻击原理,如何防御? SQL注入攻击就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意SQL命令的目的. 对于SQL注入攻击的防范,我觉 ...

  10. linux内核分析 第六周

    一.进程的描述 为了管理进程,内核必须对每个进程进行清晰的描述,进程描述符提供了内核所需了解的进程信息. 1.进程控制块PCB--task_struct 进程状态 进程打开的文件 进程优先级信息 2. ...