Java第四次实验要求

实验四 类与对象(二)

 

一、 实验目的

1、 理解引用变量与对象实例之间的关系与区别;

2、 理解方法调用时引用类型参数的传递过程;

3、 理解Java语言中包的概念以及packageimport语句的使用;

4、 掌握privateprotectedpublic等关键的使用场合与使用方法;

5、 掌握对象组合的方式与方法;

6、 掌握基本数据类型包装类的使用方法。

 

二、 实验要求

1、 根据实验步骤中提出的要求,使用记事本编写相应的Java程序;

2、 使用JDK中提供的javac以及java命令编译、运行自己所编写的Java程序;

3、 根据编译与运行过程中所获得的错误信息修改程序直至获得正确的结果;

4、 记录实验中遇到的各类问题并以及解决办法。

 

三、 实验步骤

1、 对象实例的引用

(1) 采用记事本编写下面所给的Java程序并保存为Card.java;

 

class Card{

int id;

double balance;

Card(int id,double balance){

this.id=id;

this.balance=balance;

}

 

void withdraw(double amount){

balance-=amount;

}

 

void deposit(double amount){

balance+=amount;

}

 

void print(){

System.out.printf("Card id:%10d   \nBalance:    $%8.2f",id,balance);

}

}

 

 

(2) 采用记事本编写下面所给的Java程序并保存为CardTest.java;

 

class CardTest{

public static void main(String args[]){

Card a=new Card(1,500);

Card b=open(2);

transfer(a,b,120);

a.print();

b.print();

}

 

Card open(int id){

return new Card(id,0);

}

static void transfer(Card from ,Card to ,double amount){

from.withdraw(amount);

to.deposit(amount);

Card temp=from;

from=to;

to=temp;

}

}

 

(3) 改正程序中的错误,编译并运行CircleTest查看结果。

(4) CircleTest类的open方法结束后,该方法中创建的对象是否仍然存在?

(5) CircleTest类的transfer方法中运行下面的代码后,引用形参fromto指向的对象实例是否实现互换?为什么?

(6) CircleTest类的main方法中语句transfer(a,b,120);结束后,引用实参ab指向的对象实例是否实现互换?为什么?

(7) 如果将transfer方法改为Card类的成员方法,那程序将应该如何进行修改?

 

2、 包、访问权限、对象组合

(1) 在磁盘上的某个位置新建math文件夹,之后再在math中新建geometry文件夹;

(2) 在math文件夹中新建MathApp.java,并在geometry文件夹中新建Point.java以及Line.java

(3) 三个文件的内容分别如下:

 

MathApp.java

 

import geometry.*;

class MathApp{

public static void main(String args[]){

Point a=new Point(0,0);

Point b=new Point(1,1);

Line line=new Line(a,b);

double length=line.length();

System.out.printf("The length of the Line is:" + length);

}

}

 

package geometry;

 

class Point{

double x;

protected double y;

 

public Point(double x,double y){

this.x=x;

this.y=y;

}

}

 

Line.java

 

package geometry;

public class Line{

private Point startPoint;

private Point endPoint;

 

public Line(Point startPoint,Point endPoint){

this.startPoint=startPoint;

this.endPoint=endPoint;

}

 

public double length(){

double a=startPoint.x-endPoint.x;

double b=startPoint.y-endPoint.y;

return Math.sqrt(a*a+b*b);

}

}

 

注意事项:

(1) 在本例中程序的主目录为math,因此在math目录下的java程序均不须声明包,(默认包),而在其它目录下的包均须以package  xx . xx . xx 的形式声明所在的包,该表示方式与该目录到主目录的相对路径一致

(2) 编译geometry目录下的java文件时,应使当前目录为math,编译的命令为:

javac geometry\Point.java

(3) 编译时注意类之间的依赖关系,应依次编译

(4) Point必须定义为public,否则MainApp无法编译(不在一个包内)

(5) Line可以直接访问Point中的属性,因为同一包中的类可以互相访问友好和protected成员;

(6) 提问:如果将主目录设置在math的上一级目录,程序应该更改?

(7) 提问:在已给代码的基础上,编写一个程序,该程序能够判断两个圆是否相切。

(8) 提问:在已给代码的基础上,编写一个程序,该程序能够判断两条线段是否垂直。

 

3、 基本数据类型的包装类

 

public class DataType{

public static void main(String args[]){

char []a={'H','e','l','l','o'};

printCharArray(a);

toUpperCase(a);

printCharArray(a);

}

 

public static void toUpperCase(char[] arr){

for (int i=0;i<arr.length;i++){

arr[i]=Character.toUpperCase(arr[i]);

}

}

 

public static void printCharArray(char[] arr){

for (char c: arr)

System.out.print(c);

System.out.println();

}

}

 

注意语句 for (char c: arr)的用法。

 

四、 实验结果

五、 实验小结

六、 课后习题(这三道题自行练习,不必写入实验报告)

1、 编写一个复数类,该复数类能够对程序进行加、减、乘、除、求模等运算;

2、 编写一个线段类,该类能够计算线段的斜率,并能判断两条线是否垂直;

3、编写一个圆形类,该类能够求算圆的面积、周长,并能判断两个圆是否相切;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值