1数组的定义
数组是一组相关数据的集合,一个数组实际上就是一连串的变量,数组按照使用可以分为一维数组、二维数组、多维数组。
数组的优点:
不使用数组定义100个整型变量:int i1;int i2;…int i100
使用数组定义:int i[100]
1.1一维数组
一维数组可以存放上千万个数据,并且这些数据的类型是完全相同的。
要使用Java的数组,必须经过两个步骤:(1)声明数组、(2)分配内存给该数组。这两个步骤的语法如下。
(1)声明形式一:
声明一维数组:数据类型 数组名[] = null ;
分配内存给数组:数组名 = new 数据类型[长度] ;
(2)声明形式二:
声明一维数组:数据类型[] 数组名= null
1.1.1声明数组:
(1)int score[] = null ; à null表示引用数据类型的默认值
(2)为数组开辟空间 score = new int[3];
³数组操作中,在栈内存中保存的永远是数组的名称,只开辟了栈内存空间数组是永远无法使用的,必须有指向的堆内存才可以使用,要想开辟新的堆内存则必须使用new关键字,之后只是将此堆内存的使用权交给了对应的栈内存空间,而且一个堆内存空间可以同时被多个栈内存空间指向 。
为数组中的元素赋值并进行输出
public class ArrayDemo02 {
public static void main(String[] args) {
int score[] = null; // 声明数组,但未开辟堆内存
score = new int[3]; // 为数组开辟堆内存空间,大小为3
for (int x = 0; x < 3; x++) { // 为数组中的每个元素赋值
score[x] = x * 2 + 1 ; // 为每一个元素赋值
}
for (int x = 0; x < 3; x++) { // 使用循环依次输出数组中的全部内容
System.out.println("score[" + x + "] = " + score[x]);
}
}
}
取得数组长度
在Java中取得数组的长度(也就是数组元素的长度)可以利用“数组名称.length”完成,如下面的格式:
数组名称.length à 返回一个int型数据
public class ArrayDemo03 {
public static void main(String[] args) {
int score[] = new int[3]; // 声明并实例化数组
System.out.println("数组长度为" + score.length); // 求出数组长度
}
}
数组的静态初始化
数组的内容分为动态初始化和静态初始化两种。既可以采用先声明数组之后为数组中的每个内容赋值的方式完成,也可以通过数组静态初始化在数组声明时就指定其具体内容。
如果想直接在声明时就给数组赋初值,可以利用大括号完成。只要在数组的声明格式后面再加上初值的赋值即可,如下面的格式:
数据类型 数组名[] = {初值0 , 初值1 , … , 初值n}
如下代码数组的静态初始化
public class ArrayDemo04 {
public static void main(String[] args) {
int score[] = {91,92,93,94,95,96}; // 使用静态初始化声明数组
for (int x = 0; x < score.length; x++) { // 循环输出
System.out.println("score["+x+"] = " + score[x]) ;
}
}
}
1.2 二维数组
如果说可以把一维数组当成几何中的线性图形,那么二维数组就相当于是一个表格。
二维数组声明的方式和一维数组类似,内存的分配也一样是用new这个关键字。其声明与分配内存的格式如下所示:
动态初始化:
数据类型 数组名[][] ;
数组名 = new 数据类型[行的个数][列的个数] ;
动态初始化:
数据类型 数组名[][] = new 数据类型[行的个数][列的个数] ;
如, 声明整型数组score,同时为其开辟一块内存空间
int score[][] = new int[4][3] ;
整型数据score可保存的元素有4*3 = 12个,而在Java中,int数据类型所占用的空间为4个字节,因此该整型数组占用的内存共为4*12 = 48个字节
1.2.1二维数组的定义及使用
public class ArrayDemo08 {
public static void main(String[] args) {
int score[][] = new int[4][3]; // 声明并实例化二维数组
score[0][1] = 30 ; // 为数组中的部分内容赋值
score[1][0] = 31 ; // 为数组中的部分内容赋值
score[2][2] = 32 ; // 为数组中的部分内容赋值
score[3][1] = 33 ; // 为数组中的部分内容赋值
score[1][1] = 30 ; // 为数组中的部分内容赋值
for (int i = 0; i < score.length; i++) { // 外层循环行
for(int j=0;j<score[i].length;j++){// 内层循环列
System.out.print(score[i][j] + "\t");
}
System.out.println("") ; // 换行
}
}
}
1.2.2二维数组静态初始化
格式:
数据类型 数组名[][] = { {第0行初值},{第1行初值},…{第n行初值},};
声明二维数组:
int score[][] = { { 67, 61 }, { 78, 89, 83 }, { 99, 100, 98, 66, 95 } };
public class ArrayDemo09 {
public static void main(String[] args) {
// 静态初始化一个二维数组,每行的数组元素个数不一样
int score[][] = { { 67, 61 }, { 78, 89, 83 }, { 99, 100, 98, 66, 95 } };
for (int i = 0; i < score.length; i++) { // 外层循环输出行
for (int j = 0; j < score[i].length; j++) {// 内存循环输出列
System.out.print(score[i][j] + "\t");// 输出每一个元素
}
System.out.println(""); // 换行
}
}
}
2 方法的声明及使用
2.1方法的定义
方法就是一段可重复调用的代码段,例如:有某段长度约100行的代码,要在多个地方使用此段代码,如果在各个地方都重复编写此部分代码的话,则肯定会比较麻烦,而且此部分代码如果修改的话也比较困难,所以此时可以将此部分代码定义成一个方法,以供程序反复调用。
方法的定义格式:
public static 返回值类型 方法名称(类型 参数1,类型 参数2,…){
方法的主体
程序语句 ;
[return 表达式];
}
在本节中定义的方法,因为其可以直接使用主方法(main())调用,所以将方法声明处加上了public static两个关键字
示例定义一个方法,在主方法中进行调用
public class DemoMethod01 {
public static void main(String[] args) {
printInfo() ; // 调用printInfo()方法
printInfo() ; // 调用printInfo()方法
printInfo() ; // 调用printInfo()方法
System.out.println("Hello World!") ;
}
// 此处由于此方法是由main方法直接调用所以一定要加上public static
public static void printInfo() { // 此处方法没有返回值
char c[] = {'H','e','l','l','o', ',','L','X','H'}; // 定义一个字符数组
for (int x = 0; x < c.length; x++) { // 循环输出
System.out.print(c[x]) ;
}
System.out.println("") ; // 换行
}
}
注意:方法命名规范要求
定义类的时候,类的命名规范:“全部单词的首字母必须大写”。那么在定义方法的时候也是有命名规范要求的:“第一个单词的首字母小写,之后每个单词的首字母大写”,那么这就是方法的命名规范,之前的printInfo()方法也是按此规范定义的。这一点希望读者在日后的开发中一定要养成好的习惯。
方法的重载:方法的重载就是方法名称相同,但参数的类型和参数的个数不同,通过传递参数的个数及类型不同以完成不同功能的方法调用。 (方法的重载一定只是在参数上的类型或个数不同)
return结束一个方法
在java的方法定义中,可以使用return语句直接结束方法
public class MethodDemo05 {
public static void main(String[] args) {
System.out.println("1、调用fun()方法之前。") ;
fun(10) ; // 调用fun()方法
System.out.println("2、调用fun()方法之后。") ;
}
public static void fun(int x) {
System.out.println("3、进入fun()方法。") ;
if(x==10){
return ; // 结束方法,返回被调用处
}
System.out.println("4、正常执行完fun()方法。") ;
}
}
方法的递归调用
递归调用是一种特殊的调用形式,是方法自己调用自己