方法概述
方法:
就是将一个功能抽取出来,把代码单独定义在一个大括号内,形成一个单独的功能.当我们需要用这个功能时,就可以去调用.这样就可以实现代码的复用性,也解决了代码冗余的现象.
方法的定义:
定义格式:
修饰符 返回值类型 方法名 (参数列表) {
代码(方法体)…
return ;
}
没有返回值类型的方法定义
修饰符 void 方法名(参数类型1 参数名1…){
//没有return
直接输出的形式
}
没有具体返回值类型方法的调用
只能使用单独调用
定义格式解释:
-修饰符:目前固定写法public static
-返回值类型:用于限定返回值的数据类型
-方法名:一个名称,给当前代码块{} 起名字
要遵循Java中的标识符:小驼峰命名法
如果是单个单词,全部小写
多个单词,第一个单词小写,其他首字母大写
-参数类型:
实际参数:具体在参与运算的实际值
形式参数:在方法中传递的参数
参数类型:基本数据类型
参数名:变量名
-方法体:完成功能的代码
-return:结束方法以及返回方法指定类型的值
-返回值:程序被return带回的结果,返还给调用者
-定义方法的时候,心里有"两个明确"
1)明确返回值的类型
2)明确参数个数以及参数类型
有返回值类型的方法如何调用:
1)单独调用:没有意义,没有结果
2)输出调用:可以实现,怒推荐,数据写死
3)赋值调用(推荐)
eg:
需求:求两个数之和(没有告诉具体类型 int)
class FunctiongDemo{
public static void main(String[] args){
//定义两个变量
int a =10;
int b =20;
//此处调用方法
//单独调用,没有意义
//sum(a,b);
//输出调用
//System.out.println("两个数据之和是:"+sum(a,b)) ;
//赋值调用
int result = sum(a,b) ;
System.out.println("两个数据之和是:"+result) ;
}
/*
定义方法
两个明确
1)明确返回值类型 :int
2)明确参数个数以及参数类型:两个,int类型
*/
public static int sum(int a, int b){ //形式参数要带上数据类型
//具体的运算
//结果变量
//int c =a +b ;
//return c ;
//改进
return a+b ;
}
}
定义方法的注意事项:
1.方法和方法是平级关系,方法中不能再定义方法
2.调用时,实际参数不需要携带数据类型,形式参数必须携带数据类型,否则报错
3.方法不调用,不执行,如果调用,采用赋值调用
方法重载
方法重载: overload
在方法中,方法重载:方法名相同,参数列表不同,与返回值无关!
参数列表不同
1)参数个数不同
2)参数类型不同
方法递归:(后期讲)
不死神兔
有一对兔子,每个月会产生一对兔子,这对兔子经过经过3个月后再产生一对兔子,第20个月有多少对兔子?
方法调用方法本身的现象.
面试题:overload和override的区别?
两者之间没有联系
判断夏磊哪些方法属于方法重载?
public static void open(){}
public static void open(int a){}
public static void open(int a ,int b){}
public static void open(double a,int b){}
public static void open(int a,double b){}
public static void open(int i,double d){}
public static void open(float a,long b){}
public static void OPEN(){}
public static void open(int a,int j){}
/*
比较两个数据是否相等。参数类型分别为两个byte类型,两个short类型,两个int类型,两个long
类型,并在main方法中测试
*/
class Demo{
public static void main(String[] args){
//定义两个byte类型的变量
byte b1=2;
byte b2=3;
//调用
boolean flag = compare(b1,b2);
System.out.println(flag);
short s1 = 5;
short s2 = 5;
boolean flag2 =compare(s1,s2);
System.out.println(flag2);
}
public static boolean compare(int a ,int b){
return (a==b);
}
public static boolean compare(short a,short b){
return(a==b);
}
}
数组
可以存储多个元素的容器
注意:这多个元素必须是同一个数据类型
数组定义格式:
数据类型[] 数组名称;
数据类型 数组类型[];
eg:
int[] arr;定义了一个int类型数组,数组名称是arr
int arr[];定义了一个int类型的arr数组
数组的初始化:
动态初始化:具体数组中的元素值,由系统默认给定,数组的长度由开发者定义;
数组数据类型[] 数组名称=new 数据类型[数组长度];
数组数据类型 数组名称[]=new 数据类型[数组长度];
获取数组的元素值:通过数组名称[角标] ,角标从0开始编号!
arr[0] = ..
arr[1]
arr[2]..
class Demo{
public static void main(String[] args){
//定义一个数组,动态初始化
int[] arr = new int[3] ;//0,1,2
/*
=号左边
int:规定数组中的元素值都是int类型
[]:定义数组(没有说明具体的数组形式,默认一维数组)
=号右边
new :表示需要在栈内存开辟空间
int:规定数组中的元素值都是int类型
[] :一维数组
3:表示当前数组的长度是3 (3个元素)
*/
System.out.println(arr) ;//[I@6d06d69c 类似内存地址值
//如何获取数组的元素值呢?
System.out.println(arr[0]) ;//0
System.out.println(arr[1]) ;//0
System.out.println(arr[2]) ;//0
System.out.println("----------------------------");
arr[0] = 10 ;
arr[1] = 20 ;
System.out.println(arr[0]) ;
System.out.println(arr[1]) ;
System.out.println(arr[2]) ;
}
}
静态初始化:
有系统给定默认长度,开发者定义数组的元素内容
数据类型[] 数组名 = new 数据类型[]{元素1,元素2…};
变形格式:
数据类型 数组名[]= new 数据类型[]{元素1,元素2…};
简写格式:
数据类型[] 数组名称 = {元素1,元素2…};
eg:
int[] arr = new int[]{12,15,21};
简化版:
int[] arr = {12,15,21};
int arr[] = {12,15,21};
数组中常见的两个问题
1)数组角标越界
访问不存在的数组中的角标
java.lang.ArrayIndexOutOfBoundsException :(属于运行时期异常)
解决方案:
排查具体原因,具体哪一行角标越界
2)java.lang.NullPointerException :空指针异常! :(属于运行时期异常)
为何出现空指针
当一个对象得引用不存在了,然后还需要使用对象完成一些特定功能
解决方案:
对当前这个对象进行非空判断
if(对象名称!=null){
//使用对象完成特定的功能
}