一,方法的定义
方法都定义在class里,格式如下:
public class Test {
返回值 方法名 (形参列表){
方法体,方法的具体实现内容
}
}
注意:类名必须要和文件名相同,方法没有声明一说,,方法可以嵌套使用,但是不能嵌套定义
二,方法的调用
(一)方法的传参
1.参数的个数,类型,顺序都需要匹配
2.返回值类型匹配
方法的调用都在栈上开辟空间,一旦遇到return,或者方法执行结束,就会把当前方法的栈帧从栈上进行销毁
(二)方法的重载
1.方法名相同
2.形参的 个数,类型,顺序,有一个或者多个不同
3.不能以返回类型区分
三,数组
(一) 数组的创建及初始化
数组是一种相同类型的数据的集合,有一块连续内存,是一种简单的数据结构,其定义如下:
类型说明符 [ ] 数组名 = { 数据元素 , 数据元素 } ;
int [ ] array1 = { 1 ,2,3,4,5,6,7,8,9,} ;
char [ ] chars = { ' a ' , ' b ' , ' c ' } ;
int [ ] array2 = new int [ ] { 1 , 2 , 3 , 4 } ; //new一个数组对象
int [ ] array3 = new int [5] ; //默认初始化为0
默认值有如下
(二)数组
1.打印数组
int[] arr={1,2,3,4,5};
Syetem.out.println(arr[1]);
2.想知道数组长度
System.out.println(array.length);
3.数组名可以理解为所存放的堆区的地址
4.Java中内存的划分为Java虚拟机栈,本地方法栈,堆,方法区,程序计数器。访问数组时可能会遇到如下几个异常
(1)素组越界异常
(2) 空指针异常(数组名引用为空)
若有 int [ ] array = NULL; 则会有以下异常
5.1遍历数组的方法——for-each 循环,其书写格式如下
for ( 数据类型 变量名:数组名){
Syetem.out.print(" ") ;
}
只是遍历数组,拿不到每个元素的下标
5.2 通过工具类 Arrays. 的方式将数组转化为字符串
String ret = Arrays.toString(array);
System.out.println(ret);
Arrays.是操作数组的一个工具类,toString() 是一个方法,将数组转化为字符串进行输出,其使用需要导包 import java.util.Arrays;
(三)数组应用场景
3.1保存数据
public static void main(String[] args){
int[] array= {1,2,3};
for(int i=0;i< array.length;++i){
System.out println(array[i]+" ");
}
}
3.2作为参数传递
数组传参,传的是引用,引用存放地址,也就相当于引用指向对象
fun1,作为引用传递却并没有改变实参值
fun2,传的是引用,形参与实参指向同一块内存,形参可以修改实参的值
public static void fun1(int[] array){
array = new int[]{11,22,33,44};
}
public static void fun2(int [] array){
array[0]=99;
}
public static void main(String[] args) {
int[] array={1,2,3,4};
System.out.println(Arrays.toString(array));
fun1(array);
System.out.println(Arrays.toString(array));
fun2(array);
System.out.println(Arrays.toString(array));
}
区别于普通值传递
总的来说,就是,数组传参传数组名时形参与实参最开始指向同一块空间,要不要改变实参取决于程序员自己,如果改变了形参的指向,(new一块空间让形参指向),那就改变不了实参了,而普通传参只有传值这一种传法,形参在栈区是找不到为实参在栈区开辟的空间的地址的
3.3 数组作为返回值
public static int[] fun3(){
int []array={1,2,3,4,5};
return array;
}
public static void main(String[] args){
int[] ret = fun3();
System.out.println(Arrays.toString(ret));
}
3.4实现自己的 toString() 方法
toString 把整形转化为字符串
public static String myToString(int[] arryaay){
if(arryaay==null) {
return null;
}
String ret ="[";
for(int i=0;i<arryaay.length;i++){
ret+=arryaay[i];
if(i!=arryaay.length-1) {
ret+=",";
}
}
ret+="]";
return ret;
}
public static void main(String[] args){
int[] arrar={1,2,3,4,5,6,7,8,9};
System.out.print(myToString(arrar));
}
运行结果如下
3.5数组拷贝
1.自己写方法
public static void main(String[] args){
int[] array={1,2,3,4,5};
int[] copy=new int[array.length];
for (int i=0;i<array.length;i++){
copy[i]=array[i];
}
System.out.println(Arrays.toString(copy));
}
2.调用工具类
public static void main(String[] args){
int[] array={1,2,3,4,5};
int[] copy = Arrays.copyOf(array,array.length);
System.out.println(Arrays.toString(copy));
}
3.若既要拷贝又要扩容
public static void main(String[] args){
int[] array={1,2,3,4,5};
array= Arrays.copyOf(array,array.length*2);
System.out.println(Arrays.toString(array));
}
结果如下
4.拷贝数组的一部分
public static void main(String[] args){
int[] array={1,2,3,4,5};
int[] copy= Arrays.copyOfRange(array,1,3);
System.out.println(Arrays.toString(copy));
}
结果如下
5.想要拷贝数组其实也有更为简单的写法
int[] array={1,2,3,4,5};
int[] copy = array.clone();
3.6数组逆序
public static void reverse(int[] array){
int i=0;
int j=0;
for(i=0,j=array.length-1;i!=j;i++,j--){
int tmp=array[i];
array[i]=array[j];
array[j]=tmp;
}
}
public static void main(String[] args){
int[] array={1,2,3,4,5};
reverse(array);
System.out.println(Arrays.toString(array));
}
(四)二维数组
4.1打印二维数组的三种方式
4.1.1普通循环
public static void main(String[] args){
int [][] array={{1,2,3},{4,5,6}};
for (int i=0;i<array.length;i++){
for (int j=0;j<array[0].length;j++){
System.out.print(array[i][j]+" ");
}
System.out.println();
}
}
4.1.2 foreach循环
public static void main(String[] args){
int [][] array={{1,2,3},{4,5,6}};
for (int[] tmpArray:array) {
for (int x:tmpArray) {
System.out.print(x+" ");
}
System.out.println();
}
}
4.1.3调用工具类
public static void main(String[] args){
int [][] array={{1,2,3},{4,5,6}};
String ret =Arrays.deepToString(array);
System.out.println(ret);
}
这里都只是简单运用了Java里面的工具类,Java里面还有很多其他功能强大的工具类,肯定也还有其他更有趣的对数组的操作。
注意:Java中可以省略掉列,但是不能省略行,这里与c语言中相反。
Java中还可以定义不规则数组