您的位置:首页 > 编程语言 > Java开发

Java 数组、方法的定义和使用

2019-03-13 23:02 134 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_44057443/article/details/88543708

一、Java 数组,方法学习思维导图

 二、数组

数组是用一个标识符(变量名)和一组下标来代表的一组具有相同数据类型的数据元素的集合。这些数据元素在计算机中存储中占用一片连续的存储空间,其中每个数组元素在数组中的位置是固定的,可以通过下标的编号加以区别,可以通过标识符和下标访问每一个数组元素。

在 Java 中,数组是一个特殊的对象,属于引用类型,数组中元素序号从 0 开始,通过下标操作符引用

1、一维数组

(1)一维数组声明:确定数组名 + 数组维度 + 数组元素数据类型

元素的数据类型:Java 中基本数据类型(如 int、char、double等)、引用数据类型(如类(class)、接口(interface)等)。

一维数组定义格式:数据类型 数组名[ ] ;   或   数据类型[ ] 数组名 ;

[code]int arr[] ;//声明一个名为 arr 的整型数组
double[] dArray ;//声明一个名为 dArray 的浮点型双精度数组

(2)一维数组初始化

数组是引用数据类型,要在使用前先初始化再使用,否则会 NullPointerException (运行时异常 RunTimeException )。Java 数组的初始化可以直接指定初值或者用 new 运算符的方式实现。

动态初始化——声明并且开辟空间

数据类型[ ] 数组名称 = new 数据类型 [长度] ;

  • 数组通过下标索引来取得元素,下标默认从0开始。
  • 数组下标超出数组长度,报数组越界异常(运行时异常)。
  • 数组中每个元素都有默认值,默认值是该数据类型默认值。
  • 数组名称.length -> 取得数组长度。 
[code]int arr = new int[3] ;//用 new 初始化 数组 arr ,数组长度为 3

 注:Java 数据类型有默认初始值:整型默认值为 0 ;浮点型默认值为 0.0 ;布尔型默认值为 false ;字符型默认值 \u0000 。

静态初始化——直接指定初值

简化格式:数据类型[ ] 数组名称 = {值,值,...}  ;

完整格式(推荐使用,方便使用匿名数组):数据类型[ ] 数组名称 = new 数据类型{值,值,...} ;

  • 在数组定义时直接设置内容,根据值的个数确定数组长度,且长度不可修改。
  • 匿名数组:没有任何栈内存指向的数组。
[code]int[ ]  data = new int{1,2,3,4} ;//静态初始化完整格式

(3)for-each 循环

JDK1.5 提供 for-each 循环。

for-each 循环适用于数组遍历,仅仅限于数组内容的读取,要修改数组内容还是使用常规的 for 循环。

[code]for(int x : data){
System.out.print(x+" ") ;
}

2、二维数组

动态初始化:数据类型[ ][ ] 数组名称 = new 数据类型[行个数][列个数] ;

[code]int[ ][ ] data = new int[3][4] ;

静态初始化:数据类型[ ][ ] 对象数组 = new 数据类型[ ][ ]{ {值,值,...}, {值,值,...}, ...} ;

[code]int[][] data = new int[][]{{1,2,3},{4,5,6},{7,8,9,10}} ;

 3、数组实用类 Arrays

在 java.util 包中,有一个用于操作数组的实用类——java.util.Arrays。它提供了一种静态方法完成数组的常用操作。

int binarySearch(type[ ] a, type key):用于查找 key 元素在 a 数组中出现的索引。如果数组中不包含 key 元素值,返回 -1 。调用该方法时,要求数组中元素已经按升序排列。

  • 给数组赋值:通过fill方法。

  • 对数组排序:通过sort方法,按升序。

  • 比较数组:通过equals方法比较数组中元素值是否相等。

  • 查找数组元素:通过binarySearch方法能对排序好的数组进行二分查找法操作。

e.g  java.util.Arrays.sort(数组名称) ;  此方法支持所有基本数据类型,内部使用双轴快速排序。

具体使用教程:Arrays

三、方法

1、方法定义及声明

Java中方法的定义(前提:直接在主方法中调用的方法):一段可以被重复调用的代码块。可以与 C语言 中函数类比。

方法声明:

[code]public static 方法返回值 方法名称([参数类型 变量...]){

...

方法体代码 ;//方法体包含具体的语句,定义该方法的功能。

...

return 返回值 ;//如果有返回值

}

举例: 

[code]public class Test1{
public static void main(String[] args){
System.out.println(add(5,5));
}
public static int add(int x,int y){
return x+y;
}
}

 一般方法具体教程:Java 方法

2、方法重载

(1)方法重载定义:方法名称相同,参数的个数、顺序、类型不同,与方法返回值无关。

(2)编码规范:重载函数的返回值类型一定保持相同。

[code]public class Test{
public static void main(String[] args) {
System.out.println(add(5,5));
System.out.println(add(5,5,55));
}
public static int add(int x,int y){
return x+y;
}
public static int add(int x,int y,int z){
return x+y+z;
}
}

根据传递参数的个数调用的方法不同。 

3、方法递归

定义:指的是一个方法自己调用自己的方式。递归方法的特点:

  • 方法必须有递归的结束条件
  •  方法在每次递归处理的时候一定要作出一些变更
[code]public class Test{//递归实现从1到100的叠加
public static void main(String[] args) {
System.out.println(sum(100));
}
public static int sum(int num){
if (num == 1) {
return 1;
}
else {
return num+sum(num-1);
}
}
}

四、数组与方法互操作

(1)方法接收数组

[code]public class ArrayDemo{
public static void main(String[] args) {
int[] data = new int[] {1,2,3,4,5} ;
printArray(data) ; // 其效果等价于 int[] temp = data ;
}
public static void printArray(int[] temp) {
for (int i = 0 ; i<temp.length ; i++) {
System.out.println(temp[i]) ;
}
}
}

(2)方法返回数组

[code]public class ArrayDemo{
public static void main(String[] args) {
int[] data = init() ;
printArray(data) ;
}
// 定义一个返回数组的方法
public static int[] init(){
return new int[] {1,2,3,4,5} ; // 匿名数组
}
public static void printArray(int[] temp) {
for (int i = 0 ; i<temp.length ; i++) {
System.out.println(temp[i]) ;
}
}
}

现在的数组上发生了引用传递,那么就意味着方法在接收数组后也可以修改数组。

(3)方法修改数组

[code]public class ArrayDemo{
public static void main(String[] args) {
int[] data = init() ;
bigger(data) ;
printArray(data) ;
}
// 定义一个返回数组的方法
public static int[] init(){
return new int[] {1,2,3,4,5} ; // 匿名数组
}
// 将数组中每个元素的值扩大5倍
public static void bigger(int[] arr){
for (int i =0 ; i<arr.length ; i++) {
arr[i]*=5 ; // 每个元素扩大5倍
}
}
public static void printArray(int[] temp) {
for (int i = 0 ; i<temp.length ; i++) {
System.out.println(temp[i]) ;
}
}
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: