搜档网
当前位置:搜档网 › JAVA中方法的调用时参数的传递方式以及数组

JAVA中方法的调用时参数的传递方式以及数组

知识大纲:
1.方法的调用时参数的传递方式
2.数组

方法的定义
修饰符 返回类型 方法名([参数列表]) [抛出的异常]{
//方法体
}

形参格式:数据类型 参数名
形参的生命周期,
形参就是一种局部变量,它的生命周期只存在于定义
此形参的方法体中。
变量的生命周期,
也只存在于定义此变量的代码块中({})

如:
public void print(){
...
int n = 0; //它的生命周期存在于20 ~25行
for(int i=0;i<10;i++){
//变量i的生命周期只存在于 21 ~23行
}
...
}

实参,实际参数,也是变量,只是方法调用者的叫法。
--
方法调用时参数的传递方式
1.如果参数是基本类型,则采用 值传递(by value)
2.如果参数是对象类型,则采用 引用传递(by ref)

new Random();
new String("hello");

如:
...
public void swap(int a, int b){//a=10,b=20
int tmp = a; //10
a = b; //20
b = tmp; //10
}
...
public void swap(int[] a, int[] b){
/*
int[] tmp = a;
a = b;
b = tmp;
*/
for(int i=0;iint tmp = a[i];
a[i] = b[i];
b[i] = tmp;
}
}

-- 调用者:
...
int i = 10;
int j = 20;
xxx.swap(i,j);
//此时,变量i = , j = ;

--
JVM的内存结构
可以粗略地划为三类:
1.栈区(stack area)
特点:存取速度快,效率高,但是大小必需确定。
不支持空间的动态扩展。
所以,基本类型与引用的变量都是存放在栈区。
int i = 100; //栈区
Scanner scan = ....; //scan存放在栈区

注:在启动JVM时,可以通过 -Xss 来指定
线程栈的大小,单位是 M

2.堆区(heap area)
特点:大小可以动态扩展,也可以动态分配,无需
事先指定大小,使用new运算符来申请。
所以,对象本身都是存放在 堆区的。
如:
String str = new String("Hello");
Random ran = new Random();

注:在启动JVM时,可以通过 -Xms 来指定
初始化堆空间大小,通过 -Xmx 来指定最大
堆空间大小.

3.永久区|代码区(Permanent area)

--
数组(Array)
是数据的"容器"(container),也是一种数据结构。
数组是JAVA的一种对象类型,不是基本类型,但是
数组的元素(element)可以是任意类型。

定义:由一组相同类型、并共享数组名的数据组成的有
序序列。

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

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

数组的特点:
1.共享数组名
2.元素具有相同的数据类型
3.元素是有序的,并且它的存储空间有连续的。
4.数组元素是通过下标来访问的,如:arr[0]
5.数组的长度一旦确定是不变的,下标从0至length-1

如:定义一个长度为10的整型数组
int[] arr1 = new int[10];
只申明:
char[] arr2;

注:数组一旦初始化,即使没有给

元素赋值,则每个
元素都有默认值。
byte,short,int,long 都是 0
float,double 都是 0.0
boolean 都是 false
char 都是 '\u0000'
对象类型 都是 null

如:
int[] arr1 = new int[5];
//
System.out.println(arr1[2]); //0
System.out.println(arr1[5]); //运行错误,下标越界
//给元素赋值
for(int i=0;iarr1[i] = 10+i;
}
//如果数组的元素没有规律时,则只能一个一个赋值。
我们可以在定义数组时,直接赋值
int[] arr2 = new int[]{100,20,1,37,46};
也可以简写成:
int[] arr2 = {100,20,1,37,46}; //ok
此写法必需一次写完,不能分开来写,如:
int[] arr3;
arr3 = {1,234,23,19}; //error
arr3 = new int[]{1,234,23,19}; //ok

例:

--
增强for循环,作用就是用来快速迭代数组与集合的。
语法:
for(元素类型 变量 : 数组名){
//循环体,可以直接使用变量
}
如:
int[] arr = new int[10];
...
//迭代
for(int i : arr){
System.out.println(i);
}

--
数组元素的拷贝

如:
int[] arr1 = {1,2,3};
int[] arr2 = arr1;
//arr2与arr1就是指向同一个数组对象。
int[] arr3 = new int[arr1.length];
//数组元素的复制
for(int i=0;iarr3[i] = arr1[i];
}
//要完成数组元素的复制,有更好的方法:
System.arraycopy(
Object src, //源数组
int srcPos, //从源数组的哪个位置开始
Object dest, //目标数组
int destPos, //到目标数组的哪个位置
int length //总共copy的长度
);
如:
System.arraycopy(arr1,0,arr3,0,arr1.length);
--
数组工具类 java.util.Arrays
这个是JDK自带的,专门用来处理数组相关的共性操作,
如:
toString,
sort,
copyOf,
fill,

例,

--
一维数组的应用
常见的操作有:
1.添加元素到数组中
2.删除数组中已有的元素
3.查找某个元素的下标
4.找极值
5.排序
6.排重[统计重复元素]
7.元素的转换

相关主题