Java总结(14) 静态导入 可变长参数

本文介绍了Java中静态导入的基本概念、使用方法及注意事项,并探讨了静态导入的利弊。此外,还讲解了Java 1.5新增的可变参数特性及其使用方式。


静态导入概述:

import语句可以导入一个类或某个包中的所有类
import static语句导入一个类中的某个静态方法或所有静态方法

举例: 

import static java.lang.Math.sin;
import static java.lang.Math.*; 

使用方法 

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);
             }
     } 

注意事项:  

假如你决定使用静态导入特性,推荐单独地导入常量名,而不要使用通配符。因为这样做可以让人知道常量的来源。 
比如说在下面的代码片断中,一个开发人员查看了代码之后不知道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!
如果一个本地方法,和一个静态导入的方法有着相同的名字,那么本地方法被调用。
谨慎地使用静态导入。因为静态导入使得类方法和类变量的定义位置变得模糊,所以加大了理解代码的难度。
使用静态导入的原则是:限制静态导入的使用,不要在应用程序中普遍使用静态导入。

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

静态导入使您不 用提供类名,这样做可以偷点儿懒,但也引入了不必要的混淆。正如 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;

Java 可变参数 

Java1.5增加了新特性:可变参数:适用于参数个数不确定,类型确定的情况,java把可变参数当做数组处理。注意:可变参数必须位于最后一项。当可变参数个数多余一个时,必将有一个不是最后一项,所以只支持有一个可变参数。因为参数个数不定,所以当其后边还有相同类型参数时,java无法区分传入的参数属于前一个可变参数还是后边的参数,所以只能让可变参数位于最后一项。

可变参数的特点:

(1)、只能出现在参数列表的最后; 
(2)、...位于变量类型和变量名之间,前后有无空格都可以;
(3)、调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中一数组的形式访问可变参数。
public class Varable {
 public static void main(String [] args){
  System.out.println(add(2,3));
  System.out.println(add(2,3,5));
 }
 public static int add(int x,int ...args){
  int sum=x;
  for(int i=0;i<args.length;i++){
   sum+=args[i];
  }
  return sum;
 }
}



评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值