ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:248.94KB ,
资源ID:7375166      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7375166.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(实验3 类对象和包.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

实验3 类对象和包.docx

1、实验3 类对象和包实验三 类、对象和包实验目的通过编程和上机实验理解Java语言是如何体现面向对象编程基本思想,了解类的封装方法,以及如何创建类和对象,了解成员变量和成员方法的特性,了解包的定义和引用,掌握面向对象程序设计的方法。实验要求1、 编写一个体现面向对象思想的程序;2、 编写一个创建对象和使用对象的方法的程序;3、 编写一个显示当前日期和时间的程序;4、 编写不同成员变量修饰方法的程序;5、 编写不同成员方法修饰方法的程序;6、 编写多个类,在同一包,或不同包,验证包的定义和导入;验证对于public、private、protected及缺省修饰的成员的访问权限; 7、 编程验证st

2、atic成员的性质。实验内容1、 设计类来描述真实客观世界中的事物,使用类的成员变量来表示事物的属性和状态,使用类的成员方法来提供对成员变量的访问或修改(1) 程序功能:设计一个用来描述汽车的类,使用类的非静态成员变量来表示汽车的车主姓名、当前的速率和当前方向盘的转向角度,使用类的非静态成员方法来表示改变汽车的速率和停车两个操作。(2) 程序源代码如下。public class EXP3_1 private String ownerName; /车主姓名 private float curSpeed; /当前车速 private float curDirInDegree; /当前方向盘转向角度

3、 public EXP3_1(String ownerName) this.ownerName=ownerName; public EXP3_1(String ownerName, float speed, float dirInDegree) this(ownerName); this.curSpeed=speed; this.curDirInDegree=dirInDegree; public String getOwnerName() /提供对车主姓名的访问 return ownerName; public float getCurDirInDegree() /提供对当前方向盘转向角度的

4、访问 return curDirInDegree; public float getCurSpeed() /提供对当前车速的访问 return curSpeed; public void changeSpeed(float curSpeed) /提供改变当前的车速 this.curSpeed = curSpeed; public void stop() /提供停车 this.curSpeed=0; (3) 编译源程序。2、 创建类的对象实例,使用实例方法(非静态)来访问或修改实例变量(1) 创建类EXP3_1的对象,在调用类的构造函数时指定对象的变量的初始值,以后再使用对象的方法来访问或修改对

5、象的变量的值。(2) 程序代码如下。public class EXP3_2 public static void main(String args) EXP3_1 car=new EXP3_1(成龙,200f,25f); System.out.println(车主姓名: +car.getOwnerName(); System.out.println(当前车速: +car.getCurSpeed(); System.out.println(当前转向角度: +car.getCurDirInDegree(); car.changeSpeed(80); System.out.println(在调用ch

6、angeSpeed(80)后,车速变为: + car.getCurSpeed(); car.stop(); System.out.println(在调用stop()后, 车速变为: +car.getCurSpeed(); (3) 编译并运行,结果如图3.1所示。图 3.13、 编写显示当前时间和日期的程序(3) 程序功能:该程序通过使用一个自定义类Time,实现显示当前日期和时间的功能。(4) 程序代码如下。import java.util.Calendar;class Time private Calendar t; private int y, m, d, hh, mm, ss; Time

7、 () t=Calendar.getInstance(); y=t.get(t.YEAR); m=t.get(t.MONTH)+1; d=t.get(t.DATE); hh=t.get(t.HOUR_OF_DAY); mm=t.get(t.MINUTE); ss=t.get(t.SECOND); public String getDate() return y+ 年+m+月+d+日; public String getTime() return hh+ 时+mm+分+ss+秒; public class EXP3_3 public static void main(String args) T

8、ime t=new Time(); System.out.println(当前日期:+t.getDate(); System.out.println(当前时间:+t.getTime(); (5) 编译并运行,结果如图3.2所示。图 3.24、 使用修饰符来限定类的成员变量或成员方法的属性有时需要公开一些变量和方法,有时需要禁止其他对象使用变量和方法,这时可以使用修饰符来实现这个目的。常用的修饰符如下:public private protected package static final transient volatile不同修饰符的访问控制权限如表3.1 所示。访问权限修饰符类子类包所有

9、类和包publicprotectedpackageprivate表 3.1(1) 程序功能:通过两个类StaticDemo、EXP3_4 说明静态变量/方法与实例变量/方法的区别。(2) 程序源代码如下。class StaticDemo static int x;int y;public static int getX() return x;public static void setX(int newX) x = newX;public int getY() return y;public void setY(int newY) y = newY;public class EXP3_4 pu

10、blic static void main(String args) System.out.println(静态变量x=+StaticDemo.getX();System.out.println(实例变量y=+StaticDemo.getY(); /非法,编译时将出错StaticDemo a= new StaticDemo();StaticDemo b= new StaticDemo();a.setX(1);a.setY(2);b.setX(3);b.setY(4);System.out.println(静态变量a.x=+a.getX();System.out.println(实例变量a.y=

11、+a.getY();System.out.println(静态变量b.x=+b.getX();System.out.println(实例变量b.y=+b.getY();(3) 对上面的源程序进行编译,会出现如图3.3所示的出错提示。图 3.3(4) 将源程序中的出错语句删除或使用解释符/隐藏起来,例如,/System.out.println(实例变量y=+StaticDemo.getY();(5) 重新编译并运行该程序,结果如图3.4所示。图 3.45、 调用方法时参数传递的练习在其它语言中,函数调用或过程调用时参数有传值调用和传地址调用之分。在Java 中,方法中的参数传递可以分为传值调用或

12、对象方法调用等方式。传值调用即传递的参数是基本数据类型,调用方法时在方法中将不能改变参数的值,这意味着只能使用它们。对象调用是指先调用对象,再调用对象的方法,这种方式可以修改允许存取的成员变量。所以,如果不想改变参数的值,可以采用传值调用的方法。如果想改变参数的值,可采用对象调用的方法,间接修改参数的值。5.1、编写一个传值调用的程序(1) 程序功能:程序首先给整型变量x 和y 赋一个初值10,然后使用传值调用方式调用方法ff1对x 和y 做乘方及输出x 和y 的乘方值,最后再输出x 和y 的乘方值。(2) 程序源代码如下。class EXP3_5 public static void mai

13、n(String args) int x=10, y=10;ff1(x, y);System.out.println(x=+x+, y=+y);static void ff1(int passX, int passY) passX=passX*passX;passY=passY*passY;System.out.println(passX=+passX+, passY=+passY);(3) 编译并运行,结果如图3.5。图 3.55.2、编写一个调用对象方法的程序(1) 程序功能:通过调用对象的方法在方法调用后修改了成员变量的值。(2) 程序源代码如下。class EXP3_6 public

14、static void main(String args) Power p=new Power();p.ff2(10,10);System.out.println(方法调用后 x=+p.x+, y=+p.y);class Powerint x=10, y=10;void ff2(int passX, int passY) System.out.println(初始时 x=+x+, y=+y);x=passX*passX;y=passY*passY;System.out.println(方法调用中 x=+x+, y=+y);(3) 编译并运行,结果如图3.6。图 3.66、 编写多个类,在同一包

15、,或不同包,验证包的定义和引用;验证对于public、private、protected及缺省修饰的成员的访问权限(自行编程)7、构造方法的重载class Circle private double r; public double getArea() return Math.PI*r*r; Circle() this(1);/调用Circle(double x)方法来初始化 Circle(double x) r = x; class TestCircle public static void main(String s) Circle c1 = new Circle(); Circle c2

16、 = new Circle(2); System.out.println(c1.getArea(); System.out.println(c2.getArea(); 8、父类的无参构造方法,对子类很重要。修改下面的程序,为父类添加无参的构造方法。import java.awt.Color;class Graph/图形,父类 Graph(Color c)class Circle extends Graph private double r; public double getArea() return Math.PI*r*r; Circle() this(1);/调用Circle(double

17、 x)方法来初始化 Circle(double x)/*这里编译器报错:这个构造方法,既没有调用本类的其它构造方法,也没有显式调用父类的构造方法,编译系统将自动为它补充super();作为第一条语句。即,调用父类的无参构造方法。但父类Graph中没有无参的Graph()构造方法*/ r = x; class TestCircle public static void main(String s) Circle c1 = new Circle(); Circle c2 = new Circle(2); System.out.println(c1.getArea(); System.out.pri

18、ntln(c2.getArea(); 结论:在声明构造方法时,好的声明习惯是: 不声明任何构造方法 如果声明,至少声明一个无参构造方法9、static修饰符。用它修饰的变量是静态变量(类变量),用它修饰的方法称为静态方法(类方法)。实例变量、实例方法是非静态的,依赖于具体对象实例。比如,圆Circle有c1和c2这两个对象,但两个圆的半径是不同的变量。静态变量(比如,圆对象的数量count)和静态方法属于类,供多个对象共享。class Circle private double r;/每个圆的半径不同,故r应该非静态,属于具体对象实例。 static int count = 0;/count属

19、于类,静态 public double getArea() return Math.PI*r*r; Circle() this(1);/调用Circle(double x)方法来初始化 Circle(double x) r = x; count+;/每构造一个对象,count会增1 class TestCircle public static void main(String s) Circle c1 = new Circle(); Circle c2 = new Circle(2); System.out.println(c1.getArea(); System.out.println(c2

20、.getArea(); System.out.println(现在共建立了+Circle.count+个Circle对象); 10、关于静态块static 的用法。提示:(1)加载类时执行,常用来对多个静态变量进行显式初始化(此时还没有对象)。(2)只执行一次,即便多次加载,也只有在第一次加载时执行。关于非静态块的用法。提示:(1)构造方法执行前先执行(2)常用来对实例变量初始化class Circle double r; static int count; static/*静态块。在该类被加载时执行。常用来对静态变量初始化。此时还没有对象。*/ System.out.println(这里是显

21、式地对静态变量初始化); count = 0; /*非静态块。每当要构造对象,该代码块会抢先在构造方法前执行。常对实例变量初始化。如果不构造对象,则该代码块不会执行。*/ System.out.println(要构造了,这里可以初始化实例变量); r = 5; Circle() System.out.println(构造方法运行); r = 1;/这里把r从5改成1 count+;/每新建一个圆对象,count增1 public class TestCircle public static void main(String s) System.out.println(main函数开始执行了);

22、 System.out.println(构造前,圆对象的数量是+Circle.count); Circle c = new Circle(); System.out.println(构造后,圆对象的数量是+Circle.count); System.out.println(c.r); new Circle(); tryClass.forName(Circle);/再把类Circle加载一次,静态块不执行。 catch(Exception e) 11、编程练习题目定义类Circle。其属性有半径radius,圆心位置center。下面分别是Circle.java和TestCircle.java的

23、部分代码。请将其完善。下面是Circle.java部分代码import java.awt.Point;class Circle private double radius; private Point center; Circle() this(1.0); Circle(double r) radius = r; center = new Point(); Circle(int x, int y)/需要你完善 Circle(Point p) /需要你完善 Circle(int x, int y, double r) /需要你完善 Circle(Point p, double r) /需要你完善

24、 public double getRadius() return radius; public void setRadius(double r) radius = r; public Point getCenter() return center; public void move(int x, int y) center.move(x, y); 下面是TestCircle.java部分代码import javax.swing.JFrame;import java.awt.event.KeyAdapter;import java.awt.event.KeyEvent;import java.

25、awt.event.WindowAdapter;import java.awt.event.WindowEvent;public class TestCircle extends JFrame Circle circle = new Circle(100,100,10); public static void main(String args) new TestCircle().lauch(); public void lauch() setLocation(200, 200); setSize(200,200); addWindowListener(new WindowAdapter() p

26、ublic void windowClosing(WindowEvent e) System.exit(0); ); setVisible(true); addKeyListener(new KeyMonitor(); class KeyMonitor extends KeyAdapter public void keyPressed(KeyEvent e) int key = e.getKeyCode(); switch(key) case KeyEvent.VK_UP:/下面需要你补充 System.out.println(向上移动后,输出circle位置); break; case Ke

27、yEvent.VK_DOWN:/下面需要你补充 System.out.println(向下移动后,输出circle位置); break; case KeyEvent.VK_LEFT:/下面需要你补充 System.out.println(向左移动后,输出circle位置); break; case KeyEvent.VK_RIGHT:/下面需要你补充 System.out.println(向右移动后,输出circle位置); break; case KeyEvent.VK_PAGE_UP:/radius加1 circle.setRadius(circle.getRadius()+1); System.out.println(radius= + circle.getRadius(); break; case KeyEvent.VK_PAGE_DOWN:/radius减1 if(circle.getRadius()1) circle.setRadius(circle.getRadius()-1); System.out.println(radius= + circle.getRadius(); break;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1