java 中数组初始化实例详解

1.数组初始化

定义数组的方式:

  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.在定义数组的同时也可以进行初始化,当创建一个非基本类型的数组时,实际上创建的是引用数组。

 可以用花括号列表的形式来初始化对象数组,有两种形式:

 2.可变参数列表

下图标出了参数列表的使用方式、格式和对传入参数的要求。

2.1 列表参数类型可以不同的情况

可变参数类型为Object,因为所有的类都直接或间接的继承自Object类,可以向上转型为Object,因此参数列表中的类型可以不一致。

输出如下图:

2.2 列表参数类型必须相同的情况

  当然可变参数参数列表也可以作为函数的一个参数传入,如下图。这里的参数列表中的参数类型为string,则所有的参数必须是string类型,与上面的程序不同。

 2.3 可变参数列表中的参数可以是任何类型,包括基本类型

下面是可变参数列表为数组的例子:

从输出结果的最后两行可知,可变参数列表实际使用的是基本类型,不依赖自动包装机制。

2.4 可变参数列表和自动包装机制

但是,我们要知道,可变参数列表和自动包装机制可以“共处”,如下图:

2.5 可变参数列表与函数重载 

可变参数列表使重载过程变得复杂:

在上面的所有带参数的函数调用,编译器都会使用自动包装机制来匹配重载的方法,然后调用最匹配的方法。但是不使用使用参数来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)

那么,如何解决这个问题呢?

可以尝试着在某个方法中增加一个非可变参数来解决该问题。

可是,程序仍然无法通过编译,还是报上面同样的错误。

但是,当我们在给这两个函数都添加一个非可变参数,问题就可以解决了。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

(0)

相关推荐

  • 老生常谈java中的数组初始化

    数组的初始化可以分为两种: 1.静态初始化 2.动态初始化 静态初始化: 例: String[] str = new String[]{"A","B","C"}; String str[] = new String[]{"A","B","C"}; String str = {"A","B","C"}; 动态初始化: 例: Str

  • Java 数组声明、创建、初始化详解

    一维数组的声明方式: type var[]; 或type[] var; 声明数组时不能指定其长度(数组中元素的个数), Java中使用关键字new创建数组对象,格式为: 数组名 = new 数组元素的类型 [数组元素的个数] 实例: TestNew.java: 程序代码: public class TestNew { public static void main(String args[]) { int[] s ; int i ; s = new int[5] ; for(i = 0 ; i

  • Java编程中二维数组的初始化和基本操作实例

    Java二维数组的声明和初始化 1.二维数组可以看成以数组为元素的数组: 2.Java中二维数组的声明和初始化应按照从高维到低维的顺序进行. 实例: 静态初始化: Array2.java: 程序代码 public class Array2 { public static void main(String args[]) { int a[][] = {{1,2},{3,4,5,6},{7,8,9}} ; for(int i=0 ; i <a.length ; i++) { for(int j=0

  • Java中一维二维数组的静态和动态初始化

    今天我们要开始来讲讲Java中的数组,包括一维数组和二维数组的静态初始化和动态初始化 数组概述: 数组可以看成是多个相同类型数据的组合,对这些数据的统一管理; 数组变量属于引用数据类型,数组也可以看成是对象,数组中的每一个元素相当于该对象的成员变量; 数组中的元素可以是任何数据类型,包括基本数据类型和引用数据类型; 一维数组的声明: 声明方式: 例如; int a [ ]  = new int [3]; Java语言中 声明是不能指定其长度[数组中元素的个数]; 非法声明; int a [5];

  • 关于Java数组声明、创建、初始化的相关介绍

    本文讲述了Java数组的几个相关的方面,讲述了对Java数组的声明.创建和初始化,并给出其对应的代码. 一维数组的声明方式:type var[]; 或type[] var; 声明数组时不能指定其长度(数组中元素的个数), Java中使用关键字new创建数组对象,格式为:数组名 = new 数组元素的类型 [数组元素的个数] 实例:TestNew.java: 程序代码: public class TestNew { public static void main(String args[]) {

  • Java数组声明、创建、初始化基础

    一维数组的声明方式: type var[]; 或type[] var; 声明数组时不能指定其长度(数组中元素的个数), Java中使用关键字new创建数组对象,格式为: 数组名 = new 数组元素的类型 [数组元素的个数] 实例: TestNew.java: 程序代码: public class TestNew { public static void main(String args[]) { int[] s ; int i ; s = new int[5] ; for(i = 0 ; i

  • java 中数组初始化实例详解

    1.数组初始化 定义数组的方式: int[] arr1; 或  int arr1[]; 数组初始化 通过上边的定义,我们只是得到了一个数组的引用.这时已经为引用分配了存储空间,但是还没有给数组对象本身分配任何空间.想要给数组对象分配存储空间,必须使用初始化表达式. a.在数组创建的地方进行初始化,如: int[] arr1 = {1,2,3,4,5}; 这种方式等价于使用new来进行存储空间分配. b.给数组的引用赋值,如: int[] arr1 = {1,2,3,4,5}; int[] arr

  • Java中File的实例详解

    Java中File的实例详解 File 代表文件或者目录的类 构造函数 File(File parent,String child)---代表了指定父目录下的指定的子文件或者子目录 File(String pathname)---代表了指定路径对应的文件或者目录对象 重要方法 创建 createNewFile()---只能用来创建文件,并且一次只能创建一个文件,要求文件存储的目录必须真实存在 mkdir()---只能用来创建目录,不能用来创建多层目录 mkdirs()---创建多层目录 删除 d

  • 浅谈JAVA中输入输出流实例详解

    java语言的输入输出功能是十分强大而灵活的,美中不足的是看上去输入输出的代码并不是很简洁,因为你往往需要包装许多不同的对象.在Java类库中,IO部分的内容是很庞大的,因为它涉及的领域很广泛:标准输入输出,文件的操作,网络上的数据流,字符串流,对象流,zip文件流....本文的目的是为大家介绍JAVA中输入输出流实例详解. 流的层次结构 定义:        java将读取数据对象成为输入流,能向其写入的对象叫输出流.结构图如下: 1.输入输出: 输入/输出(Input/Output)是指对某

  • java 中匿名内部类的实例详解

    java 中匿名内部类的实例详解 原来的面貌: class TT extends Test{ void show() { System.out.println(s+"~~~哈哈"); System.out.println("超级女声"); } TT tt=new TT(); tt.show(); 只是说我们这里采用的是匿名的形式来处理. 重写了Test的show()方法,在重写好了以后,又调用了重写后的show()方法 实现代码: package cn.com; c

  • java 中List删除实例详解

    java 中List删除实例详解 1.循环删除List中的元素 public static void main(String[] args) { List<String> t=new ArrayList<String>(); for (int i = 0; i < 10; i++) { t.add(""+i+""); } System.out.println("原有的List:"+t.toString()); for

  • java 中内部类的实例详解

    java 中内部类的实例详解 一:内部类可直接访问外部类的成员变量,包括外部类私有的成员变量 二:外部类要访问内部类的成员变量,需要建立内部类的对象 class Outer{ int x=110; public void show(){ System.out.println("外部类的x="+x); } public void showInner(){ Inner inner=new Inner(); inner.show(); System.out.println(inner.x);

  • Java中泛型使用实例详解

    Java中泛型使用 泛型作用: 泛型:集合类添加对象不用强转 反射机制:将泛型固定的类的所有方法和成员全部显示出来 核心代码: ArrayList<Ls> ff=new ArrayList()<Ls>; Ls ls1=new Ls("薯片",5f); ff.add(ls1); Ls cls=ff.get(0);//这里不再需要强转 代码实例: 说明:这是非泛型的代码,集合类中调用对象时需要强转 import java.util.*; public class L

  • Java中equals()方法实例详解

    目录 equals()在哪里 Java中重写的equals() 在Java中比较的推荐方法 为什么要在我们自己的类中重写equals() 重写equals()的规范 重写equals()可能的误区 一般的equals()写法 附:java中equals()方法的正确使用 总结 equals()在哪里 首先我们知道Java中Object类是所有类的父类,它里面定义了equals()方法: public boolean equals(Object obj) { return (this == obj

  • Java 生成随机字符串数组的实例详解

    Java 生成随机字符串数组的实例详解 利用Collections.sort()方法对泛型为String的List 进行排序.具体要求: 1.创建完List<String>之后,往其中添加十条随机字符串 2.每条字符串的长度为10以内的随机整数 3.每条字符串的每个字符都为随机生成的字符,字符可以重叠 4.每条随机字符串不可重复 将涉及到的知识有: String.StringBuffer.ListArray.泛型.Collections.sort.foreach.Random等相关知识,算是

  • java 中 阻塞队列BlockingQueue详解及实例

    java 中 阻塞队列BlockingQueue详解及实例 BlockingQueue很好的解决了多线程中数据的传输,首先BlockingQueue是一个接口,它大致有四个实现类,这是一个很特殊的队列,如果BlockQueue是空的,从BlockingQueue取东西的操作将会被阻断进入等待状态,直到BlockingQueue进了东西才会被唤醒.同样,如果BlockingQueue是满的,任何试图往里存东西的操作也会被阻断进入等待状态,直到BlockingQueue里有空间才会被唤醒继续操作.

随机推荐