此为个人学习笔记,如有错误,欢迎指教
八、函数
概述:
-在Java中也被称为函数
-使用{}括起来,封装完成某些功能的代码块
格式:
修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2…){
函数体
return 返回值
}
当返回值类型是void的时候格式(无返回值):
修饰符 void 方法名(参数类型 参数名1,参数类型 参数名2…){
函数体;
}
说明:
-修饰符:public private 等
-返回值类型:限定此方法得到的值的数据类型
-方法名 :就是个名称
-参数类型:在执行方法体时需要的数据的类型
-return :return 值 ,此值的数据类型就是返回值类型;当时有返回值类型的时候可以看成为此方法的值(只理解),由return带给调用者;return结束该方法。
理解:参数类型与参数名,有点像声明1个变量,当该方法被调用的时候给参数赋值,在方法体内,变量被使用;
方法重载:
在同一类中,允许存在一个以上的同名方法,只要他们的参数个数或者参数类型不同即可;
方法重载,只与方法名和参数列表来区分的,与返回值类型无关
在调用时,虚拟机通过参数列表的不同来区分同名方法;
九、数组
概述:
-存储 多个元素(同一种数据类型的) 的容器
-数组可以存储数据的类型:基本数据类型+引用数据类型
定义的格式:
-数据类型[] 数组名;推荐使用这种,工作中也常用这种
-数据类型 数组名;
数组的初始化:
-Java中的数组必须先初始化才能使用(就跟变量也得初始化才能使用)
-数组的初始化:为数组中的数组元素分配了内存空间;
-动态初始化:指定数组长度,由系统为数组分配初始值;
数据类型[] 数组名 = new 数据类型[数组长度];
-静态初始化:指定每个数组元素的值,由系统决定数组长度;
数据类型[] 数组名 = new 数据类型[]{数据1,数据2……数据n};
-数组是带有编号的,下标的,索引的
-数组是引用类型
各种图说明
1) 图说明在创建一个数组时内存中的流程(创建一个对象)
2) 数组的赋值及取值时内存中的流程:图和代码结合
图数组元素赋值取值 对应的代码
public class ArrayDemo2 {
public static void main(String[] args) {
int[] arr1 = new int[3];
/*
arr1[0] = 11;把11赋值给数组中下标为0的元素
拿着值11按照线路寻找,使用11替代原有的值
line1->line2->line3-line4->改值
*/
arr1[0] = 11;
/*
arr1[1] = 22;把11赋值给数组中下标为1的元素
拿着值22按照线路寻找,使用11替代原有的值
line1->line2->line5-line6->改值
*/
arr1[1] = 22;
/*
arr1[2] = 33;把11赋值给数组中下标为2的元素
拿着值33按照线路寻找,使用33替代原有的值
line1->line2->line7-line8->改值
*/
arr1[2] = 33;
/*
找值:arr1 = line1 = 0x0001
0x0001是演示过程中为了方便随便写的,输出的才是真正的地址值;
*/
System.out.println(arr1);//输出:[I@7852e922
/*
找值:arr1[0] = line1->line2->line3-line4->取值=11
*/
System.out.println(arr1[0]);//输出:11
/*
找值:arr1[1] = line1->line2->line5-line6->取值=22
*/
System.out.println(arr1[1]);//输出:22
/*
找值:arr1[1] = line1->line2->line7-line8->取值=33
*/
System.out.println(arr1[2]);//输出:33
//与arr1是一样的;
int[] arr2 = new int[3];
arr2[0] = 111;
arr2[2] = 333;
System.out.println(arr2);//输出:[I@4e25154f
System.out.println(arr2[0]);//输出:111
//arr2[1]没有改过值,所以还是默认值0
System.out.println(arr2[1]);//输出:0
System.out.println(arr2[2]);//输出:333
/*
int[] arr3 = arr1;arr1 = 0x0001
所以 arr3 = 0x0001;
*/
int[] arr3 = arr1;
//
/*
arr3在内存中指向的是0x0001,所以改值走的也是0x0001的线
arr3[0] = 100;把11赋值给数组中下标为0的元素
拿着值100按照线路寻找,使用100替代原有的值
line31->line32->line3-line4->改值为100
*/
arr3[0] = 100;
/*
arr3在内存中指向的是0x0001,所以改值走的也是0x0001的线
arr3[0] = 200;把200赋值给数组中下标为0的元素
拿着值200按照线路寻找,使用200替代原有的值
line31->line32->line5-line6->改值为200
*/
arr3[1] = 200;
System.out.println(arr3);//输出:[I@7852e922
/*
找值:arr3[0] = line31->line32->line3-line4->取值=100
*/
System.out.println(arr3[0]);//输出:100
System.out.println(arr3[1]);//输出:200
/*
没有使用arr3更改过此值,所以取的还是33
找值:arr3[2] = line31->line32->line7-line8->取值=33
*/
System.out.println(arr3[2]);//输出:33
/**
使用arr1改值,arr3拿值,取的值是最后更改过的值,
原因就在与arr1和arr3执行的是同一个内存地址;
*/
arr1[2] = 300;
System.out.println(arr3[2]);//输出:300
}
}
使用:
数组遍历(依次输出数组中的每一个元素)
数组获取最值(获取数组中的最大值最小值)
数组元素逆序 (就是把元素对调)
数组查表法(根据键盘录入索引,查找对应星期)
数组元素查找(查找指定元素第一次在数组中出现的索引)
在demo中
二维数组:
概述:
元素为一个数组的数组就是二维数组
格式:
格式1:
int[][] arr = new int[m][n];
m是二维数组的长度,n是元素数组的长度;
格式2:静态初始化,给定数组值,由系统给出数组长度
int[][] arr = new int[m][];
m是二维数组的长度
格式3:静态初始化,给定数组值,由系统给出数组长度
int[][] arr = new int[][]{{1,2,3},{4,5,6}};
各种图说明
二维数组的初始化、赋值、取值过程(格式1)
二维数组的初始化、赋值、取值过程(格式2)
(格式1和格式2,在内存不同在于一维数组元素是先分配还是后分配)
二维数组的初始化、赋值、取值过程(格式3)
使用:
查看demo
思考:
Java中参数传递问题
/**
* Java中参数传递:与图-参数传递配合
* @author sexyhair
*/
public class ArrayDemo {
public static void main(String[] args) {
int a = 10;
int b = 20;
change(a,b);
System.out.println("main(String[] args)--a="+a+",b="+b);
int[] arr = new int[]{1,2,3,4,5};
change(arr);
System.out.println("main(String[] args)--arr[1]="+arr[1]);
}
public static void change(int a ,int b){
a = b;
b = a+b;
System.out.println("change(int a ,int b)--a="+a+",b="+b);
}
public static void change(int[] arr){
String str = "[";
for(int i = 0 ; i < arr.length ; i++){
if(arr[i] % 2 == 0){
arr[i]*=2;
}
str = str+arr[i]+" ";
if(i == arr.length-1){
str = str+"] ";
}
}
System.out.println("change(int[] arr)-----"+str);
}
}
参考书籍视频:
-学习视频:黑马程序员_Java基础视频-深入浅出精华版
-阅读书籍:Java核心技术 卷I(机械工业出版社)
API1.8