Java-實驗7引數傳遞、方法過載和構造方法
實驗7 引數傳遞、方法過載和構造方法
一、實驗目的
1. 理解引數傳遞的方式——值傳遞。
2. 掌握方法過載的定義。
3. 掌握構造方法的定義方式。
4. 掌握構造方法的過載。
二、實驗內容
1. 請指出下面程式碼中存在的錯誤,並說明錯誤原因。01public class Sample {02public void amethod(int i,String s) {}03public void amethod(String s,int i) {}04public int amethod(String s1,String s2) {}
05public void amethod(int i,String myString) {}
08}
2. 分析下列程式碼,給出輸出結果並進行解釋(最好畫出記憶體分析圖)。
Java引數傳遞機制分析程式碼
1. publicclass PersonT {
2.
3. publicvoid change(Person p) {
4. p.name = "mary";
5. p.age = 20;
6. }
7.
8. publicvoid changeInt(int i) {
9. i = 8;
10. }
11. public
12. //新建物件,name為tpm,age為22
13. p = new Person("tom",22);
14. }
15. publicstaticvoid main(String[] args) {
16. PersonT t = new PersonT();
17. Person p = new Person("john", 18);
18. Person p1 = p;
19. System.out.println(p);
20. //通過方法改變物件屬性值
21. t.change(p1);
22. System.out.println(p1);
23. System.out.println("傳回來的值指向是否一致:" + p.equals(p1));
24. //通過方法改變整數值
25. int i = 10;
26. System.out.println("i值為:" + i);
27. t.changeInt(i);
28. System.out.println("i值為:" + i);
29. //新建一物件,改變物件值
30. t.change1(p);
31. System.out.println(p);
32. }
33. }
34. class Person
35. {
36. String name;
37. int age;
38. public Person(String name,int age)
39. {
40. this.name=name;
41. this.age=age;
42. }
43. }
3. 構造方法的定義:
編寫一個類Book,代表教材:
(1)具有屬性:名稱(title)、頁數(pageNum),其中頁數不能少於200頁,否則輸出錯誤資訊,
並賦予預設值200。
(2)具有方法:detail,用來在控制檯輸出每本教材的名稱和頁數。
(3)具有帶引數的構造方法:用來完成物件的初始化工作,並在構造方法中完成對頁數的最小值限制。
編寫測試類BookTest進行測試:初始化一個Book物件,並呼叫該Book物件的detail方法,看看輸出是否正確。
package cn.test;
import java.util.Scanner;
public class BookTest {
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
System.out.println("輸入名稱:");
String ti=sc.next();
System.out.println("輸入頁數:");
int num=sc.nextInt();
Book b=new Book();//呼叫無參構造方法
b.detail();
Book g=new Book(ti,num);
g.detail();
}
public static class Book{
private String title;
private int pageNum;
public Book(){
pageNum=200;
title=null;
}
public Book(String title,int pageNum){
this.title=title;
this.pageNum=pageNum;
}
public void detail(){
System.out.println("名稱:"+title);
if(pageNum<200){
System.out.println("輸入頁數不合要求!");
}else{
System.out.println("頁數:"+pageNum);
}
}
}
}
4. 構造方法的過載:
編寫一個類Book2,代表教材:
(1)具有屬性:名稱(title)、頁數(pageNum)、型別(type)。
(2)具有方法:detail,用來在控制檯輸出每本教材的名稱、頁數、型別。
(3)具有兩個帶參構造方法:
第一個構造方法中,設定教材型別為“計算機”(固定),其餘屬性的值由引數給定。
第二個構造方法中,所有屬性的值都由引數給定。
編寫測試類Book2Test進行測試:分別以兩種方式完成對兩個Book2物件的初始化工作,並分別呼叫它們的detail方法,看看輸出是否正確。
package cn.test;
import java.util.Scanner;
public class Book2Test {
public static void main(String[] args){
Book2 a=new Book2("JAVA",340);
a.detail();
Book2 b=new Book2("JavaTest",450,"軟體工程");
b.detail();
}
public static class Book2{
private String title;
private int pageNum;
String type;
public Book2(String title,int pageNum){
this.pageNum=pageNum;
this.title=title;
type="計算機";
}
public Book2(String title,int pageNum,String type){
this.title=title;
this.pageNum=pageNum;
this.type=type;
}
public void detail(){
System.out.println("名稱:"+title+" 型別:"+type);
if(pageNum<200){
System.out.println("輸入頁數不合要求!");
}else{
System.out.println("頁數:"+pageNum);
}
}
}
}