zoukankan      html  css  js  c++  java
  • 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;
     }
    }
    

    然而,使用可变参数时,要注意几个问题:

    1) 可变参数方法与数组参数方法重载时

    //带数组参数的方法
    	public void hello(String[] params) {
    		System.out.println("执行带数组参数的方法,数组长度为:" + params.length);
    	}
    
    	//带可变参数的方法
    	public static void hello(String... params) {
    		System.out.println("执行带可变参数的方法,参数个数为:" + params.length);
    	}

    编译错误:Duplicate method hello(String[])

    2)可变参数方法与无参数方法重载时

    	//带可变参数的方法
    	public static void hello(String... params) {
    		System.out.println("执行带可变参数的方法,参数个数为:" + params.length);
    	}
    
    	//不带参数的方法
    	public static void hello() {
    		System.out.println("执行不带参数的方法");
    	}
    
    	public static void main(String[] args) {
    		hello(); //执行不带参数的方法
    	}

    3)重载情况三:可变参数的类型和前面非可变参数类型一样

    	// 带可变参数的方法
    	public static void hello(String... params) {
    		System.out.println("执行带可变参数的方法,参数个数为:" + params.length);
    	}
    
    	// 带固定参数和可变参数
    	public void hello(String param1, String... params) {
    		System.out.println("执行带固定参数和可变参数的方法,参数个数为:" + params.length);
    	}

    当用一下代码调用时,下面代码所在行报编译出错The method hello(String[]) is ambiguous

    hello("1", "2", "3");

    4) 可变参数方法与可变参数方法重载时

    	static void f(float i, Character... args) {
    		System.out.println("first");
    	}
    
    	static void f(Character... args) {
    		System.out.print("second");
    	}
    

    当用下面代码时候

    f(1,'2');

    没有问题

    但当用下面代码调用时

    f('1','2');

    该行代码报编译错误The method f(float, Character[]) is ambiguous

    基本类型由低级到高级分别为 (byte,short,char)--int--long--float--double,低级变量可以直接转换为高级变量,

     


     

     


     

  • 相关阅读:
    10月17日学习日志
    10月10日学习日志
    10月15日学习日志
    ERP临时汇报打草稿
    锁定字段的几个方法
    Mvc model验证总结
    Html5 WebSocket详细介绍
    C#连接Oracle数据库的方法(System.Data.OracleClient、Oracle.DataAccess.Client也叫ODP.net、Oracle.ManagedDataAccess.dll)
    MVC Ajax调用Action时OnActionExecuting RedirectResult 无法跳转的处理办法
    C#调用存储过程中事务级临时表返回DataTable列乱序解决办法
  • 原文地址:https://www.cnblogs.com/xiaoqiangzhaitai/p/5637606.html
Copyright © 2011-2022 走看看