zoukankan      html  css  js  c++  java
  • J2SE基础夯实系列之静态导入,foreach循环,可变参数

            1:静态导入很简单,例如:
    import static java.lang.Math.*
    

                 这样就可一直接使用Math里面的各种方法,例如abs,而不用使用Math.abs()了。

        

           2:可变参数()

                 首先看例子:

                    

    public class TestVarArgus {  
        public static void dealArray(int... intArray){  
            for (int i : intArray)  
                System.out.print(i +" ");  
              
            System.out.println();  
        }  
          
        public static void main(String args[]){  
            dealArray();  
            dealArray(1);  
            dealArray(1, 2, 3);  
        }  
    }  
              输出是:
        1   
        1 2 3   

               然后是具体解释,转载的,但是找不到原来链接了:

             可变参数能够让一个方法能够使用同一类型的多个参数而不用在编译阶段就确定参数的数目。实际的效果可以通过比较一下下面的代码。为了支持方法参数在运行时刻不确定的情况,对于不支持Varargs的方法,调用方往往需要通过构造一个Collection或者Array,并将可变的参数都加入到Collection或者Array然后再传递给方法。而对于支持Varargs的方法调用者就少了这样的麻烦。这两段完成的完成的功能和最后结果可能并没有多少区别,但从代码的可读性、可维护性方面来比较,支持Varargs的方法明显少了那些拖沓和冗余。另外,如果concatMapStringWithoutVarargs是一个被使用几率很高的方法,支持Varargs的方法在易用性而带来的价值体现就就会更加明显。

    /*******************不使用Varargs***********************************/

       List<String> contentList=newArrayList<String>();

       contentList.add("value1");

       contentList.add("value2");

      concatMapStringWithoutVarargs(prefix,suffix,contentList);

      /*******************************************************/

      

      

       /*******************使用Varargs***********************************/ 

      concatMapStringWithVarargs(prefix,suffix,"value1","valu2");

      /*******************************************************/

     

    使用方法

    变量类型... 变量名

    Varargs参数的定义很简单,以下就是一个使用了可变参数的构造函数

    public Guitar(String builder, String model,String... features); 

    String... features 标志着这个构造函数可以接受可变数目的features变量,下面的两个构造函数使用都是OK的。

    Guitar guitar = newGuitar("Martin", 

                                             "HD-28V", 

                                             "Hot-rodded by Dan Lashbrook", 

                                              "Fossil Ivory Nut", 

                                              "Fossil Ivory Saddle", 

                                               "Low-profile bridge pins"); 

    Guitar guitar = newGuitar("Bourgeois", 

                                             "OMC", 

                                             "Incredible flamed maple bindings on this one.");

    使用者甚至可以不向features传递任何值

    Guitar guitar = newGuitar("Bourgeois", 

                                             "OMC");

    对于Varargs参数的使用如果了解了它的本质,大家对它的使用就会感觉很轻松。事实上编译器会把Varargs参数转换成一个相应类型的数组。例如

    编译器会将public Guitar(String builder, String model, String...features); 解释成

    public Guitar(String builder, Stringmodel, String[]features

    无论是对features进行for循环或是foreach循环都是OK

    for(int i=0;i<features.length;i++){

        String feature=features[i];

        ......

    }

    for (String feature : features) {

        ......

    }

    另外也可以对Varargs参数进行相应的转换

    private List features;

    this.features = java.util.Arrays.asList(features);

    由于可变长的参数支持0N的参数,也就是说方法支持传入参数数目为0的情况,所以开发人员需要考虑到参数个数为0的边际条件。

    public static int max(int... values) {

         if (values.length == 0) {

            thrownew IllegalArgumentException("No values supplied.");

          }

          int max =Integer.MIN_VALUE;

          for (int i :values) {

            if (i> max)

             max = i;

          }

          return max;

    }

     

    使用限制

    在使用Varargs参数的过程中有两点要特别注意的

    1.一个方法只能定义一个Varargs参数,以下的定义方法在编译的时候就通不过。

    public Guitar(String builder, String model,

        String... features, float...stringHeights)

    2. 将可变长度参数只能出现在方法定义的最后面。下面的这个方法定义编译器会提示"The variable argumenttype String of the method concatMapStringWithVarargs must be the last parameter

    public static voidconcatMapStringWithVarargs(Stringprefix, String...features,String suffix)

    总结

       其实可变参数不是一个新鲜的事物,在C语言中的printf函数就已经有这样很好的实现了,java1.5的版本中才提供了类似的功能不能不说已经有点晚,不过迟来总比不来的好。



  • 相关阅读:
    VS 文件编码
    CSS中强大的EM 弹性布局
    编辑器【updating】
    下一代Jquery模板JsRender
    HTML 特殊符号编码对照表
    ASP.NET 文摘 [updating]
    Html5/Html CSS3/css 文摘 [updating]
    在Sublime Text 2中设置任意扩展名文件的默认语法
    Delphi笔记Indy10.5.5 IdTcpServer 与 IdTcpClient Demo 服务器端
    基于silverlight的工作流编辑器
  • 原文地址:https://www.cnblogs.com/allenzhaox/p/3201864.html
Copyright © 2011-2022 走看看