Java day04(数组与函数)
数组和函数
在执行程序的时候,经常要存储大量的数据,如果我们要读入100个数,并对其进行一系列操作,必须声明100个变量,这样会出现很多的变量的声明,为了解决这种问题,Java中提供了一种数组的数据结构。(array)
数组常见的有一维的和二维的,数组一旦被创建,它的大小是固定的。使用一个数组引用变量,通过下标来访问数组中的元素。
数组是用来存储数据的集合,数组其实是一个存储具有相同数据类型的变量的集合。
数组
1.数组的声明
声明数组变量的时候并不会在内存中给数组分配任何空间。只是创建一个对数组的引用
的存储位置。如果变量不包含对数组的引用,这个变量值为null。如果数组已经被创建
才能对其进行分配元素,一般用new操作符对数组进行创建。
元素类型 [ ] 数组引用变量
数据类型 [ ] [ ] 数组名
Int [ ] arr;
int [] [ ] matrix ;
2.数组的创建
数组变量 = new 元素类型 [ 数组的大小];
Arr = new int [ size];
也可以将数组的声明和创建放在一起。
Int [ ] arr = new int [size];
数组在内存创建的过程:首先在栈内存中声明一个数组变量,让该变量指向堆内存中数组的首地址。数组创建后数组中的默认值为0。数组刚开始是从角标0开始计数的。
3.数组的初始化
matrix = new int [ 5 ][ 5 ]
元素类型 [ ] 数组引用变量 = {值1,值2,……};
Int[ ] arr = {1,2,4,5,6,7};
等价于
Int[ ] arr = new int [6 ];
arr[0] = 1;
arr[1] = 2;
arr[2] = 4;
arr[3] = 5;
arr[4] = 6;
arr[6] = 7;
在数组中一般用for循环对数组进行初始化。
double max= myList [ 0 ] ;//找数组中最大的数
for ( int i= 1 ; i < myList . length ; i + + ) {
if ( myList [ ij > max )
max= myList [ i ] ;
}
4.数组的复制
在 Java 中,可以使用賦值语句复制基本数据类型的变量 , 但不能复制数组 。 将一个数组变童賦值给另一个数组变量,实际上是将一个数组的引用复制给另一个变量 , 使两个变量都指向相同的内存地址 。
复制数组有三种方法 :
1 ) 使用循环语句逐个地复制数组的元素。
2 ) 使用 System 类中的静态方法 arrayCopy 。
3 ) 使用 clone 方法复制数组
int [] sourceArray - { 2 , 3 , 1 , 5 , 10 } ;
int [ ] targetArray = new int [ sourceArray . length ] ;
for (int 1 = 0 ; i < sourceArray .length;i + + ) {
targetArray [ i ] = sourceArray [ i ] ;
}
获取二维数组的长度
二维数组实际上是一个一维数组,它的每一个元素都是一个一维数组。数组x的长度是数组中元素的个数,可以用x.length获取数组的长度,元素x[0],x[1],也是一个数组,可以用x[0].length获取长度。二维数组是一个一维数组,它的每一个元素是另一个一维数组。
函数
函数在Java语言中又称为方法, 方法可以用于定义可重用的代码以及组织和简化编码 。
1.函数的定义
修饰符 返回值类型 函数名 ( 参数列表 ) {
/ / 函数体 ;
}
Public static void java(int x,int y){
}
2.方法的调用
调用方法又两种途径,一种是有返回值的方法,一种是返回值为void的调用,对带返回的方法而言,return 语句是必需的 。
“ 定义方法 ”和 “ 声明变量 ” , 两者的细微差别 。 定义是指被定义的条目是什么 , 而声明通常是指为被声明的条目分配内存来存储数据 。
//方法求和
class MethodDemo
{
public static void main(String[] args)
{
int a = 3;
int b = 4;
int sum = getSum(a,b);
System.out.println("sum="+sum);
}
public static int getSum(int i , int j)
{
return i + j;
}
}
函数在程序中运行时,首先,主函数进入栈内存,开始执行main中的代码,开始给变量a,b开辟空间存放3和4。当程序执行到int sum = getSum(a,b);时,会将getSum函数加载进栈内存中,同样在getSum所属的栈区域中开辟i和j变量空间,接受main方法中的getSum(a,b);传递的值。然后执行getSum函数中的代码,当getSum函数执行结束后,函数会出栈(弹栈)。程序回到main方法的调用语句int sum =getSum(a,b);处,并将getSum方法执行完返回的结果赋值给sum变量,程序继续往下执行。打印sum的值。
3.方法的重载
重载的概念
重载方法使得你可以使用同样的名字来定义不同方法 , 只要它们的签名是不同的
在同一个类中,允许存在一个以上的同名函数,只要它们的参数个数或者参数类型不同
即可,这时就形成了重载。重载和返回值类型无关
void show(int a,float b,char c){}
下列哪些函数和给定函数重载了
a.int show(int x,float y,char z)//没有重载,这个函数不允许和给定函数存在于
同一个类中。因为会产生调用的不确定性。
b.void show(float b,int a,char c)/重载了,参数类型不同。
c.void show(int c,float a,char b)//没有重载,和给定函数一样。不允许存在。
d.void show(int a,int b,int c)//重载了,因为类型不同。
e.double show()//重载了,因为个数不同
4.变量的作用域
变量的范围是程序中该变量可以被引用的部分。
方法内定义的变量被称为局部变量。
局部变量的作用范围从声明开始,直到包含它的块结束。
局部变量必须声明才可以使用。
方法的参数范围涵盖整个方法。参数实际上是一个局部变量。
for循环的初始化部分声明的变量,其作用范围在整个循环。