• JAVA 方法


    方法是一段可以重复执行的代码,我们对其进行封装起来,方便调用,节省代码。

    1. 传统方法 

    1.1 定义传统方法,定义传统方法,需要确定返回值类型,方法名和参数等三要素。

          语法格式 : 

    1. public static 返回值类型 方法名(类型 形参1, 类型 形参2, ……){
    2. 方法体;
    3. [return 表达式];
    4. }

    上面的语法格式中,方法声明前面加入public static 关键字,表示该方法能直接被main() 方法调用。

    1.2 调用传统方法

    方法名(实参1, 实参2, ……)

    1. package String_;
    2. public class foreach_test {
    3. public static void printBook(String name)
    4. {
    5. if(name.equals("孔子")){
    6. System.out.println("孔子的代表作是《论语》");
    7. } else if(name.equals("老子")){
    8. System.out.println("老子的代表作是《道德经》");
    9. } else if (name.equals("司马光")) {
    10. System.out.println("司马光的代表作是《资治通鉴》");
    11. } else {
    12. System.out.println("抱歉,没找到" + name + "的代表作");
    13. }
    14. }
    15. public static double total(double arr[]){
    16. double sum = 0;
    17. for(double d : arr){
    18. sum += d;
    19. }
    20. return sum;
    21. }
    22. public static void main(String[] args) {
    23. printBook("老子");
    24. double score[] = {88.3, 98.4, 96.3};
    25. System.out.println("总分是: " + total(score));
    26. }
    27. }

    1.3  参数传递方式

    Java方法的实参向形参传递参数也有两种方式:传递基本数据类型和传递引用类型。如果传递引用类型(相当于C/C++传递指针),形参的改变影响实参。

    1. package String_;
    2. import java.util.Arrays;
    3. public class Demo0103 {
    4. public static void update(int [] arr, int location, int newValue){
    5. arr[location] = newValue;
    6. String str = Arrays.toString(arr);
    7. System.out.println("形参数组:\t\t" + str);
    8. }
    9. public static void main(String[] args) {
    10. int tempArr[] = {1,3,5};
    11. update(tempArr, 1, 100);
    12. String strTempArr = Arrays.toString(tempArr);
    13. System.out.print("原始数组(实参):\t" + strTempArr);
    14. }
    15. }

    2.  形参长度可变方法

    2.1 定义形参长度可变方法

    1. public static 返回值类型 方法名(类型 形参1, 类型 形参2, 类型……形参){
    2. 方法体;
    3. [return 表达式];
    4. }

    定义方法时,最后一个形参类型后增加省略号,表明该形参能接受个数不确定的实参,多个实参被当成数组传入。

    定义形参长度可变方法需要注意两点:a. 方法只能定义一个可变形参;b. 如果这个方法还有其他形参,他们要放在可变形参之前。

    编译时,编译器会把最后一个可变形参转换为一个数组形参, 并在编译的class文件中标上记号,表明该方法的实参个数可变。

    1. public static int total(int begin, int end, int... arr){
    2. int sum = 0;
    3. if(!(begin >= 0 && end <= arr.length))
    4. return sum;
    5. for(int i = begin; i < end; i++)
    6. sum += arr[i];
    7. return sum;
    8. }

    2.2  调用形参长度可变方法

    调用形参长度可变方法有两种形式:a. 实参是对应类型的一维数组;b. 实参是若干对应类型的变量或常量。

    格式 : 

        方法名(实参1, 实参2, 数组名)

    或者

        方法名(实参1, 实参2, 实参x1, 实参x2, ..., 实参n)
    1. package String_;
    2. public class Demo0202 {
    3. public static void main(String[] args) {
    4. int arr[] = {3,4,5,6};
    5. int sum1 = total(0, arr.length, arr); // 第一种调用,实参是数组
    6. int sum2 = total(0 , 3, new int[]{5,6,7,8,9}); // 第一种调用,实参是数组
    7. int sum3 = total(0, 2, 9, 8, 7, 6);
    8. System.out.println(sum1);
    9. System.out.println(sum2);
    10. System.out.println(sum3);
    11. }
    12. public static int total(int begin, int end, int... arr){
    13. int sum = 0;
    14. if(!(begin >= 0 && end <= arr.length))
    15. return sum;
    16. for(int i = begin; i < end; i++)
    17. sum += arr[i];
    18. return sum;
    19. }
    20. }

    3. 方法重载

    一个类中定义多个同名方法,但这些方法的参数类型和个数不同,称这些方法是重载(overload)。编译阶段,Java编译器根据每个方法的参数类型和个数决定调用哪个具体方法。

    1. package String_;
    2. public class Demo0301 {
    3. public static void main(String[] args) {
    4. int a = 1921;
    5. int b = 28;
    6. int c = 29;
    7. String s1 = "1921";
    8. String s2 = "28";
    9. System.out.println(a + " + " + b + " = " + add(a, b));
    10. System.out.println(s1 + " + " + s2 + " = " + add(s1, s2));
    11. System.out.println("s1 + s2 = " + s1 + s2);
    12. System.out.println(a + " + " + b + " + " + c + " = " + add(a,b,c));
    13. }
    14. public static int add(int a , int b){
    15. return a + b;
    16. }
    17. public static String add(String a, String b){
    18. return a + b;
    19. }
    20. public static int add(int a, int b, int c){
    21. return a + b + c;
    22. }
    23. }

    定义方法重载时,有以下三个问题需要注意。

    a. 一个类中(或者有继承关系的类之间)的方法才能重载,不同类中的方法不能重载。

    如下两个add方法签名一样,但是不是重载关系

    1. class DemoX{
    2. int add(int x, int y){
    3. return x + y;
    4. }
    5. }
    6. class DemoY{
    7. int add(int x, int y){
    8. return x + y;
    9. }
    10. }

    b.  方法重载有3种形式:① 方法声明的形参个数不同;②方法声明中对应的形参类型不同;③方法声明的形参个数和类型都不同;

    c.  方法的返回值类型不同不能作为方法重载的依据;

    如下代码段类的两个add方法不是重载

    1. class DemoX{
    2. int add(int x, int y){
    3. return x + y;
    4. }
    5. String add(int x, int y){
    6. return String.valueOf(x) + String.valueOf(y);
    7. }
    8. }

    4. 递归方法

    1. package String_;
    2. public class Demo0401 {
    3. public static void main(String[] args) {
    4. int number = 10;
    5. System.out.println(number + " != " + factorial(number));
    6. }
    7. public static long factorial(int num){
    8. if(1 == num)
    9. return 1;
    10. else
    11. return factorial(num - 1) * num;
    12. }
    13. }

  • 相关阅读:
    2023苏州科技大学计算机考研信息汇总
    Kubernetes面试整理-ELK和EFK的区别?
    爬虫反爬:JS逆向实战练习1
    AWS认证SAA-C03每日一题
    CMake中set/unset的使用
    3-FPN网络理解
    金仓数据库KingbaseES安全指南--11.客体重用
    OpenCV开发笔记(七十四):OpenCV3.4.1+ffmpeg3.4.8交叉编译移植到海思平台Hi35xx平台
    工程类如安监、基建等项目投标流程规范建议
    Prometheus+Grafana可视化监控【MySQL状态】
  • 原文地址:https://blog.csdn.net/qiukapi/article/details/133975144