1. 程式人生 > >Java-實驗7引數傳遞、方法過載和構造方法

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) {}

06public void Amethod(int i,String s) {}07

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

void change1(Person p){   

12. //新建物件,nametpm,age22 

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);
    		}
    	   
    	}
    	
    }
}