当前位置: 首页 > news >正文

import static和import的区别(转)

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

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

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

 

例子

  在Java 5中,import语句得到了增强,以便提供甚至更加强大的减少击键次数功能,虽然一些人争议说这是以可读性为代价的。这种新的特性成为静态导入。
  当你想使用static成员时,可以使用静态导入(在API中的类和你自己的类上,都可以使用该特性)。下面是静态导入前后的代码实例:

  在静态导入之前:

1 public class TestStatic { 
2     public static void main(String[] args) { 
3         System.out.println(Integer.MAX_VALUE); 
4         System.out.println(Integer.toHexString(42)); 
5     } 
6 }

 

   在静态导入之后:

1 import static java.lang.System.out; 
2 import static java.lang.Integer.*; 
3  
4 public class TestStaticImport { 
5     public static void main(String[] args) { 
6         out.println(MAX_VALUE); 
7         out.println(toHexString(42)); 
8     } 
9 }

 

  两个类都产生相同的输出:

2147483647
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方法上进行静态导入。

 

转自:http://www.cnblogs.com/xd502djj/archive/2012/06/18/2553925.html

 

相关文章:

  • 程序员再回首
  • MYSQL坑爹的UPDATE子查询,UPDATE时避免使用子查询
  • R数据可视化----ggplot2之标度、坐标轴和图例详解
  • 深入解析SQL Server并行执行原理及实践(上) ---高继伟
  • 关于在a标签中添加点击事件的一些问题
  • Hbase 布隆过滤器BloomFilter介绍
  • E: Sub-process /usr/bin/dpkg returned an error code (1)错误解决
  • Maven属性(properties)标签的使用
  • 微信小程序开发(1) 天气预报
  • 爱情的餐桌-作家张小娴
  • NodeJs之fs的读写删移监块
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 和公务员谈恋爱是一种什么样的感受
  • 使用Spire.Doc组件利用模板导出Word文档
  • win7 一个电脑接入多个显示器
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • Idea+maven+scala构建包并在spark on yarn 运行
  • MySQL的数据类型
  • session共享问题解决方案
  • v-if和v-for连用出现的问题
  • 解析 Webpack中import、require、按需加载的执行过程
  • 理解在java “”i=i++;”所发生的事情
  • 前端面试总结(at, md)
  • 微服务核心架构梳理
  • 为视图添加丝滑的水波纹
  • 一个JAVA程序员成长之路分享
  • 一起来学SpringBoot | 第三篇:SpringBoot日志配置
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • 函数计算新功能-----支持C#函数
  • !!java web学习笔记(一到五)
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • (1) caustics\
  • (day 12)JavaScript学习笔记(数组3)
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (八)Spring源码解析:Spring MVC
  • (补)B+树一些思想
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (转) Android中ViewStub组件使用
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息
  • .NET Conf 2023 回顾 – 庆祝社区、创新和 .NET 8 的发布
  • .NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例
  • .Net(C#)自定义WinForm控件之小结篇
  • .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表
  • .NetCore 如何动态路由
  • .NetCore部署微服务(二)
  • .net操作Excel出错解决
  • .net和jar包windows服务部署
  • .NET开源项目介绍及资源推荐:数据持久层
  • ?.的用法
  • [2008][note]腔内级联拉曼发射的,二极管泵浦多频调Q laser——