零基础自学java_零基础学Java——小白的Java之路(4)
方法
方法是一段可以重復調用的代碼塊,這個代碼塊實現了某個功能,當我們的程序中需要這一個功能的時候,調用這個方法即可,不再需要重復書寫這個功能的代碼。
方法的定義格式
public static ( ,... ){
方法體;
[return 表達值]
注意:返回值類型為void的時候,方法沒有返回值,return可以省略
}
格式說明:
public ?? 表示公共的,修飾的方法可以在任意類中使用。
static 表示靜態的,修飾的方法可以通過類名直接調用,如若在同一個類中,類名可以省略,直接通過方法名調用。
返回值類型 表示通過調用方法可以得到的結果的數據類型,它可以是Java數據類型中的任意數據類型。
void是個特殊的返回值類型,它表示這個方法完成功能,但是不返回,所以當返回值類型為void的時候,return可以省略。
如果返回值是某個具體的數據類型,則表示這個方法完成后會返回一個具體值,那么在方法體的最后需要用一個return語句返回這個值。
方法名稱 表示方法的名字,應該符合標識符規范
參數列表 表示這個方法要完成功能需要參照的數據。
定義方法時稱作形參,調用方法時需要給出具體的參數值稱作實參。實參與形參一一對應。
一個方法可以有多個參數,用逗號隔開。如:
參數類型1? 參數名字1,參數類型2? 參數名字2……
方法體 放在{}中,是實現方法功能的代碼塊。
如果方法不包含參數,且沒有返回值,我們稱為無參無返回值的方法。
方法的使用分為兩步:
第一步,定義方法
例如:下面代碼定義了一個方法名為 show ,沒有參數,且沒有返回值的方法,執行的操作為輸出 “ welcome to Java. ”
注意:
方法體放在一對大括號中,實現特定的操作
方法名主要在調用這個方法時使用,需要注意命名的規范,一般采用第一個單詞首字母小寫,其它單詞首字母大寫的形式
第二步,調用方法
當需要調用方法執行某個操作時,可以先創建類的對象,然后通過 ?對象名.方法名();??來實現
例如:在下面的代碼中,我們創建了一個名為 hello 的對象,然后通過調用該對象的 show( )?方法輸出信息
public class HelloWorld {
public static void main(String[] args) {
// 創建對象,對象名為hello
HelloWorld hello = new HelloWorld();
// 調用方法
hello.show();
}
//定義方法
public void show() {
System.out.println("Welcome to Java.");
}
}
運行結果為:Welcome to Java.
如果方法不包含參數,但有返回值,我們稱為無參帶返回值的方法。
例如:下面的代碼,定義了一個方法名為 calSum ,無參數,但返回值為 int 類型的方法,執行的操作為計算兩數之和,并返回結果
public int calcSum{
int a=5;
int b=12;
int sum=a+b;
return sum;
}
在 calSum( ) 方法中,返回值類型為 int 類型,因此在方法體中必須使用 return 返回一個整數值。
調用帶返回值的方法時需要注意,由于方法執行后會返回一個結果,因此在調用帶返回值方法時一般都會接收其返回值并進行處理。如:
public class HelloWorld {
public static void main(String[] args) {
// 創建名為hello的對象
HelloWorld hello = new HelloWorld();
// 調用方法并接收方法的返回值,保存在變量sum中
int sum = hello.calcSum();
System.out.println("和為:" + sum);
}
// 定義無參帶返回值的方法
public int calcSum() {
int a= 5;
int b =12;
int sum =a + b;
// 使用return返回值
return sum;
}
}
運行結果為:和為:17
不容忽視的“小陷阱”:
1、 如果方法的返回類型為 void ,則方法中不能使用 return 返回值!
public void showInfo(){
return "Java";
}
2、 方法的返回值最多只能有一個,不能返回多個值
public int getInfo(){
int score1=94;
int score2=87;
return score1,score2;
}
3、 方法返回值的類型必須兼容,例如,如果返回值類型為 int ,則不能返回 String 型值
public int getInfo(){
String name="java";
return name;
}
有時方法的執行需要依賴于某些條件,換句話說,要想通過方法完成特定的功能,需要為其提供額外的信息才行。例如,現實生活中電飯鍋可以實現“煮飯”的功能,但前提是我們必須提供食材,如果我們什么都不提供,那就真是的“巧婦難為無米之炊”了。我們可以通過在方法中加入參數列表接收外部傳入的數據信息,參數可以是任意的基本類型數據或引用類型數據。
我們先來看一個帶參數,但沒有返回值的方法:
public void show(String name){
System.out.println("歡迎您,"+name);
}
上面的代碼定義了一個 show 方法,帶有一個參數 name ,實現輸出歡迎消息。
調用帶參方法與調用無參方法的語法類似,但在調用時必須傳入實際的參數值
對象名.方法名(實參1,實參2,......,實參n)
很多時候,我們把定義方法時的參數稱為形參,目的是用來定義方法需要傳入的參數的個數和類型;把調用方法時的參數稱為實參,是傳遞給方法真正被處理的值。
一定不可忽視的問題:
1、 調用帶參方法時,必須保證實參的數量、類型、順序與形參一一對應
2、 調用方法時,實參不需要指定數據類型
3、 方法的參數可以是基本數據類型,如 int、double 等,也可以是引用數據類型,如 String、數組等
4、 當方法參數有多個時,多個參數間以逗號分隔
如果方法既包含參數,又帶有返回值,我們稱為帶參帶返回值的方法。
例如:下面的代碼,定義了一個 show 方法,帶有一個參數 name ,方法執行后返回一個 String 類型的結果
public String show(String name){
return "歡迎你,"+name;
}
調用帶參帶返回值的方法:
HelloWorld hello =new HelloWorld();
String welcome =hello.show("java");
System.out.println(welcome);
結果為:歡迎你,java
示例代碼
1 //方法是可以重復使用的代碼塊
2 public classMethodTest{3
4 //定義
5 /*
6 public static ( ,... ){7
8 方法體;9 [return 表達值]10 注意:返回值類型為void的時候,方法沒有返回值,return可以省略11 }12 public 表示公共的,修飾的方法可以在任意的類當中使用13 static 表示靜態的,修飾的方法可以通過類名直接調用,如若在同一個類中,類名可以省略14 返回值類型 可以是Java中任何數據類型,如果沒有返回值,返回值類型為viod15 方法名稱 符合標識符定義規則16 參數列表 定義在()中,如果沒有參數可以不寫,但()不能省略17 方法體 完成功能的代碼,注意return的使用18
19
20 */
21 //調用
22 /*
23 方法名稱(實際參數);24 */
25
26 //無參無返回值方法
27 public static voidprint(){28
29 System.out.println("********");30 }31
32 public voidshow(){33
34 System.out.println("學習 Java 編程");35 }36
37 //有參有返回值方法
38 public static int add(int a,intb){39
40 return a+b;41 }42
43 public static double avg(double x,doubley){44
45 double z=(x+y)/2;46 returnz;47 }48
49 //main() Java程序執行的入口
50 public static voidmain(String args[]){51
52 //調用方法print53 //直接靜態方法名調用
54 print();55 //類名調用
56 MethodTest.print();57 //創建類的對象調用
58 MethodTest hello = newMethodTest();59 hello.show();60
61 int num1=2;62 int num2=3;63 System.out.println(add(num1,num2));64
65 double c =90;66 double d =59.5;67 double e=avg(c,d);68 System.out.println("平均值為"+e);69
70 int arr[]=new int[3];71 arr[0]=1;72 arr[1]=2;73 arr[2]=3;74 int s=sum(arr); //實參寫數組的名稱
75 System.out.println("和為"+s);76 int m=max(arr);77 System.out.println("最大值為"+m);78
79 double[] arr1 =getArr(4);80 for(int i =0;i
82 System.out.print(arr1[i]+",");83 }84
85
86 }87
88 //數組作為方法的參數
89 public static int sum(int[] arr){90
91 int s=0;92 for(int i=0;i
94 s+=arr[i];95 }96 returns;97 }98
99 public static int max(int[] arr){100
101 int max=arr[0];102 for(int i =0;i
104 if(arr[i]>max){105 max=arr[i];106 }107 }108 returnmax;109 }110
111 //返回值類型是數組
112 public static double[] getArr(intn){113
114 double arr[]=new double[n];115 for(int i =0;i
方法
字符串
在程序開發中字符串無處不在,如用戶登陸時輸入的用戶名、密碼等使用的就是字符串。其實,在前面的章節中我們就已經使用了字符串,例如我們在控制臺中輸出的 "Hello World"
在 Java 中,字符串被作為 String 類型的對象處理。?String 類位于 java.lang 包中。默認情況下,該包被自動導入所有的程序。
創建 String 對象的方法:
String s1="java";
String s2=new String();
String s3=new String("java");
String 對象創建后則不能被修改,是不可變的,所謂的修改其實是創建了新的對象,所指向的內存空間不同。
String 類提供了許多用來處理字符串的方法,例如,獲取字符串長度、對字符串進行截取、將字符串轉換為大寫或小寫、字符串分割等,下面我們就來領略它的強大之處吧。
String 類的常用方法:
結合代碼來熟悉一下方法的使用:
運行結果:
友情提示:
1. 字符串中字符的索引從0開始,范圍為 0 到 字符串長度-1
2. 使用 indexOf 進行字符或字符串查找時,如果匹配返回位置索引;如果沒有匹配結果,返回 -1
3. 使用 substring(beginIndex , endIndex) 進行字符串截取時,包括 beginIndex 位置的字符,不包括 endIndex 位置的字符
那么,“==” 和 equals() 有什么區別呢?
==: 判斷兩個字符串在內存中首地址是否相同,即判斷是否是同一個字符串對象
equals(): 比較存儲在兩個字符串對象中的內容是否一致
PS:字節是計算機存儲信息的基本單位,1 個字節等于 8 位,?gbk?編碼中 1 個漢字字符存儲需要 2 個字節,1 個英文字符存儲需要 1 個字節。所以我們看到上面的程序運行結果中,每個漢字對應兩個字節值,如“學”對應 “-47 -89” ,而英文字母 “J” 對應 “74” 。同時,我們還發現漢字對應的字節值為負數,原因在于每個字節是 8 位,最大值不能超過 127,而漢字轉換為字節后超過 127,如果超過就會溢出,以負數的形式顯示。
在Java中,除了可以使用 String 類來存儲字符串,還可以使用 StringBuilder 類或 StringBuffer 類存儲字符串,那么它們之間有什么區別呢?
String 類具有是不可變性。
程序運行時會額外創建一個對象,保存數據,當頻繁操作字符串時,就會額外產生很多臨時變量。使用 StringBuilder 或 StringBuffer 就可以避免這個問題。至于 StringBuilder 和StringBuffer ,它們基本相似,不同之處,StringBuffer 是線程安全的,而 StringBuilder 則沒有實現線程安全功能,所以性能略高。因此一般情況下,如果需要創建一個內容可變的字符串對象,應優先考慮使用 StringBuilder 類。
那么如何定義?StringBuilder 類的對象呢? 我們來看下面的代碼:
// 創建一個StringBuilder對象,用來存儲字符串
StringBuilder hobby=new StringBuilder("java");
StringBuilder 類提供了很多方法來操作字符串:
例如:在下面的示例代碼中,創建了 StringBuilder 對象,用來存儲字符串,并對其做了追加和插入操作。這些操作修改了 str 對象的值,而沒有創建新的對象,這就是 StringBuilder 和 String 最大的區別。
運行結果:
示例代碼
1 //字符串 字符的序列2 //String類 創建后不再修改的字符串常量3 //StringBuffer 可以修改的字符串變量
4
5 public classStringTest{6
7 public static voidmain(String args[]){8
9 //定義字符串
10 String hello ="hello world!";11
12 //length() 獲取字符串的長度
13 System.out.println("字符串的長度是:"+hello.length());14
15 //charAt(int 索引) 獲取字符串中的指定的字符
16 char ch =hello.charAt(0);17 System.out.println("ch="+ch);18
19 //intdexOf(int ‘ch’) 返回指定字符在字符串中的首次出現的索引,如果不存在返回-1
20 int idx =hello.indexOf('l');21 while(idx!=-1){22
23 System.out.println("idx="+idx);24 idx = hello.indexOf('l',idx+1);25 }26
27 //toUpperCase() 全部轉大寫,結果以新的字符串返回,原字符串內容不變
28 String hello_new=hello.toUpperCase();29 System.out.println("hello="+hello);30 System.out.println(hello_new);31
32 //toLowerCase() 全部轉小寫33
34 //trim 將字符串前后包含的空白字符去掉
35 String str2 = " test 1 ";36 String str2_new=str2.trim();37 System.out.println(str2);38 System.out.println(str2_new);39
40 //substring(int 起始索引,int 結束索引)
41 String str3=hello.substring(0,2);42 System.out.println(str3);43
44 //equals(String 另一個字符) 比較兩個字符串內容是否相同
45 boolean b1=hello.equals("hello world!");46 System.out.println(b1);47
48 //valueOf() 其他類型數據轉換成字符串49 //split
50 String str5 = "Hello world java haha";51
52 String[] arr = str5.split(" ");53 for(int i=0;i
字符串1
1 //equals 和 ==比較
2 public classStringTest2{3
4 public static voidmain(String args[]){5
6 String a="hello";7 String b="hello";8 String str1=new String("hello");9 String str2=new String("hello");10 System.out.println(str1+"--"+str2);11
12 //equals(String 另一個字符) 比較內容
13 System.out.println(str1.equals(str2));14
15 //== 比較是否為同一個對象,通過比較內存地址是否相同來判斷是否為同一對象
16 System.out.println(a==b);17 }18 }
字符串2
新特性
在JDK5.0之后,Java中為了方便開發,引入了大量的新特性,這次主要介紹:可變參數、foreach輸出。
一個方法在調用的時候必須根據其規定的參數傳遞參數,規定了5個,就必須傳遞五個,但是在JDK5.0之后,為了讓方法更加具有靈活性,使用了可變參數,在調用方法的時候可以給出任意個數的實參。
可變參數的方法定義:
返回值類型?? 方法名稱(參數類型…參數名稱){}
數組的輸出,一般都會使用for循環輸出,為了方便數組的輸出,提供了一種foreach語法,其語法 的使用格式如下,會遍歷數組的元素。
for(數據類型 變量名稱:數組名稱){
……….
}
示例代碼
1 //可變參數2 //foreach
3
4 public classTest{5
6 //可變參數
7 /*
8 方法名稱(參數類型...參數名){}9 */
10
11 //foreach輸出
12 /*
13 for(數據類型 變量名:數組名){14
15
16 }17 //注意數據類型和數組的數據類型一致18 */
19 public static void test(int... a){20 System.out.println(a.length);21 int sum=0;22 /*for(int i=0;i
26 for(inta1:a){27 sum+=a1;28 System.out.println(a1);29 }30 System.out.println("sum="+sum);31
32 }33
34 public static voidmain(String args[]){35 test(5,6,67,6767,78);36
37 }38 }
新特性
練習
輸入一句話,取反輸出,按以下兩種方式。例如:輸入的是hello java,輸出為java hello、avaj olleh。
1 //輸入一句話,取反輸出,按以下兩種方式。例如:輸入的是hello java,輸出為java hello、avaj olleh。
2 importjava.util.Scanner;3 public classHWday3Test1{4
5 public static voidmain(String args[]){6
7 System.out.print("請輸入一句話:");8
9 Scanner scan=newScanner(System.in);10
11 String a=scan.nextLine();12
13 out(a);14
15
16
17 }18 public static voidout(String number) {19
20 String[] numbers = number.split(" ");21
22 StringBuffer sb = newStringBuffer();23
24 for (int i = numbers.length -1; i >= 0; i--) {25
26 sb.append(numbers[i]);27
28 if(i > 0) {29
30 sb.append(" ");31 }32 }33 System.out.println(sb.toString());34
35 char[] ch = new char[number.length()];36
37 sb = newStringBuffer();38
39 for (int i =0 ; i
41 ch[i]=number.charAt(i);42 }43
44 for (int i = ch.length - 1; i >= 0; i--) {45
46 sb.append(ch[i]);47 }48 System.out.println(sb.toString());49 }50
51
52 }
第一題
定義一個整數數組并初始化,編寫兩個方法分別獲取這個數組的最大值和最小值。
1 //定義一個整數數組并初始化,編寫兩個方法分別獲取這個數組的最大值和最小值。
2
3 public classHWDay3Test2{4
5 public static voidmain(String args[]){6
7 int[] arr={3,23,45,65464,778};8
9 min(arr);10
11 max(arr);12 }13
14 public static void min(int[] arr){15
16 int min=arr[0];17 for(int i =0;i
19 if(arr[i]
26 public static void max(int[] arr){27
28 int max=arr[0];29 for(int i =0;i
31 if(arr[i]>max){32 max=arr[i];33 }34 }35 System.out.println("最大值為:"+max);36 }37 }
第二題
編寫方法,打印1-100之間所有的偶數,每行顯示10個數字,每個數字之間用空格或“,”隔開。
1 //編寫方法,打印1-100之間所有的偶數,每行顯示10個數字,每個數字之間用空格或“,”隔開。
2 public classHWDay3Test3{3
4 public static voidmain(String args[]){5
6 show();7 }8
9 public static voidshow(){10
11 int count=1;12
13 for(int i=1;i<=100;i++){14
15 if(count>10){16
17 System.out.println();18 count=1;19 }20 if(i%2==0){21
22 count++;23 System.out.print(i+"\t");24 }25
26 }27 }28 }
第三題
編寫方法,將數字字符('1')轉換成對應的數字(1)。如果可以轉換,返回對應的數字;如果不能轉換,則返回-1。
1 //編寫方法,將數字字符('1')轉換成對應的數字(1)。如果可以轉換,返回對應的數字;如果不能轉換,則返回-1。
2 importjava.util.Scanner;3 public classHWDay3Test4{4
5 public static int change(chara){6
7 if(a>='0'&&a<='9'){8
9 return a-48;10 }11 else{12
13 return -1;14 }15 }16
17 public static voidmain(String args[]){18
19 System.out.print("請輸入一個字符:");20
21 Scanner scan=newScanner(System.in);22
23 char a =scan.next().charAt(0);24
25 int b=change(a);26
27 System.out.println(b);28 }29 }
第四題
編寫方法,交換兩個變量的值。
1 //編寫方法,交換兩個變量的值。
2 importjava.util.Scanner;3 public classHWDay3Test5{4
5 public static voidmain(String args[]){6
7 Scanner scan=newScanner(System.in);8
9 System.out.print("輸入變量a:");10
11 String a =scan.next();12
13 System.out.print("輸入變量b:");14
15 String b =scan.next();16
17 change(a,b);18 }19
20 public static voidchange(String a,String b){21
22 String c =a;23
24 System.out.println("交換前:a="+a);25
26 System.out.println("交換前:b="+b);27
28 a=b;29
30 b=c;31
32 System.out.println("交換后:a="+a);33
34 System.out.println("交換后:b="+b);35 }36 }
第五題
總結
以上是生活随笔為你收集整理的零基础自学java_零基础学Java——小白的Java之路(4)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python while true_Py
- 下一篇: typora用Pandoc导出html,