方法
概念:方法就是就是你要实现某个功能具体的步骤的封装,提高代码的复用性
格式:权限修饰符 状态修饰符 返回值类型 方法名(参数列表){
方法体;
Return 返回值;
}
调用:方法名();
分为2类
A:有明确返回值的方法调用
。单独调用没有意义
。常用赋值调用
B:没有明确返回值的函数调用
。只能单独使用,也就是所谓的void 类型方法的调用
注意事项:
。方法不调用不执行
。方法与方法是平级关系,不能嵌套定义
。方法定义的时候参数之间用逗号隔开
。方法调用的时候不用在传递数据类型
。如果方法有明确的返回值,一定要有return带回一个值
方法案例:
如何写一个方法?
a:返回值类型 明确功能结果的数据类型
b:参数列表明确有几个参数,以及参数的类型
方法重载:
概念:在一个类中,允许存在相同方法名的方法,但是它们的方法参数类型或参数个数不同
特点:与返回值类型无关,只看方法名和参数列表
在调用时,虚拟机通过参数列表的不同来区分同名方法
数组
概念:数组是一个容器,用来存储多个相同数据类型的数据
数组既可以存储基本数据类型,也可以存储引用数据类型。
一维数组定义格式:
格式1:数据类型[] 数组名;
格式2:数据类型 数组名[];
两种格式都可以,这只是定义,要使用一个数组,还必须进行初始化
初始化:所谓初始化:就是为数组中的数组元素分配内存空间,并为每个数组元素赋值。
数组的初始化方式
注:Java对内存空间的一个分配 栈内存 堆内存 方法区 寄存器(cup) 本地方法区(与系统相关)
局部变量存在栈内存
局部变量:定义在方法中的变量,或者方法声明上(形参)的变量
所有new 出来的东西都存在堆内存
动态初始化:初始化时只指定数组长度,由系统为数组分配初始值。
格式:数据类型[] 数组名 = new 数据类型[数组长度];
数组长度其实就是数组中元素的个数。
举例:
int[] arr = new int[6];
解释:定义了一个int类型的数组,这个数组中可以存放6个int类型的值。数组下标由1开始,例如第一个值为arr[0]。
静态初始化:初始化时指定每个数组元素的初始值,由系统决定数组长度。格式:
数据类型[] 数组名 = new 数据类型[]{元素1,元素2,…};
举例:
int[] arr = new int[]{1,2,3};
解释:定义了一个int类型的数组,这个数组中可以存放3个int类型的值,并且值分别是1,2,3。
其实这种写法还有一个简化的写法
int[] arr = {1,2,3};
数组操作中常见的两个异常:
数组索引越界
ArrayIndexOutOfBoundsException
arr[2]=new int[]{6};//ArrayIndexOutOfBoundsException
数组的长度为1,所以访问arr[2]越界;
访问到了数组中的不存在的索引时发生。
空指针异常
NullPointerException
数组引用没有指向实体,却在操作实体中的元素时。
实例:
int[] arr=new int[]{12,34,35};
int [] arr2=arr;
arr=null;
System.out.println(arr2);
System.out.println(arr2[0]);
结果:
//System.out.println(arr);
//System.out.println(arr[0]);
分析:arr数组申请空间,new出来的东西在堆中,数组指向堆内存,arr2指向和arr相同的堆内存,arr=null;数组arr不再指向堆内存,为null,此时想用数组名去访问元素,就会出现空指针异常,但不影响arr2。
数据类型的分类及参数的传递:
。调用方法时,传递参数 如果传的是基本数据类型 形参的改变不影响实参
。如果传的是引用数据类型,形参的改变是会影响到实参
实例:
public static void main(String[] args) {
//定义一个数组,数组是引用数据类型,形参的改变会影响实参
int[] arr = {3,6,7,8};
System.out.println(arr[1]);
change(arr);
System.out.println(+arr[1]);//输出数组中的元素
}
public static void change(int[] arr){
for(int x = 0 ; x < arr.length ; x++){
if(arr[x]%2 == 0){
arr[x] *= 8;
}
}
}
}
public class test {
public static void main(String[] args) {
int a=34,b=9;
change(a,b);
System.out.println(a);
System.out.println(b);
// TODO Auto-generated method stub
}
public static void change(int i,int j){
i=i*2;
j=j*4;
}
}
结果;34
9
调用方法时传递的是int基本类型,所以形参的改变不会影响main中实参的值,形参随着方法的释放而释放。
二维数组概念:其实二维数组其实就是一个元素为一维数组的数组。
二维格式1
数据类型[][] 变量名 = new 数据类型[m][n];
m表示这个二维数组有多少个一维数组
n表示每一个一维数组的元素个数
举例:
int[][] arr = new int[3][2];
定义了一个二维数组arr
这个二维数组有3个一维数组,名称是arr[0],arr[1],arr[2]
每个一维数组有2个元素,可以通过arr[m][n]来获取
表示获取第m+1个一维数组的第n+1个元素数组的定义格式:
格式2
数据类型[][] 变量名 = new 数据类型[m][];
m表示这个二维数组有多少个一维数组
这一次没有直接给出一维数组的元素个数,可以动态的给出。
举例:
int[][] arr = new int[3][];
arr[0] = new int[2];
arr[1] = new int[3]
arr[2] = new int[1];
格式3
数据类型[][] 变量名 = new 数据类型[][]{{元素…},{元素…},{元素…}};
简化版格式:
数据类型[][] 变量名 = {{元素…},{元素…},{元素…}};
举例:
int[][] arr = {{1,2,3},{4,6},{6}};
例子:
public static void main(String[] args) {
int []arr2={13,2};
int []arr3={2,4,6};
int[][] arr=new int[2][];//2 代表这个二维数组中有两个一维数组 2也就是二维数组的长度
System.out.println(arr);//打印二维数组的地址值
System.out.println(arr[0]);//二维数组的元素还未初始化
//给二维数组中的元素赋值
arr[0]=arr2;
arr[1]=arr3;
//获取二维数组中的元素
System.out.println(arr[0]);
System.out.println(arr[1]);
//取二维数组中一维数组中的元素
int num=arr[0][0];//
System.out.println(num);
//数据类型:基本数据 和 引用数据类型
//引用数据类型:就是new出来的东西 存堆内存,系统会给其分配地址值,并且还有默认值
注:
二维数组arr[2][]的地址和一维数组的地址不同刚开始因为还未给二维数组初始化所以一维数组的地址为空
二维数组的遍历:
public static void main(String[] args) {
//定义一个二维数组
int[][] arr={{2,6},{9,8},{7,9}};
//遍历二维数组
for(int i=0;i<arr.length;i++){
for(int j=0;j<arr[i].length;j++){
System.out.println(arr[i][j]);
}
}
}