1. 程式人生 > 實用技巧 >1. Spring Web MVC

1. Spring Web MVC

技術標籤:Java系列java

JAVA基礎

2020年11月27日

21:01

1 預科

a. 什麼是計算機

  • 能夠按照程式執行,自動、高速處理海量資料的現代化智慧電子裝置。

  • 由硬體常見的形式有臺式計算機、筆記本計算機、大型計算機等。和軟體所組成

  • 廣泛應用在︰科學計算,資料處理,自動控制,計算機輔助設計,人工智慧,網路等領域

b. 硬體及馮諾依曼結構(CPU 記憶體,主機板)

c . 計算機軟體

​ 1. 系統軟體:DOS(Disk Operating System)Windows,Linux,Unix,Android,IOS

​ 2. 應用軟體:WPS,QQ,微信,聯盟,絕地求生

d. 基本DOS命令

  1. 開始+系統+命令提示符
  2. Win鍵+R輸入cmd 開啟控制檯(推薦使用)
  3. 在任意的資料夾下面,按住shift鍵+滑鼠右鍵點選,在此處開啟命令列視窗
  4. 資源管理器的位址列前面加上cmd路徑管理員方式執行:選擇以管理員方式執行

常用的Dos命令

  1. 開始+系統+命令提示符
  2. Win鍵+R輸入cmd 開啟控制檯(推薦使用)
  3. 在任意的資料夾下面,按住shift鍵+滑鼠右鍵點選,在此處開啟命令列視窗
  4. 資源管理器的位址列前面加上cmd路徑管理員方式執行:選擇以管理員方式執行

常用的Dos命令

 碟符切換

 檢視當前目錄下的所有檔案 dir

#切換目錄 cd change directory

cd..
#清理螢幕c1s(clear screen) #退出終端exit #檢視電腦的ip ipconfig #開啟應用 calc mspaint notepad #ping 命令 ping [www.baidu.com](http://www.baidu.com) #檔案操作 md 目錄名 rd目錄名 cd>檔名 del檔名

e. 計算機語言發展史

​ 第一代語言

​ ◆機器語言

​ ◆我們都知道計算機的基本計算方式都是基於二進位制的方式。

​ ◆二進位制:010111001010110010110100

​ ◆這種程式碼是直接輸入給計算機使用的,不經過任何的轉換!

​ 第二代語言

​ ◆組合語言

​ ◆解決人類無法讀懂機器語言的問題

​ ◆指令代替二進位制

​ ◆目前應用:

​ ◆逆向工程

​ ◆機器人

​ ◆病毒

​ ◆…

​ 第三代語言

​ ◆摩爾定律

​ ◆當價格不變時,積體電路上可容納的電晶體數目,約每隔18個月便會增加一倍,效能也將提升一倍。換言之,每一美元所能買到的電腦效能,將每隔18個月翻兩倍以上

​ ◆高階語言

​ ◆大體上分為:面向過程和麵向物件兩大類。

​ ◆C語言是典型的面向過程的語言。C++、JAVA是典型的面向物件的語言。

​ ◆聊聊各種語言:

​ ◆C語言

​ ◆C++語言

​ ◆JAVA語言

​ ◆C#語言

​ ◆Python、PHP、JavaScript

​ ◆…

2 Java入門

01:Java帝國的誕生

02:Java特性和優勢

​ ◆簡單性

​ ◆面向物件

​ ◆可移植性

​ ◆高效能

​ ◆分散式

​ ◆動態性

​ ◆多執行緒

​ ◆安全性

​ ◆健壯性

03:Java三大版本

​ ◆Write Once、Run Anywhere

​ ◆JavaSE:標準版(桌面程式,控制檯開發.……)

​ ◆JavaME:嵌入式開發(手機,小家電.……)

​ ◆JavaEE:E企業級開發(web端,伺服器開發.…)

04:JDK, JRE、JVM

​ ◆JDK:Java Development Kit

​ ◆JRE:Java Runtime Environment

​ ◆JVM:JAVA Virtual Machine

05:Java開發環境搭建

​ ◆JDK下載與安裝

​ ◆配置環境變數

​ ◆JDK目錄介紹

​ ◆HelloWorld 及簡單語法規則

​ ◆Notepad++安裝和使用

解除安裝JDK

​ 1.刪除Java的安裝目錄

​ 2.刪除AVA_HOME

​ 3.刪除path下關於Java的目錄

​ 4.java -version

安裝JDK

​ 1.百度搜索JDK8,找到下載地址

​ 2.同意協議

​ 3.下載電腦對應的版本

​ 4.雙擊安裝JDK

​ 5.記住安裝的路徑

​ 6.配置環境變數

​ 1.我的電腦->右鍵->屬性

​ 2.環境變數->JAVAHOM日

​ 3.配置path變數

​ 7.測試JDK是否安裝成功

​ 1.開啟cmd

​ 2.java -version

06:HelloWorld詳解

​ HelloWorld

​ 1.隨便新建一個資料夾,存放程式碼

​ 2.新建一個java檔案

​ 檔案字尾名為.java

​ Hello.java

​ 【注意點】系統可能沒有顯示檔案字尾名,我們需要手動開啟

​ 3.編寫程式碼

public class Hello{

	public static void main(string[]args){

		system.out.print("Hello,world!";

}

​ 4.編譯 javac java檔案,會生成一個class檔案

​ 5.執行class檔案,java class檔案

07: Java程式執行機制

​ ◆編譯型

​ ◆解釋型
​ ◆程式執行機制

08: 使用IDEA開發

3. Java基礎

01:註釋

​ ◆Javoa中的註釋有三種:

​ ◆單行註釋
​ ◆多行註釋
​ ◆文件註釋

02: 識別符號

​ ◆關鍵字

​ ◆單行註釋

識別符號注意點

  • 所有的識別符號都應該以字母(A-z或者a-z),美元符($)、或者下劃線()開始

  • 首字元之後可以是字母(A-z或者a-z),美元符($)、下劃線()或數字的任何字元組合

  • 不能使用關鍵字作為變數名或方法名。

  • 識別符號是大小寫敏感

  • 合法識別符號舉例:age、$salary、_value、_1_value

  • 非法識別符號舉例:123abc、-salary、#abc

    public static void main(String[]args){
        string 王者榮耀 = "最強王者";
        System.out.println(王者榮耀);
         }
    
  • 可以使用中文命名,但是一般不建議這樣去使用,也不建議使用拼音,很Low

03: 資料型別

  • 強型別語言
    ◆要求變數的使用要嚴格符合規定,所有變數都必須先定義才能使用

  • 弱型別語言
    ◆Java的資料型別分為兩大類
    ◆基本型別(primitive type)

    ◆引用型別(reference type)

    什麼是位元組
    ◆位(bit):是計算機內部資料儲存的最小單位,11001100是一個八位二進位制數。
    ◆位元組(byte):是計算機中資料處理的基本單位,習慣上用大寫B來表示,
    ◆1B(byte,位元組)=8bit(位)
    ◆字元:是指計算機中使用的字母、數字、字和符號

1bit表示1位,
1Byte表示一個位元組1B=8b。
1024B=1KB1024KB=1M1024M=1G.

04: 資料型別擴充套件及面試題講解

​ 浮點資料型別不能完全用來比較。

05: 型別轉換

◆由於Java是強型別語言,所以要進行有些運算的時候的,需要用到型別轉換。

------------------------------------>byteshortchar->int->long->float->double

◆運算中,不同型別的資料先轉化為同一型別,然後進行運算。
◆強制型別轉換

◆運算中,不同型別的資料先轉化為同一型別,然後進行運算。
◆強制型別轉換

◆自動型別轉換

注意點:
1.不能對布林值進行轉換

2.不能把物件型別轉換為不相干的型別
3.在把高容量轉換到低容量的時候,強制轉換
4.轉換的時候可能存在記憶體溢位,或者精度問題!

06: 變數、常量、作用域

變數
◆變數是什麼:就是可以變化的量!
◆Java是一種強型別語言,每個變數都必須宣告其型別。
◆Java變數是程式中最基本的儲存單元,其要素包括變數名,變數型別和作用域

type varName[=value][{,varName[=value]}];
//資料型別變數名=值;可以使用逗號隔開來宣告多個同類型變數。

◆注意事項:
· 每個變數都有型別,型別可以是基本型別,也可以是引用型別。
· 變數名必須是合法的識別符號。
· 變數宣告是一條完整的語句,因此每一個宣告都必須以分號結束

變數作用域
◆類變數 static 定義在類中,方法塊外直接引用
◆例項變數 定義在類中,方法塊外,引用時用new進行例項化,若不初始化,預設值為0.(除了基本型別,其餘預設值都是null)

//變數型別  變數名字 = new 變數名();

◆區域性變數 定義在方法塊中,必須宣告和初始化值,直接引用

public class Variable{
static int allClicks=e;//類變數
    String str="hello world";//例項變數
    public void method(){
		inti=e;//區域性變數
}

常量
◆常量(Constant):初始化(initialize)後不能再改變值!不會變動的值。
◆所謂常量可以理解成一種特殊的變數,它的值被設定後,在程式執行過程中不允許被改變。(修飾符不存在先後順序 final static)

final 常量名=值;
final double PI=3.14

◆常量名一般使用大寫字元。

變數的命名規範
◆所有變數、方法、類名:見名知意
◆類成員變數:首字母小寫和駝峰原則:monthSalary
◆區域性變數:首字母小寫和駝峰原則常量:大寫字母和下劃線:MAX VALUE

◆類名:首字母大寫和駝峰原則:Man,GoodMan

◆方法名:首字母小寫和駝峰原則:run(),runRun0

07: 基本運算子

◆Java 語言支援如下運算子:

·算術運算子:+,,,/,%,++,–
·賦值運算子=
·關係運算符:>,<,>=,<=,==,!=instanceof
·邏輯運算子:&&,l,!
·位運算子:&,|,A,~,>>,<<,>>>(瞭解!!!)
·條件運算子?:
·擴充套件賦值運算子:+=,=,
=,/=

二元運算時自動低轉高(a%b 對a取餘)

08: 自增自減運算子初識Math類

​ a++ 執行後加一先賦值後自增

​ ++a 加一後執行先自增後賦值

09:邏輯運算子、位運算子

//與(and)或(or)非(取反)
boolean a=true;
boolean b=false;
System.out.print1n("a 8&b:"+(a&&b));//邏輯與運算:兩個變數都為真,結果才為true 
System.out.print1n("a || b:"+(allb));//邏輯或運算:兩個變數有一個為真,則結果才為true 
System.out.print1n("!(a&&b):"+!(a&&b));//如架是真,則變為假,如果是假則變為真
//短路運算

​ 位運算

/*
A=00111100
B=00001101
===================
A&B=0000 1100
A/B=0011 1101
A^B=0011 0001
~B=1111  0010
===========================================================
2*8=16    2*2*2*2

<<   *2
>>	 /2
    
    0000 0000  0
     0000 0001  1
     0000 0010  2
     0000 0011  3
     0000 0100  4
     0000 1000  5
     0001 0000  6
*/
System.out.println(2<<3);

10:三元運算子及小結

	int a=10;
    int b=20;
        
    a+=b;//a=a+b
    a-=b;//a=a-b 
    System.out.println(a);
     //字串連線符+,string 
    System.out.printin(""+a+b);//拼接
	System.out.println(a+b+"") ;//運算
===========================================================
	//三元運算子
	//	x?y:z
	//如果x==true,則結果為y,否則結果為z

10:包機制

◆為了更好地組織類,Java提供了包機制,用於區別類名的名稱空間。
◆包語句的語法格式為:

package pkg1[.pkg2[.pkg3..J];

一般利用公司域名倒置作為包名;
◆為了能夠使用某一個包的成員,我們需要在Java 程式中明確匯入該包。使用“import”語句可完成此功能

import package1[.package2..].(classnamel*;

11:包JavaDoce生成文件

◆javadoc命令是用來生成自己API文件的
◆引數資訊
◆@author作者名
◆@version 版本號
◆@since 指明需要最早使用的jdk版本
◆@param引數名
◆@return 返回值情況
◆@throws 異常丟擲情況

package com. kuang. base;
/**
*@ author sha
*@ version 1.e
*@ since 1.8
*/
public class Doc{
String name;
/**
*@ author sha
*@ param name
*@ return
*@ throws Exception */
public string test(string name) throws Exception{
return name;
}

4. Java流程控制

01:使用者互動Scanner

Scanner物件

◆之前我們學的基本語法中我們並沒有實現程式和人的互動,但是Java給我們提供了這樣一個工具類,我們可以獲取使用者的輸入。之前我們學的基本語法中我們並沒有實現程式和人的互動,但是Java給我們提供了這樣一個工具類,我們可以獲取使用者的輸入。java.util.Scanner是Java5的新特徵,我們可以通過Scanner類來獲取使用者的輸入。

◆基本語法:

scanner s =new Scanner(System.in);

◆通過Scanner類的next()與nextLine()方法獲取輸入的字串,在讀取前我們一般需要使用hasNext()與hasNextLine()判斷是否還有輸入的資料。

//凡是屬於屬於IO流的數如果不關閉會一直佔用資源,要養成好習慣用完關掉。

◆next():

  • 1、一定要讀取到有效字元後才可以結束輸入。
  • 2、對輸入有效字元之前遇到的空白,next(方法會自動將其去掉。
  • 3、只有輸入有效字元後才將其後面輸入的空白作為分隔符或者結束符。
  • 4、next0不能得到帶有空格的字串。

◆nextLine():

  • 1、以Enter為結束符,也就是說nextLine()方法返回的是輸入回車之前的所有字元。
  • 2、可以獲得空白。

02:Scanner進階使用

package text;
import java.util.Scanner;
public class Demo03 {
    public static void main(String[] args) {
        //輸入多個數字,,並求其和與平均數,沒輸入一個數字用回車確認,通過輸入非數字來結束輸入並輸出執行結果。
        Scanner input = new Scanner(System.in);
        //和
        double sum = 0;
        //計算輸入了多少個數字
        int m = 0;
        //要通過迴圈判斷每一次輸入並在裡面對每一次進行求和和統計
        while (input.hasNextDouble()) {
            double x = input.nextDouble();
            m = m + 1;
            sum = sum + x;
        }
        System.out.println(m + "個數的和為" + sum);
        System.out.println(m + "個數的平均值是" + sum / m);
        input.close();
    }
}

03:順序結構

  • JAVA的基本結構就是順序結構,除非特別指明,否則就按照順序一句一句執行。

  • 順序結構是最簡單的演算法結構。

    [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-uRA4NqY9-1610818789179)(C:\Users\luoluo\AppData\Roaming\Typora\typora-user-images\image-20210116100409781.png)]

  • 語句與語句之間,框與框之間是按從上到下的順序進行的,它是由若干個依次執行的處理步驟組成的,它是任何一個演算法都離不開的一種基本演算法結構。

04:if選擇結構

  1. if單選擇結構

    • 我們很多時候需要去判斷一個東西是否可行,然後我們才去執行,這樣一個過程在程式中用if語句來表示

      [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-Eyss9EIg-1610818789181)(C:\Users\luoluo\AppData\Roaming\Typora\typora-user-images\image-20210116101212337.png)]

    • 語法:

       if(布林表示式){
          //如果布林表示式為true將執行的語句 
       }
       
      
  2. if雙選擇結構

    • 那現在有個需求,公司要收購一個軟體,成功了,給人支付100萬元,失敗了,自己找人開發。這樣的需求用一個if就搞不定了,我們需要有兩個判斷,需要一個雙選擇結構,所以就有了if-else結構。

      [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-8UDs8lar-1610818789183)(C:\Users\luoluo\AppData\Roaming\Typora\typora-user-images\image-20210116103851605.png)]

    • 語法:

      if(布林表示式){
      //如果布林表示式的值為true}else{
      }else{
      //如果布林表示式的值為false
      }
      
  3. if多選擇結構

      • 我們發現剛才的程式碼不符合實際情況,真實的情況還可能存在ABCD,存在區間多級判斷。比如90-100就是A,80-90 就是B…等等,在生活中我們很多時候的選擇也不僅僅只有兩個,所以我們需要一個多選擇結構來處理這類問題!

        [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-p7Z5WyEo-1610818789186)(C:\Users\luoluo\AppData\Roaming\Typora\typora-user-images\image-20210116105833743.png)]

      • 語法:

        if(布林表示式1){
        //如果布林表示式1的值為true執行程式碼
        }else if(布林表示式2){
        //如果布林表示式2的值為true執行程式碼
        }else if(布林表示式3){
        //如果布林表示式3的值為true執行程式碼
        }else {
        //如果以上布林表示式都不為true執行程式碼
        }
        
  4. 巢狀的if結構

    • 使用巢狀的if…else 語句是合法的。也就是說你可以在另一個if或者else if語句中使用if 或者else if 語句。你可以像if語句一樣巢狀else if…else.

    • 語法:

      if(布林表示式*1){
      //如果布林表示式1的值為true執行程式碼
      if(布林表示式2){
      //如果布林表示式2的值為true執行程式碼)
      	}
      }
      

05:Switch選擇結構

  1. switch多選擇結構

    • 多選擇結構還有一個實現方式就是switch case語句。

    • switch case語句判斷一個變數與一系列值中某個值是否相等,每個值稱為一個分支。

      switch(expression){
      	case value :
      		//語句
      	break;//可選
          case value :
      		//語句
       		 break; //可選      
           //你可以有任意數量的case語句
          default : //可選
         //語句     
         }     
      
    • switch 語句中的變數型別可以是:

      • byte、short、int或者char。
      • 從Java SE 7開始
      • switch支援字串String型別了
      • 同時case標籤必須為字串常量或字面量。

06:While迴圈詳解

  1. while迴圈

    • while是最基本的迴圈,它的結構為:

      while(布林表示式 ) {
      //迴圈內容
      }
      
    • 只要布林表示式為true,迴圈就會一直執行下去。

    • 我們大多數情況是會讓迴圈停止下來的,我們需要一個讓表示式失效的方式來結束迴圈。

    • 少部分情況需要迴圈一直執行,比如伺服器的請求響應監聽等。

    • 迴圈條件一直為true就會造成無限迴圈【死迴圈】,我們正常的業務程式設計中應該儘量避免死迴圈。會影響程式效能或者造成程式卡死奔潰!

    • 思考:計算1+2+3+…+100=?

      package text;
      public class WhileDemo01 {
          public static void main(String[] args) {
              //計算1+2+3+...100=?
              int sum = 0;
              int i = 0;
              while (i <= 100) {
                  sum = sum + i;
                  i++;
              }
              System.out.println(sum);
          }
      }
      
      

07:Do…While迴圈

  • 對於while語句而言,如果不滿足條件,則不能進入迴圈。但有時候我們需要即使不滿足條件,也至少執行一次。

  • do…while迴圈和while迴圈相似,不同的是,do…while迴圈至少會執行一次。

    do {
    //程式碼語句
    }while(布林表示式);
    
  • While和do-While的區別:

    • while先判斷後執行。dowhile是先執行後判斷!
    • Do…while總是保證迴圈體會被至少執行一次!這是他們的主要差別。

08:For迴圈

  • 雖然所有迴圈結構都可以用while 或者do…while表示,但Java提供了另一種語句——for迴圈,使一些迴圈結構變得更加簡單。

  • for迴圈語句是支援迭代的一種通用結構,是最有效、最靈活的迴圈結構。

  • for迴圈執行的次數是在執行前就確定的。語法格式如下:

    for(初始化;布林表示式;更新){
    程式碼語句
    }
    /*
    關於for迴圈有以下幾點說明:
    	最先執行初始化步驟。可以宣告一種型別,但可初始化一個或多個迴圈控制變數,也可以是空語句。
    	然後,檢測布林表示式的值。如果為 true,迴圈體被執行。如果為false,迴圈終止,開始執行迴圈體後面的語句。
    	執行一次迴圈後,更新迴圈控制變數(迭代因子控制迴圈變數的增減)。
    	再次檢測布林表示式。迴圈執行上面的過程。
     */
    
  • 練習1:計算0到100之間的奇數和偶數的和

    package text;
    public class F0oDemo02 {
        public static void main(String[] args) {
           int sum1=0;
           int sum2=0;
            for(int i=1;i<=100;i++){
                if(i%2==0){
                    sum1=sum1+i;
                }else{
                    sum2=sum2+i;
                }
            }
            System.out.println("0到100之間的偶數和為:"+sum1);
            System.out.println("0到100之間的奇數和為:"+sum2);
        }
    }
    
    
  • 練習2:用while或for迴圈輸出1-1000之間能被5整除的數,並且每行輸出3個

    package text;
    public class ForDemo03 {
        public static void main(String[] args) {
            int k=0;
            for (int i = 1; i <=1000; i++) {
                if(i%5==0){
                    System.out.print(i+" ");
                    k++;
                    if(k>2){
                        System.out.println("");
                        k=0;
                    }
                }
            }
        }
    }
    

    09: 列印九九乘法表

    package text;
    public class ForDemo03 {
        public static void main(String[] args) {
            int k=0;
            for (int i = 1; i <=1000; i++) {
                if(i%5==0){
                    System.out.print(i+" ");
                    k++;
                    if(k>2){
                        System.out.println("");
                        k=0;
                    }
                }
            }
        }
    }
    
    

10:增強for迴圈

  • 這裡我們先只是見一面,做個瞭解,之後陣列我們重點使用

  • Java5引入了一種主要用於陣列或集合的增強型for迴圈。

  • Java增強for迴圈語法格式如下:

    for(宣告語句:表示式){
    //程式碼句子
    }
    
  • 宣告語句:宣告新的區域性變數,該變數的型別必須和陣列元素的型別匹配。其作用域限定在迴圈語句塊,其值與此時陣列元素的值相等。

  • 表示式:表示式是要訪問的陣列名,或者是返回值為陣列的方法。

    package text;
    public class ForDemo05 {
        public static void main(String[] args) {
            int[] numbers = {10,20,30,40,50};
            for(int i=0;i<5;i++){
                System.out.println(numbers[i]);
            }
            System.out.println("===================");
            //遍歷陣列元素
            for(int x:numbers){
                System.out.println(x);
            }
        }
    }
    

11: break、continue、goto

  • break在任何迴圈語句的主體部分,均可用break控制迴圈的流程。break用於強行退出迴圈,不執行迴圈中剩餘的語句。(break語句也在switch語句中使用)

  • continue語句用在迴圈語句體中,用於終止某次迴圈過程,即跳過迴圈體中尚未執行的語句,接著進行下一次是否執行迴圈的判定。

    //break在任何迴圈語句的主體部分,均可用break控制迴圈的流程。break用於強行退出迴圈,不執行迴圈中剩餘的語句。(break語句也在switch語句中使用)
    //continue語句用在迴圈語句體中,用於終止某次迴圈過程,即跳過迴圈體中尚未執行的語句,接著進行下一次是否執行迴圈的判定。
    
  • 關於goto關鍵字

    • goto關鍵字很早就在程式設計語言中出現。儘管goto仍是Java的一個保留字,但並未在語言中得到正式使用;Java沒有goto。然而,在break和continue這兩個關鍵字的身上,我們仍然能看出一些goto的影子—帶標籤的break和continue。

    • “標籤”是指後面跟一個冒號的識別符號,例如: label:

    • 對Java來說唯一用到標籤的地方是在迴圈語句之前。而在迴圈之前設定標籤的唯一理由是:我們希望在其中巢狀另個迴圈,由於break和continue關鍵字通常只中斷當前迴圈,但若隨同標籤使用,它們就會中斷到存在標籤的地方。

      package text;
      
      public class LablelDemo {
          public static void main(String[] args) {
              //列印101-150之間所有的質數
              //質數是指在大於1的自然數中,除了一和它本身以外不再有其他因數的自然數。
              int count = 0;
              outer:
              for (int i = 101; i <= 150; i++) {
                  for (int j = 2; j <= i / 2; j++) {
                      if (i % j == 0) {
                          continue outer;
                      }
                  }
                  System.out.print(i + " ");
              }
          }
      }
      
      

12: 列印三角形及Debug

package text;
public class TestDemo01 {
    //列印三角形
    public static void main(String[] args) {
        for (int i = 1; i <= 5; i++) {
            for (int j = 5; j >= i; j--) {
                System.out.print(" ");
            }
            for (int j = 1; j <= i; j++) {
                System.out.print("*");
            }
            for (int j = 1; j < i; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

5. Java方法

01: 什麼是方法

  • System.out.printIn(),那麼它是什麼呢?
  • Java方法是語句的集合,它們在一起執行一個功能。
    • 方法是解決一類問題的步驟的有序組合
    • 方法包含於類或物件中
    • 方法包含於類或物件中
  • 設計方法的原則:方法的本意是功能塊,就是實現某個功能的語句塊的集合。我們設計方法的時候,最好保持方法的原子性,就是一個方法只完成1個功能,這樣利於我們後期的擴充套件

02: 方法的定義和呼叫

  • Java的方法類似於其它語言的函式,是一段用來完成特定功能的程式碼片段,一般情況下,定義一個方法包含以下語法:

  • **方法包含一個方法頭和一個方法體。**下面是一個方法的所有部分:

    • 修飾符:修飾符,這是可選的,告訴編譯器如何呼叫該方法。定義了該方法的訪問型別。

    • 返回值型別∶方法可能會返回值。returnValueType是方法返回值的資料型別。有些方法執行所需的操作,但沒有返回值。在這種情況下,returnvalueType是關鍵字void.

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

    • 引數型別:引數像是一個佔位符。當方法被呼叫時,傳遞值給引數。這個值被稱為實參或變數。引數列表是指方法的引數型別、順序和引數的個數。引數是可選的,方法可以不包含任何引數。

      • 形式引數:在方法被呼叫時用於接收外界輸入的資料。
      • 實參:呼叫方法時實際傳給方法的資料。
    • 方法體:方法體包含具體的語句,定義該方法的功能。

      修飾符返回值型別方法名(引數型別引數名){
      ...
      方法體
      ...
      return返回值;
      }
      
    • 方法呼叫

      • 呼叫方法:物件名.方法名(實參列表)

      • Java支援兩種呼叫方法的方式,根據方法是否返回值來選擇。當方法返回一個值的時候,方法呼叫通常被當做一個值。例如:

        int larger = max(3040);
        
      • 如果方法返回值是void,方法呼叫一定是一條語句。

        System.out.println( "Hello,World! ");
        

03: 方法的過載

  • 過載就是在一個類中,有相同的函式名稱,但形參不同的函式。
  • 方法的過載的規則:
    • 方法名稱必須相同。
    • 引數列表必須不同(個數不同、或型別不同、引數排列順序不同等).
    • 方法的返回型別可以相同也可以不相同。
    • 僅僅返回型別不同不足以成為方法的過載.
  • 實現理論:
    • 方法名稱相同時,編譯器會根據呼叫方法的引數個數、引數型別等去逐個匹配,以選擇對應的方法,如果匹配失敗,則編譯器報錯。

04: 命令列傳遞引數

  • 有時候你希望執行一個程式時候再傳遞給它訊息。這要靠傳遞命令列引數給main()函式實現。

    public class CommandLine {
    	public static void main(String args[]){
    		for(int i=6; i<args.length; i++){
    		system.out.println( "args[" +i + "]: " + args[i]);
    		}
    	}
    }
    

    05: 可變引數

    • JDK 1.5開始,Java支援傳遞同類型的可變引數給一個方法。

    • 在方法宣告中,在指定引數型別後加一個省略號(.…).

    • 一個方法中只能指定一個可變引數,它必須是方法的最後一個引數。任何普通的引數必須在它之前宣告。

      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++){
              result = numbers[i];
              }
          System.out.println("The max value is"+ result);
      }
      

06: 遞迴講解

  • A方法呼叫B方法,我們很容易理解!
  • 遞迴就是:A方法呼叫A方法!就是自己呼叫自己
  • 利用遞迴可以用簡單的程式來解決一些複雜的問題。它通常把一個大型複雜的問題層層轉化為一個與原問題相似的規模較小的問題來求解,遞迴策略只需少量的程式就可描述出解題過程所需要的多次重複計算,大大地減少了程式的程式碼量。遞迴的能力在於用有限的語句來定義物件的無限集合。
  • 遞迴結構包括兩個部分:
    • 遞迴頭:什麼時候不呼叫自身方法。如果沒有頭,將陷入死迴圈。
    • 遞迴體:什麼時候需要呼叫自身方法。

函式實現。

public class CommandLine {
	public static void main(String args[]){
		for(int i=6; i<args.length; i++){
		system.out.println( "args[" +i + "]: " + args[i]);
		}
	}
}

05: 可變引數

  • JDK 1.5開始,Java支援傳遞同類型的可變引數給一個方法。

  • 在方法宣告中,在指定引數型別後加一個省略號(.…).

  • 一個方法中只能指定一個可變引數,它必須是方法的最後一個引數。任何普通的引數必須在它之前宣告。

    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++){
            result = numbers[i];
            }
        System.out.println("The max value is"+ result);
    }
    

06: 遞迴講解

  • A方法呼叫B方法,我們很容易理解!
  • 遞迴就是:A方法呼叫A方法!就是自己呼叫自己
  • 利用遞迴可以用簡單的程式來解決一些複雜的問題。它通常把一個大型複雜的問題層層轉化為一個與原問題相似的規模較小的問題來求解,遞迴策略只需少量的程式就可描述出解題過程所需要的多次重複計算,大大地減少了程式的程式碼量。遞迴的能力在於用有限的語句來定義物件的無限集合。
  • 遞迴結構包括兩個部分:
    • 遞迴頭:什麼時候不呼叫自身方法。如果沒有頭,將陷入死迴圈。
    • 遞迴體:什麼時候需要呼叫自身方法。