Java基础
方法
1.方法是啥
- 方法就是具备独立功能的一个代码块。
例如:遍历数组,每次都要写遍历的代码,我么可以把遍历的代码放到方法里,每次需要遍历,就调用这个数组的遍历方法。
2.定义方法和调用方法(无参,无返回值)
- 定义方法的格式
public static void 方法名(){
//方法体;
}
- 方法的调用
方法名();
例如
public class Demo {
public static void main(String[] args) {
System.out.println("1111111");
print();//调用方法
System.out.println("22222222");
}
public static void print(){
System.out.println("这是一个无参数,无返回值的方法");
}
}
不难看出执行流程:从main方法开始,一行一行依次往下,遇到方法后,进入方法,然后输出,再回到main方法继续往下执行。
3.方法调用内存图
4.带参带返回值方法
public static 返回值类型 方法名(参数1,参数2,.....){
//方法体;
return 数据;
}
例如
public class Demo {
public static void main(String[] args) {
print(10);//10
print(20);//20
}
public static void print(int num){//此处给方法传了一个int类型的参数
System.out.println(num);
}
}
return(返回)
- 用于方法返回数据(返回值类型不为void(空)的方法)
- 返回的数据要与返回值类型相同
- 如果返回值类型不为void,则必须要有返回值
注意:返回值类型为void时,方法不能有返回值,但是可以写return; 用来结束当前方法
public class Demo {
public static void main(String[] args) {
print(10);//此处什么也不输出
print(20);//121111112
}
public static void print(int num){
if (num==10){
return;
}
System.out.println(121111112);
}
}
形参和实参
例如(带参带返回值方法(两数求和))
形参:形式参数 在定义的时候 写的参数
实参 :实际参数 调用的时候 传入的参数
public class Demo {
public static void main(String[] args) {
int a=10;
int b =20;
int c = add(a,b);//此处传入的就是实参
System.out.println(c);
}
public static int add(int num1,int num2){//此处方法中定义的是形参
return num1+num2;//返回相加后的数据(int类型的)
}
}
形参实参内存原理
方法的注意事项
- 方法和方法之间是平级关系。不能嵌套定义
- return语句
* 如果是有返回值类型的方法,必须要有return语句
* 如果是没有返回值类型的方法,可以写return语句。也可以不写! - 直接写在return下面的语句会无法执行,会导致程序报错
- 写判断逻辑时需要注意方法的返回值
例如
此处在编译阶段就会报错,因为在编译时,jvm认为if语句如果判断为false时程序就没有返回值了
二、方法的重载
- 方法的重载:方法名相同,参数不同。
- 构成重载的条件
- 必须在同一个类中
- 方法名必须相同
- 参数列表必须不同(至少满足其中一个条件)
* 参数的数据类型不同
* 参数的数量不同
* 参数的顺序不同 - 与返回值类型无关
例如
public class Demo {
public static void main(String[] args) {
int a=10;
int b =20;
int c = add(a,b);
System.out.println(c);
}
public static int add(int num1,int num2){
return num1+num2;
}
public static double add(int num1,double num2){//参数类型不同
return num1+num2;
}
public static double add(double num2,int num1){//参数顺序不同
return num1+num2;
}
public static double add(int num1,int num2,int num3){//参数数量不同
return num1+num2+num3;
}
}
三、方法参数传递
传递基本数据类型
public class Demo {
public static void main(String[] args) {
int num=100;
System.out.println(num);//100
change(num);
System.out.println(num);//100
}
public static void change(int num ){
num=200;
}
}
内存图
传递引用数据类型
public class Demo {
public static void main(String[] args) {
int[] arr=new int[]{11,22,33,44,55};
System.out.println(arr[0]);//11
change(arr);
System.out.println(arr[0]);//100
}
public static void change(int[] arr){
arr[0]=100;
}
}
内存图
传递引用数据类型时传递的时内存地址值
四、案例
- 定义方法,接收数组。遍历数组,按照[11,22,33,44,55]的形式输出
public class Demo {
public static void main(String[] args) {
int[] arr=new int[]{11,22,33,44,55};
print(arr);
}
public static void print(int[] arr){
System.out.print("[");
for (int i = 0; i < arr.length; i++) {
if (i== arr.length-1){//当i为数组最后的索引值时,输出最后一个元素和"]"
System.out.print(arr[i]+"]");
}else {
System.out.print(arr[i]+",");
}
}
}
}
- 定义方法,接收数组。获取数组最大值
public class Demo {
public static void main(String[] args) {
int[] arr=new int[]{11,22,33,44,55};
System.out.println( getMax(arr) ); //此处方法有返回值可以直接打印
}
public static int getMax(int[] arr){
int max = arr[0];
for (int i = 0; i < arr.length; i++) {
if (max<arr[i]){
max=arr[i];
}
}
return max;
}
}