黑马JAVA入门学习笔记4

一、JAVA方法概述

  1. 方法是一种语法结构,可以把一段代码封装成一个功能,以便重复调用。
  2. 格式:

public class MethodDemo1 {
    public static void main(String[] args) {
        int rs=sum(10,20);
        System.out.println("和是:"+rs);
        int rs2=sum(30,20);
        System.out.println("和是:"+rs2);
    }
    public static int sum(int a,int b){
        int c=a+b;
        return c;
    }
}
  • 形参列表可以有多个,也可以没有。 

二、方法的其他形式 

  1. 不需要返回值,返回值类型写void
  2. 不需要形参列表,直接空着即可
  3. 无参数,无返回值的方法调用时直接写  方法名();
  4. 方法在类中的位置无所谓,但是一个方法不能定义在另一个方法里面

三、方法的案例 

1、求1-n的和

public class Test {
    public static void main(String[] args) {
        int rs=add(5);
        System.out.println("1-5的和:"+rs);
        int rs1=add(100);
        System.out.println("1-100的和:"+rs1);

    }
    public static int add(int n){
        int sum=0;
        for (int i = 0; i <=n; i++) {
            sum+=i;

        }
        return sum;
    }
}

2、判断一个整数是奇数还是偶数 

不需要返回值

public class Test {
    public static void main(String[] args) {
//        int rs=add(5);
//        System.out.println("1-5的和:"+rs);
//        int rs1=add(100);
//        System.out.println("1-100的和:"+rs1);
        judge(7);
        judge(10);

    }
    public static int add(int n){
        int sum=0;
        for (int i = 0; i <=n; i++) {
            sum+=i;

        }
        return sum;
    }
    public static void judge(int number){
        if(number%2==0){
            System.out.println(number+"是一个偶数");
        }
        else{
            System.out.println(number+"是一个奇数");
        }
    }
}

四、方法在计算机中的执行原理

  • 方法被调用的时候,是进入到栈内存中运行,栈(先进后出),方法进入到栈执行完之后,就会被清理掉。

五、JAVA的参数传递机制 

1、基本类型的参数传递

  • 传输实参给方法中的形参的时候,传输的是实参变量中存储的值的副本。                                 看代码:main函数里,调用完change方法之后a的值还是10,没有改变。
    public class parameter {
        public static void main(String[] args) {
            int a=10;
            change(a);
            System.out.println("main:"+a); //10
            
        }
        public static  void change(int a){
            System.out.println("change1:"+a);  //10
            a=20;
            System.out.println("change2:"+a); //20
        }
    }
    

2、引用类型的参数传递 

由于传送的是地址,change2方法可以根据这个地址,改变数组里面的数值,所以调用完change2方法之后,第二位置的值就发生了改变,输出的是更改之后的值。

public class parameter {
    public static void main(String[] args) {
//        int a=10;
//        change(a);
//        System.out.println("main:"+a); //10
        int[] arrs=new int[]{10,20,30};
        change2(arrs);  //传入的是数组的地址
        System.out.println("main:"+arrs[1]); //222

    }
    public static  void change(int a){
        System.out.println("change1:"+a);  //10
        a=20;
        System.out.println("change2:"+a); //20
    }
    public static void change2(int[] arrs){
        System.out.println("方法内1:"+arrs[1]);//20
        arrs[1]=222;
        System.out.println("方法内2:"+arrs[1]);//222
    }
}

六、引用类型参数传递的相关案例 

1、打印int类型的数组内容

  • 输出一个int类型的数组内容,输出格式【11,22,33,44,55】
  • 形参声明:int[] arr
  • 不需要返回
public class test3 {
    public static void main(String[] args) {
        int[] arr=new int[]{10,30,50,70};
        printArray(arr);//[10, 30, 50, 70]

    }
    public  static void printArray(int[] arr){
        System.out.print("[");
        for (int i = 0; i <arr.length ; i++) {
            if(i==arr.length-1)
            System.out.print(arr[i]);
            else{
                System.out.print(arr[i]+", ");
            }


        }
        System.out.println("]");
    }
}

for循环里面的判断可以用三元运算符来优化

public class test3 {
    public static void main(String[] args) {
        int[] arr=new int[]{10,30,50,70};
        printArray(arr);//[10, 30, 50, 70]

    }
    public  static void printArray(int[] arr){
        System.out.print("[");
        for (int i = 0; i <arr.length ; i++) {
//            if(i==arr.length-1)
//            System.out.print(arr[i]);
//            else{
//                System.out.print(arr[i]+", ");
//            }
            System.out.print(i==arr.length-1?arr[i]:arr[i]+", ");


        }
        System.out.println("]");
    }
}

如果传入的是空数组就会报错,进一步来优化代码

public class test3 {
    public static void main(String[] args) {
        int[] arr=new int[]{10,30,50,70};
        printArray(arr);//[10, 30, 50, 70]
        int[] arr2=null;
        printArray(arr2);

    }
    public  static void printArray(int[] arr){
        if(arr==null){
            System.out.println(arr); //null
            return;//跳出当前方法
        }
        System.out.print("[");
        for (int i = 0; i <arr.length ; i++) {
//            if(i==arr.length-1)
//            System.out.print(arr[i]);
//            else{
//                System.out.print(arr[i]+", ");
//            }
            System.out.print(i==arr.length-1?arr[i]:arr[i]+", ");


        }
        System.out.println("]");
    }
}

如果传入的数组没有元素,那么长度就是0,for循环不执行,输出[] 

public class test3 {
    public static void main(String[] args) {
        int[] arr=new int[]{10,30,50,70};
        printArray(arr);//[10, 30, 50, 70]
        int[] arr2=null;
        printArray(arr2);
        int[] arr3={};
        printArray(arr3);//输出[]

    }
    public  static void printArray(int[] arr){
        if(arr==null){
            System.out.println(arr); //null
            return;//跳出当前方法
        }
        System.out.print("[");
        for (int i = 0; i <arr.length ; i++) {
//            if(i==arr.length-1)
//            System.out.print(arr[i]);
//            else{
//                System.out.print(arr[i]+", ");
//            }
            System.out.print(i==arr.length-1?arr[i]:arr[i]+", ");


        }
        System.out.println("]");
    }
}

2、比较两个int类型数组是否一样,返回true或者false 

  • 两个int类型数组,元素个数,对应位置的元素内容都一样才行。
  • 需要接收数据,形参声明:int[] arr1,int[] arr2
  • 需要返回数据,返回值类型声明为boolean

public class test4 {
    public static void main(String[] args) {
//        int[] arr1=null;
//        int[] arr2=null;
//        System.out.println(equals(arr1,arr2));//true
//        int[] arr1=null;
//        int[] arr2={10,20,30};
//        System.out.println(equals(arr1,arr2));//false
//        int[] arr1={10,20,30,40};
//        int[] arr2={10,20,30};
//        System.out.println(equals(arr1,arr2));//false
        int[] arr1={10,20,30};
        int[] arr2={10,20,30};
        System.out.println(equals(arr1,arr2));//true


    }
    public static boolean equals(int[] arr1,int[] arr2){
        //两个都为空
        if(arr1==null&&arr2==null){
            return true;
        }
        //其中一个为空
        if(arr1==null||arr2==null){
            return false;
        }
        //两个都不为空,先判断长度是否一样
        if(arr1.length!=arr2.length){
            return false;
        }
        //长度一样的话,判断元素是否一样
        for (int i = 0; i <arr1.length ; i++) {
            if(arr1[i]!=arr2[i]){
                return false;
            }
        }
        //前面没有返回false ,说明都一样 ,返回true
        return true;
    }

}

七、方法重载 

一个类中,出现多个方法的名称相同,但是他们的形参列表不同,这些方法就是方法重载。

修饰符,返回值类型是否一样都无所谓了,形参列表不同指的是形参个数、类型、顺序不同,不关心形参的名称。

public class overload1 {
    public static void main(String[] args) {
        //认识方法重载,并掌握应用场景
        test();//输出test1
        test(100);//test2100
    }
    public static void test(){
        System.out.println("test1");
    }
    public static void test(int a){
        System.out.println("test2"+a);
    }
}

1、方法重载的应用场景

  • 开发武器系统,功能需求:可以默认发一枚武器;可以指定地区发射一枚武器;可以指定地区发射多枚武器。 
public class overloadtext2 {
    public static void main(String[] args) {
        //掌握方法重载应用场景
        fire();   //默认给岛国发射一枚武器~~~~
        fire("米国");//发射了一枚武器给米国
        fire("米国",999);//发射了999枚武器给米国


    }
    public static void fire(){
        System.out.println("默认给岛国发射一枚武器~~~~");
    }
    public static void fire(String country){
        System.out.println("发射了一枚武器给"+country);
    }
    public static void fire(String country,int num){
        System.out.println("发射了"+num+"枚武器给"+country);
    }
}

另一种写法

public class overloadtext2 {
    public static void main(String[] args) {
        //掌握方法重载应用场景
        fire();   //默认给岛国发射一枚武器~~~~
        fire("米国");//发射了一枚武器给米国
        fire("米国",999);//发射了999枚武器给米国


    }
    public static void fire(){
        //System.out.println("默认给岛国发射一枚武器~~~~");
        fire("岛国");
    }
    public static void fire(String country){
        //System.out.println("发射了一枚武器给"+country);
        fire(country,1);
    }
    public static void fire(String country,int num){
        System.out.println("发射了"+num+"枚武器给"+country);
    }
}

2、return关键字在方法中单独使用

return; 在无返回值方法中,    作用:立即跳出并结束当前方法的执行

联系前面知识点:break;跳出并结束当前所在循环的执行。

                            continue;结束当前所在循环的当次循环,进入下一次执行。

 

 

 

 

 

 

 

  • 19
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值