Java之路(四)数组初始化
来源:互联网 发布:墙纸设计软件 编辑:程序博客网 时间:2024/06/05 04:40
本文主要讲数组的初始化方法、可变参数列表以及可变参数列表对函数重载的影响。
数组初始化
定义数组的方式:
int[] arr1; 或 int arr1[];
数组初始化
通过上边的定义,我们只是得到了一个数组的引用。这时已经为引用分配了存储空间,但是还没有给数组对象本身分配任何空间。想要给数组对象分配存储空间,必须使用初始化表达式。
a.在数组创建的地方进行初始化,如:
int[] arr1 = {1,2,3,4,5};
这种方式等价于使用new来进行存储空间分配。
b.给数组的引用赋值,如:
int[] arr1 = {1,2,3,4,5};int[] arr2;arr2 = arr1;
复制的只是一个引用。如下图:
所有的数组都有一个固定成员length,通过它可以知道数组元素的个数。
c.当不确定数组元素的个数时的数组创建
当数组元素个数不确定时,我们可以直接使用new在数组里创建元素。注意new可以应用于基本类型的数组,但是不能应用于单个的基本类型。
d.在定义数组的同时也可以进行初始化,当创建一个非基本类型的数组时,实际上创建的是引用数组。
可以用花括号列表的形式来初始化对象数组,有两种形式:
可变参数列表
下图标出了参数列表的使用方式、格式和对传入参数的要求。
列表参数类型可以不同的情况
可变参数类型为Object,因为所有的类都直接或间接的继承自Object类,可以向上转型为Object,因此参数列表中的类型可以不一致。
输出如下图:
列表参数类型必须相同的情况
当然可变参数参数列表也可以作为函数的一个参数传入,如下图。这里的参数列表中的参数类型为string,则所有的参数必须是string类型,与上面的程序不同。
可变参数列表中的参数可以是任何类型,包括基本类型
下面是可变参数列表为数组的例子:
从输出结果的最后两行可知,可变参数列表实际使用的是基本类型,不依赖自动包装机制。
可变参数列表和自动包装机制
但是,我们要知道,可变参数列表和自动包装机制可以“共处”,如下图:
可变参数列表与函数重载
可变参数列表使重载过程变得复杂:
在上面的所有带参数的函数调用,编译器都会使用自动包装机制来匹配重载的方法,然后调用最匹配的方法。但是不使用使用参数来f()时,编译器会二义性错误:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The method f(Character[]) is ambiguous for the type OverloadingVarargs
at thingjinjava.OverloadingVarargs.main(OverloadingVarargs.java:25)
那么,如何解决这个问题呢?
可以尝试着在某个方法中增加一个非可变参数来解决该问题。
可是,程序仍然无法通过编译,还是报上面同样的错误。
但是,当我们在给这两个函数都添加一个非可变参数,问题就可以解决了。
- Java之路(四)数组初始化
- Java之路----数组初始化
- Java学习之路0717(四)(数组、字符串)
- Java基础语法之数组初始化值
- java之二维数组的初始化
- C++转Java自学之路(四)文档注释、静态代码块与对象初始化过程
- struts2源码探索之初始化(四)
- Java学习笔记之流程控制,数组(四)
- (四)Java程序设计之数组和ArrayList类
- Java继承_初始化顺序(四)
- 【java】JAVA数组初始化
- java基础入门之四(数组+排序)
- java基础学习之数组 四
- 重读《Java编程思想》之四:初始化与清理
- Java基础知识 四 (数组)
- java数组(定义、赋值和初始化)
- Java数组初始化
- Java数组初始化
- 程序员面试金典: 9.9 递归和动态规划 9.8求n分可以由25分,10分,5分,1分的硬币的表示方法
- CS294--深度强化学习
- 看过的书
- Redis集群Codis安装
- 野生程序员这样考PM
- Java之路(四)数组初始化
- C/C++ OpenCV均值滤波
- JAVA设计模式之单例模式
- zookeeper入门必读
- 【Unity3D入门教程】Unity3D播放音频和视频
- 深入理解python元类
- tensorflow的数据输入
- Contractive Auto-Encoders的简单了解
- ftp