【JAVA学习笔记】静态导入

简介:

1.使用方法 
 package tips; 
 public interface Constants { 
 public static final int PORT_NUMBER = 90; 
 public static final String APP_NAME = "DOOLY"; 
 public static class StaticNestedClass {}//子类 
 } 
 通过使用 import static,就可以不用指定 Constants 类名而直接使用静态成员,包括静态方法。 例如: 
 import static tips.Constants.*; 
 public class StaticImportTip { 
 public static void main(String []args) { 
 System.out.println(PORT_NUMBER); 
 System.out.println(APP_NAME); 
 System.out.println(StaticNestedClass.class); 
 } 
 }

2.注意事项 
 假如你决定使用静态导入特性,推荐单独地导入常量名,而不要使用通配符。因为这样做可以让人知道常量的来源。 
 比如说在下面的代码片断中,一个开发人员查看了代码之后不知道DEFAULT_URL 和PORT_NUMBER从哪个类中导入的。 
 import static tips.Constants.*;//注意是完全路径 
 import static tips.gen.App.*; 
 public class StaticImportTip { 
 public static void main(String []args) { 
 System.out.println(PORT_NUMBER); 
 System.out.println(DEFAULT_URL); 
 } 
 } 
 假如导入语句如下: 
 import static tips.Constants.PORT_NUMBER; 
 import static tips.gen.App.DEFAULT_URL; 
 那么常量的来源就很明显了。

另外,

● 针对一个给定的包,不可能用一行语句静态地导入所有类的所有类方法和类变量。也就是说,您不能这样编写代码:

     import static java.lang.*;  // this does not compile!

● 如果一个本地方法,和一个静态导入的方法有着相同的名字,那么本地方法被调用。

谨慎地使用静态导入。因为静态导入使得类方法和类变量的定义位置变得模糊,所以加大了理解代码的难度。使用静态导入的原则是:限制静态导入的使用,不要在应用程序中普遍使用静态导入。

3.为什么要用静态导入,后果会怎样,好处又是什么?

静态导入使您不 用提供类名,这样做可以偷点儿懒,但也引入了不必要的混淆。正如 createDate 在何处定 义这个问题。如果您正在编写的某个类,需要调用多个外部类方法(可能几十个甚至更多),这样您或许有了使用静态导入的借口。但是,更好的方法是,弄明白为什么需要这么多的静态调用,或许您需要重新审视类的设计。

使用静态导入的可能理由之一是:简化对多个类常量的调用,而且这些类常量定义在一个地方。假设您创建了多个报表类,而且每个报表类都需要将换行符追加到输出,所以每个报表类都需要用到常 量 NEWLINE , 就像 RosterReporter 中的定义:

static final String NEWLINE = System.getProperty("line.separator");

您不会希望在每个报表类中都重复定义这个常量。所以您可以创建一个新类,这个类的职责就是为了持有常量。稍后,它也可以持有别的常量,例如对任何报表类都适用的页面宽度。

package sis.report;

public class ReportConstant {

   public static final String NEWLINE =

      System.getProperty("line.separator");

}

在典型的报表类中,由于很多地方都需 要使用常量 NEWLINE ,所以您可以增加一个静态导入,这样可以使您的代码看起来干净 一些 :

package sis.report;

import junit.framework.TestCase;

import sis.studentinfo.*;

import static sis.report.ReportConstant.NEWLINE;




本文转自gnuhpc博客园博客,原文链接:http://www.cnblogs.com/gnuhpc/archive/2012/12/17/2822331.html,如需转载请自行联系原作者

相关文章
|
2月前
|
监控 负载均衡 Dubbo
|
3月前
|
前端开发 Java 数据安全/隐私保护
Java学习—GUI编程学习笔记
Java学习—GUI编程学习笔记
|
4月前
|
存储 缓存 安全
《java核心技术36讲》学习笔记-------杨晓峰(极客时间)
《java核心技术36讲》学习笔记-------杨晓峰(极客时间)
56 0
|
14天前
|
Java 应用服务中间件 Maven
使用IDEA搭建SpringMVC环境,Maven导入了依赖,但是运行报错 java.lang.ClassNotFoundException
使用IDEA搭建SpringMVC环境,Maven导入了依赖,但是运行报错 java.lang.ClassNotFoundException
12 1
|
1月前
|
存储 前端开发 Java
java学习笔记
java学习笔记
61 0
|
3月前
|
Java Python
java中如何直接导入println()
java中如何直接导入println()
36 0
|
3月前
|
XML Java 数据格式
Spring5学习笔记——狂神说Java
Spring5学习笔记——狂神说Java
|
4月前
|
数据采集 缓存 分布式计算
java并发编程实践——王宝令(极客时间)学习笔记
java并发编程实践——王宝令(极客时间)学习笔记
37 0
|
3天前
|
安全 Java 调度
Java线程:深入理解与实战应用
Java线程:深入理解与实战应用
20 0
|
21小时前
|
消息中间件 缓存 NoSQL
Java多线程实战-CompletableFuture异步编程优化查询接口响应速度
Java多线程实战-CompletableFuture异步编程优化查询接口响应速度