0


Java方法【详细】

⭐前言⭐

※※※大家好!我是同学〖森〗,一名计算机爱好者,今天让我们进入学习模式。若有错误,请多多指教。

👍** 点赞 收藏 📝留言 都是我创作的最大的动力!**

1.什么是方法?

    **方法是一些Java语句构成的代码块,用来共同实现某些功能。**和C语言的函数类似。

方法像洗衣机,我们提供一些脏衣服,洗衣液(参数),通过洗衣机的运转(方法体),脏衣服就变成干净的衣服(返回值)。

方法的意义:

(1)使相同的功能的代码聚集在一起,提高代码的可读性。

(2)频繁使用某个功能,使用方法只用编写一次,大大提高了编写代码的效率。

方法的注意点:

(1)方法只有在调用的时候会被执行,方法不被调用时不会被执行的 。

(2)方法中的变量都属于局部变量。方法结束之后,局部变量占用的内存会自动释放。

(3)修改方法的形参,方法的实参不会改变,可以理解为形参是实参的备份。

2.方法定义

//    修饰符 返回值类型 方法名(参数类型 参数名) {
//     ...
//        方法体
//     ...
//        [return 返回值; ]//return可以终止方法,
//    }

    //求长方形的面积
    public static int rectangleArea(int a, int b){
        return a * b;  //方法体
    }

(1)修饰符: pubic、static、final、private等

(2)返回值类型:如果方法有返回值,返回值的类型需要和return后面的返回值类型一致

    返回值的类型**由小转大,**编译器可以自动转换,但会提出**警告。**

** ** ** 例如上例题中将int变成long;**

** 返回值的类型由大转小,编译器会报错,需要将return 后的数据强转为相应类型。**

** 例如:例题中将int变成short;需要将ab 改成(short)(ab)**

(3)方法名:采用小驼峰命名法:

    第一个单词以小写字母开始,第二个单词的首字母大写。例如:firstName。

(4)参数列表:如果方法没有参数,()中什么都不写,如果有参数,需指定参数类型,多个 参数之间使用逗号隔开。

(5)方法体:实现某些特定功能的语句。

(6)在Java中,方法必须定义在类中,方法不能嵌套定义,没有方法声明一说。

3.方法的调用

方法的调用过程:

调用方法---**>*传递参数---*>*找到方法地址---*>*执行被调方法的方法体---*>被调方法结束返回---**>回到主调方法继续往下执行。

public class Mian{

  public static int rectangleArea(int a, int b){
        return  a * b;  //方法体
    }

    public static void main(String[] args) {
        int ret = rectangleArea(5, 7); //实参
        System.out.println("长为7,宽为5的长方形的面积为:" + ret);
    }

}  

(1)** 形参和实参的类型需要一一对应,顺序也需要一一对应。**

(2)调用过程为,先执行main方法,执行到rectangleArea这个调用方法会调用该方法,将 5,7两个实参分别传给a,b两个形参。找到rectangleArea的地址,执行return a *b; rectangleArea方法结束销毁。 执行main函数下面的代码。

(3)方法调用时什么时候“类名.”是可以省略的。什么时候不能省略?

** a()方法调用b()方法的时候,a和b方法都在同一个类中,“类名.”可以省略
如果不在同一个类中“类名.”不能省略。**

4.用方法来交换a,b的值;

    public static void swap(int a, int b){
        int tem = a;
        a = b;
        b = tem;
    }

    public static void main(String[] args) {
        int a = 5 ,b = 8;
        System.out.println("交换前:a = " + a + ", b = " + b);
        swap(a,b);
        System.out.println("交换后:a = " + a + ", b = " + b);
        
    }

//输出结果:
//    交换前:a = 5, b = 8
//    交换后:a = 5, b = 8

有没有小伙伴会这样写;

由于形参a和b只是实参的备份,所以修改备份,原数据不会改变。备份在方法调用结束后就会被销毁。而你交换前,后都是在打印的原数据。所以才会出现没有交换的局面。

就好像小明有一个房子。开发商重新盖了一个一模一样的房子,里面什么家具,装修风格和小明的一样。开发商现在把这个房子卖给了小王。不管小王在房子里怎么折腾,都不会影响你房子里面的东西;

**正确的解决办法: **

    public static void swap(int[] arr){
        int tem = arr[0];
        arr[0] = arr[1];
        arr[1] = tem;
    }

    public static void main(String[] args) {
        int[] arr = {5, 8};
        System.out.println("交换前:arr[0] = " + arr[0] + ", arr[1] = " + arr[1]);
        swap(arr);
        System.out.println("交换后:arr[0] = " + arr[0] + ", arr[1] = " + arr[1]);

    }

    /*输出结果:
    交换前:arr[0] = 5, arr[1] = 8
    交换后:arr[0] = 8, arr[1] = 5*/

为什么传入数组就可以进行交换了呢?

这是因为数组是引用类型,你传给形参的只是一个地址,方法修改的是该地址内的数据,而main函数也是调用的该地址内的数据。

就好像小明有一个房子。开发商把小明房子的钥匙复制了一份,开发商现在把复制的这个钥匙卖给了小王。小王是个邋遢大汉,等到你回到家时,你发现你的房子里面像遭了贼一样。

5.方法重载

为了防止程序员要记很多功能相似的方法名,加重程序的负担,就有了方法的重载;

例如同是两数相加 由于形参的类型不同,可能会有addDoulbe,addInt,addFloat,addLong等方法;所以可不可以把这些方法的方法名都变成add呢?所以就出现了方法的重载。

Java中,如果多个方法的名字相同,参数列表不同,则称该几种方法被重载了

重点:

**(1)方法名必须相同 **

**(2)参数列表必须不同(参数的个数不同、参数的类型不同、类型的次序必须不同) **

(3)与返回值类型是否相同无关

例:

方法的重载:需要的是方法名一样,与方法的返回值无关。所以我们只需要关注方法的形参

** ** 因为long b 和int b 的参数类型不同,可以构成重载。

这是由于参数的****次序不同,可以构成重载

这是由于参数的数目不同,可以构成方法的重载

我们 比较的是参数的类型不同,而不是参数名不同,即使返回不同,这种情况也不能构成方法的重载。

方法中不能定义两个名字相同的变量,为什么类中可以定义两个方法名相同的方法呢?

这是因为方法经过编译器编译后的名字为

方法全路径名**+参数列表+返回值类型,构成方法完整的名字。**

并不是单单靠方法名来区分的,只要参数列表不同,就可作为区分;

例如:

public static long add(int a, int b){ }方法的完整名字为:**long add (int, int)**

6.break、return 和 System.exit()的区别;

(1)break用来终止switch和离它最近的循环。

(2)return用来终止离它最近的一个方法。

(3)System.exit()用来结束程序运行。


本文转载自: https://blog.csdn.net/weixin_62263267/article/details/127021159
版权归原作者 同学〖森〗 所有, 如有侵权,请联系我们删除。

“Java方法【详细】”的评论:

还没有评论