文档章节

import static和import的区别

evil_01
 evil_01
发布于 2016/07/15 14:00
字数 901
阅读 35
收藏 3

import static静态导入是JDK1.5中的新特性。一般我们导入一个类都用 import com.....ClassName;而静态导入是这样:import static com.....ClassName.*;这里的多了个static,还有就是类名ClassName后面多了个 .* ,意思是导入这个类里的静态方法。当然,也可以只导入某个静态方法,只要把 .* 换成静态方法名就行了。然后在这个类中,就可以直接用方法名调用静态方法,而不必用ClassName.方法名 的方式来调用。 

这种方法的好处就是可以简化一些操作,例如打印操作System.out.println(...);就可以将其写入一个静态方法print(...),在使用时直接print(...)就可以了。 

但是这种方法建议在有很多重复调用的时候使用,如果仅有一到两次调用,不如直接写来的方便

在Java 5中,import语句得到了增强,以便提供甚至更加强大的减少击键次数功能,虽然一些人争议说这是以可读性为代价的。这种新的特性成为静态导入。

当你想使用static成员时,可以使用静态导入(在API中的类和你自己的类上,都可以使用该特性)。下面是静态导入前后的代码实例:

在静态导入之前:

public class TestStatic { 
    public static void main(String[] args) { 
        System.out.println(Integer.MAX_VALUE); 
        System.out.println(Integer.toHexString(42)); 
    } 
}
在静态导入之后:
import static java.lang.System.out; 
import static java.lang.Integer.*; 
 
public class TestStaticImport { 
    public static void main(String[] args) { 
        out.println(MAX_VALUE); 
        out.println(toHexString(42)); 
    } 
}
两个类都产生相同的输出:
  1. 2147483647 
  2. 2a
让我们看一下使用静态导入特性的代码中将发生什么:

1、虽然该特性通常称为“静态导入”,但语法必须是import static,后面跟你想导入的static成员的完全限定名称,或者通配符。在本例中,我们在System类的out对象上进行静态导入。

2、在本例中,我们可能想使用java.lang.Integer类的几个static成员。该静态导入语句使用通配符来表达“我想在此类中的所有静态成员上进行静态导入”。

3、现在我们终于看到静态导入特性的好处!我们不必在System.out.println中键入System。太好了!另外,我们不必在Integer.MAX_VALUE中键入Integer。因此,在这行代码中,我们能够将快捷方式用于静态方法和一个常量。

4、最后,我们进行更多的快捷操作,这次针对Integer类的方法。

关于该特性,我们已经有点儿讽刺意味儿了,但不仅我们是这样的。我们不认为节省少量的击键次数会让代码难于阅读一点,但许多开发人员要求将它添加到语言中。

下面是使用静态导入的几条原则:

  • 你必须说import static, 不能说static import。
  • 提防含糊不清的命名static成员。例如,如果你对Integer类和Long类执行了静态导入,引用MAX_VALUE将导致一个编译器错误,因为Integer和Long都有一个MAX_VALUE常量,并且Java不会知道你在引用哪个MAX_VALUE。
  • 你可以在static对象引用、常量(记住,它们是static 或final)和static方法上进行静态导入。

对于静态导入,一定要遵循两个规则:

  • 不使用*(星号)通配符,除非是导入静态常量类(只包含常量的类或接口)。
  • 方法名是具有明确、清晰表象意义的工具类。

 

© 著作权归作者所有

evil_01
粉丝 9
博文 45
码字总数 29244
作品 0
卢湾
架构师
私信 提问
httpcomponents httpclient连接池实现与测试

在windows环境下,使用Process Explorer查看连接数和连接状态。 使用jdk自带工具jps查看进程号,然后在Process Explorer中查看连接。官方文档:In order to ensure proper release of system...

杨喆
05/24
10
0
Collection 和 Map 遍历过程的区别

1:Collection 和 Map 都是Java体系为我们提供的强大集合工具,他们的遍历是最多的操作,那么他们有什么不同呢?请看如下代码 import java.util.ArrayList;import java.util.Collection;imp...

刘付kin
2016/12/07
4
0
Java POI Excel( pio:纯java操作excel的api )

POI官方网址:http://poi.apache.org/ POI的功能实在很强大,而且是apache的子项目,它下面又包含一些Component,比如处理Excel XLS,PowerPoint PPT,Word DOC,Outlook MSG,Excel XLSX等,...

again-Y
2013/10/30
668
2
Springboot Mybatis配置多数据源(不须切换)

1.前言 在我们需要进行数据库连接的道路上,必定经历过很多弯路,时至今日,我们明白,必须配置连接池,让连接池来管理连接。另外,数据源真正应该做到的不是切换,而是多数据源同时存在。所...

hengbao5
01/22
25
0
Myisam引擎和InnoDb引擎的区别

Myisam引擎和InnoDb引擎的区别 最近闲来无事,看了下面试题目,看到mysql数据表的引擎模块,目前我们用的比较多的引擎应该是innodb和myisam,其他的引擎暂时抛开不谈,我们先来看看这两个数据...

推荐码发放
2018/05/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

db.properties

jdbc.driver=com.mysql.cj.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=GMT%2B8&characterEncoding=utf8&useSSL=falsejdbc.username=rootjdbc.pas......

行者终成事
8分钟前
0
0
从 Storm 到 Flink,汽车之家基于 Flink 的实时 SQL 平台设计思路与实践

在 2019 年之前,之家的大部分实时业务都是运行在 Storm 之上的。Storm 作为早期主流的实时计算引擎,凭借简单的 Spout 和 Bolt 编程模型以及集群本身的稳定性,俘获了大批用户。下图是实时计...

阿里云官方博客
9分钟前
1
0
网络安全-Day04

2.1.1 什么是SQL注入 2.1.2 注入分类 2.1.3 MySQL手工注入 2.1.4 sqlmap使用 2.1.5 总结 什么是SQL注入 SQL注入漏洞原理 什么是SQL 结构化查询语言(Structured Query Language),是一种特殊目...

Jerry1101
9分钟前
0
0
docker容器内安装yum,vim等命令,以及配置ls指令

使用国内镜像 mv /etc/apt/sources.list /etc/apt/sources.list.bakecho "deb http://mirrors.163.com/debian/ jessie main non-free contrib" >> /etc/apt/sources.listecho "deb http://......

长恭
9分钟前
1
0
超详细的MySQL8.0.17版本安装教程

下载MySQL MySQL的官网地址:https://www.mysql.com/。 如下图所示: 然后点击DOWNLOADS ==> Community,选择MySQL Community Server。如图所示: 滑到页面的最下面,找到Recommended Downl...

彩色泡泡糖
13分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部