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

最新文章

  1. 下载本 WebEnh博客 安卓APP
  2. Linux定时任务
  3. Good Bye 2016 - A
  4. css3中webkit-box的用法
  5. [BZOJ 3530][Sdoi 2014]数数
  6. SQL Server SELECT逻辑处理顺序
  7. C#下搭建文件格式转换服务器
  8. 基于cfx的webservice调用
  9. 【转】Linux Posix Timer使用
  10. 层叠上下文 Stacking Context
  11. java.lang.NumberFormatException: empty String 错误
  12. PHP中静态方法和实例化方法的区别
  13. python简单词频统计
  14. Node.js实战项目学习系列(4) node 对象(global、process进程、debug调试)
  15. 在.txt文件的首行写上.LOG后,后面每次对改文本文件进行编辑后,系统会自动在编辑内容后记录操作时间
  16. web api使用JObject接收时,报“无法创建抽象类”错误
  17. 【MarkMark学习笔记学习笔记】javascript/js 学习笔记
  18. git下载、安装、连接github
  19. hasattr getattr setattr delattr --> (反射)
  20. sqlserver查询---分配cpu等资源

热门文章

  1. MySQL从删库到跑路_高级(一)——数据完整性
  2. linux常用命令:free 命令
  3. python中的对象(三)
  4. js小数运算出现多位小数如何解决
  5. Centos6版本使用yum报错 Loaded plugins: fastestmirror, refresh-packagekit, security Loading mirror speeds from cached hostfi Setting up Install Process No package gcc available. Error: Nothing to do
  6. read progress
  7. 20145329 《网络对抗技术》Web安全基础实践
  8. python的回收机制
  9. Wireshark分析RabbitMQ
  10. flink架构介绍