《Java程序设计》实 验 报 告(二)
实验名称:java编程基础 |
实验地点:10-306 |
所使用的工具软件及环境: JDK1.7或1.8与Eclipse |
|
一、实验目的:
|
|
二、实验内容: 1.编写Applet 程序 (1)程序功能:这个Applet 程序要在页面上输出两个矩形,并伴有文字输出。 (2)定义一个MyBox类,包含有x, y, width, height四个成员变量以及MyBox(), MyBox(int xPos, int yPos, int w, int h), void setPosition (int xPos, int yPos) , void setSize (int w, int h), int getX() ,int getY(),void draw(Graphics g) 成员方法. 编辑 |
|
三、源代码 //AppletRectangle.java package 实验3; import java.applet.*; import java.awt.Graphics; class MyBox { int x,y,width,height; MyBox(){}; MyBox(int xPos, int yPos, int w, int h){ x=xPos; y=yPos; width=w; height=h; } void setPosition (int xPos, int yPos) { x=xPos; y=yPos; }; void setSize (int w, int h) { width=w; height=h; }; int getX() { return x; }; int getY() { return y; }; void draw(Graphics g) { g.drawRect(x,y,width,height); }; } public class AppletRectangle extends Applet{ MyBox b1=new MyBox(); MyBox b2=new MyBox(170,20,60,60); public void paint(Graphics g) { b1.setPosition(20,20); b1.setSize(60,60); b1.draw(g); g.drawString("矩形1的X的位置:"+b1.getX(),20,100); g.drawString("矩形1的Y的位置:"+b1.getY(),20,120); b2.draw(g); g.drawString("矩形2的X的位置:"+b2.getX(),b2.getX(),b2.getY()+80); g.drawString("矩形2的Y的位置:"+b2.getY(),b2.getX(),b2.getY()+100); } } 四、实验结果测试、收获与体会: 编辑 能够运行小程序,对类的继承和对函数的调用,有了进一步的学习 |
实验名称:java编程基础 |
实验地点:10-306 |
所使用的工具软件及环境: JDK1.7或1.8与Eclipse |
|
一、实验目的:
|
|
二、实验内容: (二).修饰符的使用 有时需要公开一些变量和方法,有时需要禁止其他对象使用变量和方法,这时可以使用修饰符来实现这个目的。 常用的修饰符如下。[public] [private] [protected] [package] [static] [final] [transient] [volatile]不同修饰符的访问控制权限如表所示。 1.程序功能:通过两个类StaticDemo、Demo2_2 说明静态变量/方法与实例变量/方法的区别。 2.编写类文件Demo2_2.java,程序源代码如下。 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 Demo2_2 { public 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="+a.getY()); System.out.println("静态变量b.x="+b.getX()); System.out.println("实例变量b.y="+b.getY()); } } 3.对上面的源程序进行编译,是否会有错误?如果有,错误原因是什么?将源程序中的出错语句删除或使用解释符//隐藏起来,分析运行结果,可以得出几点结论? |
|
三、源代码 //Demo2_2.java package 实验3; 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 Demo2_2 { public static void main(String[] args) { System.out.println("静态变量x="+StaticDemo.getX()); //y不是静态成员,不可以直接通过类名访问,需要实例化,用对象访问; //System.out.println("实例变量y="+StaticDemo.getY()); StaticDemo a= new StaticDemo(); StaticDemo b= new StaticDemo(); a.setX(1);//相当于是StaticDemo.set(1); a.setY(2); b.setX(3);//相当于是StaticDemo.set(1); b.setY(4); System.out.println("静态变量a.x="+a.getX());// System.out.println("实例变量a.y="+a.getY()); System.out.println("静态变量b.x="+b.getX()); System.out.println("实例变量b.y="+b.getY()); } } 四、实验结果测试、收获与体会: 编辑 实验给出的源程序是错误的,对于成员变量y不是static类型,也就不是静态变量,不可以直接通过类名访问,需要实例化,用对象访问。对于静态变量,通过对象改变值,而最后确定的值是最后一次所改变的值。 |
实验名称:java编程基础 |
实验地点:10-306 |
所使用的工具软件及环境: JDK1.7或1.8与Eclipse |
|
一、实验目的:
|
|
二、实验内容: (三). 1.方法中参数传递的练习 在其它语言中,函数调用或过程调用时参数有传值调用和传地址调用之分。在Java 中,方法中的参数传递可以分为传值调用或对象方法调用等方式。传值调用即传递的参数是基本数据类型,调用方法时在方法中将不能改变参数的值,这意味着只能使用它们。对象调用是指先调用对象,再调用对象的方法,这种方式可以修改允许存取的成员变量。所以,如果不想改变参数的值,可以采用传值调用的方法。如果想改变参数的值,可采用对象调用的方法,间接修改参数的值。 1.编写一个传值调用的程序文件Demo2_3.java。 (1)程序功能:程序首先给整型变量x 和y 赋一个初值10,然后使用传值调用方式调用方法ff1对x 和y 做乘方及输出x 和y 的乘方值,最后再输出x 和y 的乘方值。 (2)程序源代码如下。 class Demo2_3 { public static void main(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)编译Demo2_3.java,分析运行结果。 |
|
三、源代码 //Demo2_3.java package 实验3; class Demo2_3 { public static void main(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); } } 四、实验结果测试、收获与体会: 编辑 传值调用即传递的参数是基本数据类型,调用方法时在方法中将不能改变参数的值,这意味着只能使用它们。在此程序中,x与y的值通过传参将值传给形参,但本身的x与y的值不发生改变。 |
实验名称:java编程基础 |
实验地点:10-306 |
所使用的工具软件及环境: JDK1.7或1.8与Eclipse |
|
一、实验目的:
|
|
二、实验内容: (三). 2.方法中参数传递的练习 编写一个调用对象方法的程序文件Demo2_4.java。 (1)程序功能:通过调用对象的方法在方法调用后修改成员变量的值。 (2)Demo2_3.java 程序源代码如下。 class Demo2_3{ public static void main(String[] args) { Power p=new Power(); p.ff2(10,10); System.out.println("方法调用后 x="+p.x+", y="+p.y); } } class Power{ int 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)编译Demo2_3.java,分析运行结果。 |
|
三、源代码 //Demo2_4.java package 实验3; class Demo2_4{ public static void main(String[] args) { Power p=new Power(); p.ff2(10,10); System.out.println("方法调用后 x="+p.x+", y="+p.y); } } class Power{ int 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); } } 四、实验结果测试、收获与体会: 编辑 先调用对象,再调用对象的方法,这种方式可以修改允许存取的成员变量。在此程序中,通过对象进行传参,此时的x与y已经被改变。 |
|
实验名称:java编程基础 |
实验地点:10-306 |
所使用的工具软件及环境: JDK1.7或1.8与Eclipse |
|
一、实验目的:
|
|
二、实验内容: (四).综合练习 1.抽象类 (1)设计一个形状类 Shape,包含一个 getArea()方法,该方法不包含实际语句。 (2)在 Shape 类基础上设计三角形Triangle、矩形Rectangle、圆形Circle三个子类,根据实际形状重写 getArea()方法。 (3)设计一个 TestShape 类,在 main 函数中新建三种类型的对象s1、s2、s3,输出 area。 |
|
三、源代码 //TestShape.java package 实验3; abstract class Shape{ int x,y; double area; abstract void getArea(); } class Triangle extends Shape{ Triangle(int x_,int y_){ x=x_; y=y_; }; void getArea() { area=0.5*x*y; System.out.println("三角形的底和高分别为:"+x+" "+y); System.out.println("三角形的面积为:"+area); System.out.println(); } } class Rectangle extends Shape{ Rectangle(int x_,int y_){ x=x_; y=y_; }; void getArea() { area=x*y; System.out.println("矩形的长和宽分别为:"+x+" "+y); System.out.println("矩形的面积为:"+area); System.out.println(); } } class Circle extends Shape{ Circle(int r){ x=r; }; void getArea() { area=3.14*x*x; System.out.println("圆形的半径为:"+x); System.out.println("圆形的面积为:"+area); System.out.println(); } } public class TestShape { public static void main(String args[]) { Triangle s1=new Triangle(4,2); Rectangle s2=new Rectangle(5,6); Circle s3=new Circle(2); makegetArea(s1); makegetArea(s2); makegetArea(s3); } static void makegetArea(Shape a) { a.getArea(); } } 四、实验结果测试、收获与体会:
编辑 通过abstract定义抽象类和抽象方法,对抽象方法学习了只有方法名、参数表和返回值,是没有方法体的,而有抽象方法必须将此类定义为抽象类,抽象类也没有具体的对象。所以对abstract关键字有了进一步的学习。 |
实验名称:java编程基础 |
实验地点:10-306 |
所使用的工具软件及环境: JDK1.7或1.8与Eclipse |
|
一、实验目的:
|
|
二、实验内容: (四).综合练习 2.接口 编写求解几何图形(如三角形,矩型,圆)的面积的应用程序。其中定义一个interface getProperty { double Pi=3.1415926; double getArea(); } class triangle,class circle,class rectangle实现该接口中的方法。 要求程序能从键盘上接受几何图形的数据以便求解不同的几何图形的面积。 提示:从键盘上输入双精度数的一种方法(程序片段) …… public static void main(String args[]) throws IOException { BufferedReader keyin=new BufferedReader(new InputStreamReader(System.in)); String x; x=keyin.readLine(); double a=Double.parseDouble(x); …… 输入的另一种方法:用Scanner类的方法 Scanner scan = new Scanner(System.in); year = scan.nextInt();等等 |
|
三、源代码 //TestShape2.java package 图形; import java.util.Scanner; interface getProperty { double Pi=3.1415926; double getArea(); } abstract class Shape{ double x,y; double area; Shape(){} Shape(double r){ x=r; } Shape(double x_,double y_){ x=x_; y=y_; } //abstract void getArea(); } class Triangle extends Shape implements getProperty{ Triangle(double x_,double y_){ super(x_,y_); }; public double getArea() { area=0.5*x*y; System.out.println("三角形的底和高分别为:"+x+" "+y); System.out.println("三角形的面积为:"+area); System.out.println(); return area; } } class Rectangle extends Shape implements getProperty{ Rectangle(double x_,double y_){ super(x_,y_); }; public double getArea() { area=x*y; System.out.println("矩形的长和宽分别为:"+x+" "+y); System.out.println("矩形的面积为:"+area); System.out.println(); return area; } } class Circle extends Shape implements getProperty{ Circle(double r){ super(r); }; public double getArea() { area=Pi*x*x; System.out.println("圆形的半径为:"+x); System.out.println("圆形的面积为:"+area); System.out.println(); return area; } } class TestShape2 { public static void main(String args[]) { while(true) { System.out.println("计算下列哪个图形的面积"); System.out.println("1.三角形 2.矩形 3.圆形"); Scanner a=new Scanner(System.in); int n=a.nextInt(); if(n==1) { System.out.println("请输入三角形的底和高:"); double x=a.nextDouble(); double y=a.nextDouble(); Triangle s1=new Triangle(x,y); makegetArea(s1); } if(n==2) { System.out.println("请输入矩形的长和宽:"); double x=a.nextDouble(); double y=a.nextDouble(); Rectangle s2=new Rectangle(x,y); makegetArea(s2); } if(n==3) { System.out.println("请输入圆形的半径:"); double r=a.nextDouble(); Circle s3=new Circle(r); makegetArea(s3); } } } static void makegetArea(getProperty a) { a.getArea(); } } 四、实验结果测试、收获与体会: 编辑 能够设计接口,并且学习到关于接口的使用方法,还有关键字的记忆。 |