日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java方法详解(基础)

發布時間:2023/12/20 java 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java方法详解(基础) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Java方法詳解(基礎)

什么是方法?

System.out.println();調用系統類標準輸出對象方法out。

方法是語句的集合,他們在一起執行一個功能。

方法是解決一類問題的步驟的有序組合。

方法包含于類或對象中。

方法在程序中被創建,在其他地方被引用。

一個方法只完成一個功能。利于后期擴展。

首字母小寫,其余大寫。method

package com.star_line.method;public class Demo01 {//main方法public static void main(String[] args) {int sum = add(1,2);//實慘,實際計算System.out.println(sum);}//加法public static int add(int a, int b){return a + b;}}

3

進程已結束,退出代碼0


package com.star_line.method;public class Demo01 {//main方法public static void main(String[] args) {test();}//加法//形參,定義用public static int add(int a, int b){return a + b;}public static void test(){for (int i = 0; i < 1000; i++) {if (i%5 == 0){System.out.print(i+"\t");}if (i%(5*3)==0){//換行System.out.println();}}}}

0
5 10 15
20 25 30
35 40 45
50 55 60
65 70 75
80 85 90
95 100 105
110 115 120
125 130 135
140 145 150
155 160 165
170 175 180
185 190 195
200 205 210
215 220 225
230 235 240
245 250 255
260 265 270
275 280 285
290 295 300
305 310 315
320 325 330
335 340 345
350 355 360
365 370 375
380 385 390
395 400 405
410 415 420
425 430 435
440 445 450
455 460 465
470 475 480
485 490 495
500 505 510
515 520 525
530 535 540
545 550 555
560 565 570
575 580 585
590 595 600
605 610 615
620 625 630
635 640 645
650 655 660
665 670 675
680 685 690
695 700 705
710 715 720
725 730 735
740 745 750
755 760 765
770 775 780
785 790 795
800 805 810
815 820 825
830 835 840
845 850 855
860 865 870
875 880 885
890 895 900
905 910 915
920 925 930
935 940 945
950 955 960
965 970 975
980 985 990
995
進程已結束,退出代碼0

方法的定義與調用。

方法的定義

方法包含一個方法頭,一個方法體。C++里的函數。

修飾符:修飾符是可選的。告訴編譯器如何使用該方法。定義了該方法的訪問類型。

返回值類型:方法可能會有返回值。returnValueType是方法返回值的數據類型。有些方法有執行所需的操作,但是沒有返回值。在這種方法下,returnValueType的關鍵字是void。

方法名:方法的實際名稱。方法名和參數表共同構成方法簽名。

參數類型:參數像是一個占位符。當方法被調用時,值傳遞給參數。這個值被稱為實參或變量。參數列表是指方法的參數類型、順序和參數的個數。參數是可選的,方法可以不包含任何參數。

方法體:方法體包含具體的語句,定義該方法的功能。

修飾符 返回值類型 方法名(參數類型 參數名){

? 方法體

? return 返回值;

}

方法調用

調用方法:對象名.方法名(實參列表)

方法返回一個值時,方法調用通常被當做一個值。例如:

int larger = max(30,40);

如果方法返回值是void,方法調用一定是一條語句。

System.out.println("Hello,World!"); package com.star_line.method;public class Demo02 {public static void main(String[] args) {int max = max(10,20);System.out.println(max);}//比大小public static int max(int num1,int num2){int result = 0;if (num1 == num2){System.out.println("num1 == num2");return 0;}if(num1 > num2){result = num1;}else {result = num2;}return result;//中止方法} }

20

進程已結束,退出代碼0

public static void main(String[] args) {int max = max(10,10);System.out.println(max); }

num1 == num2
0

進程已結束,退出代碼0

課后拓展:值傳遞(Java)和引用傳遞

值傳遞:在調用函數時,將實際參數復制一份傳遞到函數中。這樣在函數修改了參數,不會影響實際參數。

基本數據使用值傳遞。

實際參數—復制—>實際參數的副本—傳遞—>函數

package com.star_line.method;public class Demo02 {public static void main(String[] args) {/*int max = max(10,10);System.out.println(max);*/int number = 1;int i = 0;i = add(number);System.out.println(number);System.out.println(i);}//加法public static int add(int num){num = num + 1;return num;} }

引用傳遞:在調用函數時,將實際參數的地址傳遞到函數中。函數修改參數,實際參數受到影響。

引用傳遞分兩部分:引用變量(存放在棧里)和對象(存放在堆內存)

引用數據類型使用引用傳遞。

User user = new User("小梅",12); new Demo02().change(user); System.out.println(user);//修改姓名public void change(User username){username.setName("小張");} class User {private String username;private Integer age;public User(){}//無參數的構造方法public User(String username,Integer age){this.username = username;this.age = age;}public void setName(String username){this.username = username;} }

引用變量—復制—>引用變量的副本(指向同一對象)

| |

指向內存中的 傳遞

↓ ↓

對象 函數

引用類型中的String的值存放在常量池中,我們改變副本的值不會影響到原來的值。

package com.star_line.method;public class Demo02 {public static void main(String[] args) {String str = "Hello";new Demo02().change(str);System.out.println("輸出str" + str);}//修改字符串public void change(String a){a = "yes";System.out.println("輸出a" + a);}}

輸出ayes
輸出strHello

進程已結束,退出代碼0

String類型引用變量—復制—>String類型引用變量副本

指向內存中的 指向內存中的

↓ ↓

常量池中Hello 常量池中yes

為什么說Java是值傳遞的?

在Java中,定義方法的時候可以定義參數。比如Java中main方法:

public static void main(String[] args)

其中args就是參數。參數分為形參和實參。

把實際參數的地址復制了一份傳遞給形式參數。實際上是值傳遞,將地址作為值傳遞過去了。地址本身沒有被修改,被修改的是地址指向的內存中的內容。

Java中的傳遞實際上是按共享傳遞。在調用函數時,傳遞給函數的是實參的地址的拷貝(如果實參在棧中,則直接拷貝該值)。在函數內部對參數操作時,需要先按照地址找到具體的值,然后進行操作。如果實參在棧里,因為直接拷貝的是值,所以函數操作內部變量不對外部變量產生影響。如果拷貝的是原值在堆中的地址,則先尋址后操作。因為傳遞的是地址的拷貝所以函數內對值的操作對外部變量是可見的。

按共享傳遞可以說是按值傳遞的特例,所以說Java是值傳遞的。

方法的重載。*

重載就是在一個類中,有相同的函數名稱,但是形參不同。

package com.star_line.method;public class Demo02 {public static void main(String[] args) {double max = max(10,20.0);System.out.println(max);}//比大小intpublic static double max(double num1,double num2){double result = 0;if (num1 == num2){System.out.println("num1 == num2");return 0;}if(num1 > num2){result = num1;}else {result = num2;}return result;//中止方法}//比大小intpublic static int max(int num1,int num2){int result = 0;if (num1 == num2){System.out.println("num1 == num2");return 0;}if(num1 > num2){result = num1;}else {result = num2;}return result;//中止方法}

20.0

進程已結束,退出代碼0

int max = max(10,20);

20

進程已結束,退出代碼0


方法無限多,參數必不同。

方法重載的規則:

  • 方法名稱必須相同。
  • 參數列表必須不同(個數、類型、排列順序不同)
  • 返回值類型可同可不同
  • 僅僅返回值類型不同不足以構成重載
  • 實現理論:

    • 方法名稱相同時,編譯器會根據調用方法的參數個數、參數類型去逐個匹配,以選擇對應的方法。如果匹配失敗,則編譯器報錯。

    練習:之前的add方法重載實現。

    package com.star_line.method;import java.util.Scanner;public class Demo02 {public static void main(String[] args) {add();}//加法public static int add(int num){num = num + 1;return num;}//加法,兩個數相加public static int add(int num1,int num2){int add = 0;add = num1 + num2;return add;}//加法,n個數相加public static void add(){Scanner scanner = new Scanner(System.in);double sum = 0;while(scanner.hasNextDouble()){double x = scanner.nextDouble();sum = sum + x;}System.out.println("當前的和為" + sum);scanner.close();}}

    1
    2
    3
    x
    當前的和為6.0

    命令行傳參。

    有時候希望一個程序運行時再傳遞消息。這要依靠命令行參數給main()參數實現。

    public class

    終端-命令行

    package com.star_line.method;public class Demo03 {//args,length 數組長度public static void main(String[] args) {for (int i = 0; i < args.length; i++) {System.out.println("args["+ i + "]:" + args[i]);}} }

    ? 2013 Microsoft Corporation。保留所有權利。

    IDEA終端

    D:\Java\Program\IntelliJ IDEA\Java_The_Basic_Grammar>javac com.star_line.method.Demo03
    錯誤: 僅當顯式請求注釋處理時才接受類名稱 ‘com.star_line.method.Demo03’
    1 個錯誤

    D:\Java\Program\IntelliJ IDEA\Java_The_Basic_Grammar>


    CMD——必須找到正確路徑(src目錄下,加載完整的包名稱)

    Microsoft Windows [版本 6.3.9600]
    ? 2013 Microsoft Corporation。保留所有權利。

    D:\Java\Program\IntelliJ IDEA\Java_The_Basic_Grammar\The_Basic_Grammar\src\com\star_line\method>javac Demo03.java

    D:\Java\Program\IntelliJ IDEA\Java_The_Basic_Grammar\The_Basic_Grammar\src\com\s
    tar_line\method>java Demo03
    錯誤: 找不到或無法加載主類 Demo03

    D:\Java\Program\IntelliJ IDEA\Java_The_Basic_Grammar\The_Basic_Grammar\src\com\s
    tar_line\method>cd…/

    D:\Java\Program\IntelliJ IDEA\Java_The_Basic_Grammar\The_Basic_Grammar\src\com\star_line>cd…/

    D:\Java\Program\IntelliJ IDEA\Java_The_Basic_Grammar\The_Basic_Grammar\src\com>cd…/

    D:\Java\Program\IntelliJ IDEA\Java_The_Basic_Grammar\The_Basic_Grammar\src>java com.star_line.method.Demo03

    D:\Java\Program\IntelliJ IDEA\Java_The_Basic_Grammar\The_Basic_Grammar\src>java com.star_line.method.Demo03 this is me
    args[0]:this
    args[1]:is
    args[2]:me

    D:\Java\Program\IntelliJ IDEA\Java_The_Basic_Grammar\The_Basic_Grammar\src>

    可變參數。

    jdk1.5后的。不定項參數。java支持傳同類型的可變參數的方法。

    在方法聲明中,在指定參數類型后加一個省略號(…)。

    一個方法中只能制定一個可變參數,且它必須是方法的最后一個參數。任何普通參數必須在它之前聲明。

    package com.star_line.method;public class Demo04 {public static void main(String[] args) {Demo04 demo04 = new Demo04();demo04.test(1,2,3,4,5,6);}public void test(int... i){System.out.println(i[0]);System.out.println(i[1]);System.out.println(i[2]);System.out.println(i[3]);System.out.println(i[4]);System.out.println(i[5]);}}

    1
    2
    3
    4
    5
    6

    進程已結束,退出代碼0

    本質是個數組。


    package com.star_line.method;public class Demo04 {public static void main(String[] args) {Demo04 demo04 = new Demo04();demo04.test(1,2,3,4,5,6);//x:1,...i:2,3,4,5,6}public void test(int x,int... i){}}

    一個簡單的排序算法,誰是最大的。

    package com.star_line.method;public class Demo04 {public static void main(String[] args) {//調用可變參數的方法printMax(34,3,3,2,56.5);printMax(new double[]{1,2,3});//可變參數的本質是數組}public static void printMax(double... numbers){if(numbers.length == 0){System.out.println("No argument passed.");return;}double result = numbers[0];//排序for (int i = 1;i < numbers.length;i++){if (numbers[i] > result){result = numbers[i];}}System.out.println("The max value is " + result);}}

    The max value is 56.5
    The max value is 3.0

    進程已結束,退出代碼0

    demo04.test();
    [I@1b6d3586

    進程已結束,退出代碼0

    demo04.test(1);
    [I@1b6d3586

    進程已結束,退出代碼0

    demo04.test(1);
    System.out.println(i[0]);
    1

    進程已結束,退出代碼0

    System.out.println(i[1]);
    Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: 1
    at com.star_line.method.Demo04.test(Demo04.java:9)
    at com.star_line.method.Demo04.main(Demo04.java:6)

    進程已結束,退出代碼1

    遞歸**

    A方法調用A方法。

    利用遞歸可以用簡單的程序解決復雜的問題。遞歸可以拆解復雜問題為一個與原問題相似的規模較小的子問題來求解。遞歸的能力在于用有限的語句來定義對象的無限集合。

    遞歸包含兩部分:

    • 遞歸頭:什么時候不調用自身方法。如果沒有遞歸頭,將陷入死循環。

    • 遞歸體:什么時候需要調用自身方法。

    package com.star_line.method;public class Demo05 {public static void main(String[] args) {Demo05 test = new Demo05();test.test();}public void test(){test();} } Exception in thread "main" java.lang.StackOverflowError at com.star_line.method.Demo05.test(Demo05.java:10) …… at com.star_line.method.Demo05.test(Demo05.java:10) at com.star_line.method.Demo05.test(Demo05.java:10) at com.star_line.method.Demo05.test(Demo05.java:10) 進程已結束,退出代碼1棧溢出的異常

    計算N的階乘

    package com.star_line.method; //階乘 n!=1*2*3*...*n public class Demo06 {public static void main(String[] args) {System.out.println(f(5));}//1!=1//2! 2*f(1)public static int f(int n){if (n == 1){return 1;}else{return n*f(n-1);}} }

    120

    進程已結束,退出代碼0

    main——>f(5)——>f(4)——>f(3)——>f(2)——>f(1)

    main<——f(5)<——f(4)<——f(3)<——f(2)<——f(1)

    邊界條件:邊界

    前階段:

    返回階段:

    java都是使用棧機制的。

    不要用太多遞歸。


    課后作業

    作業:寫一個計算器,要求實現加減乘除功能,并且能夠循環接收新的數據,通過用戶交互實現。

    思路推薦:

    • 寫四個方法
    • 利用循環+switch進行用戶交互
    • 傳遞需要操作的兩個數
    • 輸出結果

    請輸入第一個數字:
    1
    請輸入第二個數字:
    3
    輸入需要進行的運算符:
    +
    加法的結果是:4.0

    進程已結束,退出代碼0

    請輸入第一個數字:
    1
    請輸入第二個數字:
    3
    輸入需要進行的運算符:

    減法的結果是:-2.0

    進程已結束,退出代碼0

    請輸入第一個數字:
    1
    請輸入第二個數字:
    3
    輸入需要進行的運算符:
    *
    乘法的結果是:3.0

    進程已結束,退出代碼0

    請輸入第一個數字:
    1
    請輸入第二個數字:
    3
    輸入需要進行的運算符:
    /
    除法的結果是:0.3333333333333333

    進程已結束,退出代碼0

    請輸入第一個數字:
    0
    請輸入第二個數字:
    3
    輸入需要進行的運算符:
    /
    除法的結果是:0

    進程已結束,退出代碼0

    請輸入第一個數字:
    3
    請輸入第二個數字:
    0
    輸入需要進行的運算符:
    /
    您的除數為0,請重新輸入

    進程已結束,退出代碼0

    請輸入第一個數字:
    0
    請輸入第二個數字:
    0
    輸入需要進行的運算符:
    /
    Error!
    除法的結果是:0

    進程已結束,退出代碼0

    package com.star_line.method;import java.util.Scanner;/** 作業:寫一個計算器,要求實現加減乘除功能,并且能夠循環接收新的數據,通過用戶交互實現。* 思路推薦:* - 寫四個方法* - 利用循環+switch進行用戶交互* - 傳遞需要操作的兩個數* - 輸出結果*/ public class Homework01 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("請輸入第一個數字:" );double num1 = scanner.nextDouble();System.out.println("請輸入第二個數字:");double num2 = scanner.nextDouble();System.out.println("輸入需要進行的運算符:");String operator = scanner.next();switch (operator){case "+":add(num1,num2);break;case "-" :minuts(num1,num2);break;case "*":multiply(num1,num2);break;case "/":divide(num1,num2);break;default:System.out.println("錯誤,請重新輸入!");}scanner.close();}/*加法* 實現2個數相加* 隨鍵盤輸入數字,空格隔斷* 輸出結果,并且附帶文字。*/public static void add(double num1,double num2){double result = num1 + num2;System.out.println("加法的結果是:" + result);}/*減法* 實現2個數相減* 隨鍵盤輸入數字,空格隔斷* 輸出結果,并且附帶文字。*/public static void minuts(double num1,double num2){double result = num1 - num2;System.out.println("減法的結果是:" + result);}/*乘法*實現2個數相乘* 隨鍵盤輸入數字,空格隔斷* 輸出結果,并且附帶文字。*/public static void multiply(double num1,double num2){double result = num1 * num2;System.out.println("乘法的結果是:" + result);}/*除法* 實現2個數相除* 隨鍵盤輸入數字,空格隔斷* 輸出結果,并且附帶文字。* 除數不能為0**/public static void divide(double num1,double num2){double result = 0;/*第一個數字輸入0,結果為0;第二個數字輸入0,結果報錯。*/if (num1 == 0 && num2 == 0){System.out.println("Error!");}if (num1 == 0){System.out.println("除法的結果是:0");return;}else if (num2 == 0){System.out.println("您的除數為0,請重新輸入");return;}else {result = num1 / num2;System.out.println("除法的結果是:" + result);}}}

    總結

    以上是生活随笔為你收集整理的Java方法详解(基础)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。