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. public class PersonT {   

2.  

3.     public void change(Person p) {   

4.         p.name = "mary";   

5.         p.age = 20;   

6.     }   

7.  

8.     public void changeInt(int i) {   

9.         i = 8;   

10.     }   

11.     public void change1(Person p){   

12. //新建对象,nametpm,age22   

13.        p = new Person("tom",22);   

14.     }   

15.     public static void 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);
    		}
    	   
    	}
    	
    }
}

你可能感兴趣的:(java实验)