实验3

实验四类与对象的定义及使用

1、理论知识:

类:类(class)是描述对象的“基本原型”,它定义一类对象所能拥有的数据和能完成的操作,在面向对象的程序设计中,类是程序的基本单元。

对象有三个主要特征:
对象的行为:可以对对象施加那些操作,或可以对对象施加那些方法
对象的状态:施加那些方法时,对象如何响应
对象的标识:如何辨别具有相同行为与状态的不同对象

预定义类:在Java中,没有类就无法做任何事情。我们前面曾经使用过几个类。然而,并不是所有的类都具有面向对象特征。例如,Math类。在程序中,可以使用Math 类的方法,Math类只封装了功能,它不需要也不必隐藏数据。由于没有数据,因此也不必担心生成对象以及初始化实例域。

构造器:也叫构造方法,是一种特殊的方法,其作用是用来构造并初始化对象。构造器的名字必须与它所在的类名字相同;每个类可以有一个以上的构造器;构造器可以有0个、1个、或1个以上的参数;构造器没有返回值;构造器可以调用另一个构造器要想用构造器构造一个对象,需要在构造器的前面加上new操作符。在标准Java库中包含一个Date类。它的对象将描述一个时间点。在对象与对象变量之间存在着一个重要的区别。对象变量不是一个对象,在没有引用对象之前,不能将类的任何方法应用于这个变量。

可以显式地将对象变量设置为null,表明这个对象变量目前没有引用任何对象。如果将一个方法应用于一个值为null的对象上,就会产生运行时错误。

Main方法:Main方法是一个静态方法,其不对任何对象进行操作。事实上,在启动程序时还没有任何一个对象。静态的main方法将执行并创建程序所需的对象。

2、实验目的与要求

(1) 理解用户自定义类的定义;

(2) 掌握对象的声明;

(3) 学会使用构造函数初始化对象;

(4) 使用类属性与方法的使用掌握使用;

(5) 掌握package和import语句的用途。

2、实验内容和步骤

实验1 测试以下程序,掌握文件输入输出程序设计技术(文件输入输出,教材61-62).

import java.io.*;

import java.util.*;

public class FileWriteReadTest {

public static void main(String[] args) throws IOException{

//写入文件演示

PrintWriter out = new PrintWriter("myfile.txt");

out.println("姓名 高数 Java 数据结构 平均成绩 总成绩");

out.println("张三 20 30 40 0 0");

out.println("李四 50 60 70 0 0");

out.close();//输出完毕,需要close

//读入文件演示

Scanner in = new Scanner(new File("myfile.txt"));//为myfile.txt这个File创建一个扫描器in

int number = 1;//行号

System.out.println(in.nextLine());

while(in.hasNextLine()){//判断扫描器是否还有下一行未读取,该循环把文件的每一行都读出

String line = in.nextLine();//读出myfile.txt的下一行

System.out.print("第"+(++number)+"行的内容: ");

Scanner linescanner = new Scanner(line);//行内容建立扫描器

linescanner.useDelimiter(" ");//使用空格作为分隔符

String name = linescanner.next();

String math = linescanner.next();

String java = linescanner.next();

String ds = linescanner.next();

String avg = linescanner.next();

String total = linescanner.next();

System.out.println("name="+name+" math="+math+" java="+java+" ds="+ds+" avg"+avg+" total="+total);

}

in.close();//读入完毕,最后需要对其进行close。

}

}

实验2 导入第4章示例程序并测试。

测试程序1:

l  编辑、编译、调试运行程序4-2(教材104页);

l  结合程序运行结果,掌握类的定义与类对象的用法,并在程序代码中添加类与对象知识应用的注释;

l  尝试在项目中编辑两个类文件(Employee.java、 EmployeeTest.java ),编译并运行程序。

l  参考教材104页EmployeeTest.java,设计StudentTest.java,定义Student类,包含name(姓名)、sex(性别)、javascore(java成绩)三个字段,编写程序,从键盘输入学生人数,输入学生信息,并按以下表头输出学生信息表:

  姓名      性别     java成绩

代码如下:

package shiyanyi;

import java.util.Scanner;
/**
* @version 2017-09-25
* @author QA
*
*/

public class Shiyan {

@SuppressWarnings("resource")
public static void main(String[] args) {
// TODO 自动生成的方法存根

System.out.println("请输入学生的姓名");
Employee[] staff = new Employee[2];
Scanner in = new Scanner(System.in);
for(int i=0;i<staff.length;i++) {
staff[i]=new Employee(in.next(),in.next(),in.nextInt());
}
System.out.println("name"+" "+"sex"+" "+" "+"javascore");

// print out information about all Employee objects
for (Employee e : staff)
System.out.println(((shiyanyi.Employee) e).getName() +" "+((shiyanyi.Employee) e).getSex()+" "+((shiyanyi.Employee) e).getJavaScore());
}
}

class Employee
{
private String name;
private String sex;
private double javascore;

public Employee(String n, String s, int m)
{
name = n;
sex = s;
javascore =m;
}

public String getName()
{
return name;
}

public String getSex()
{
return sex;
}

public double getJavaScore()
{
return javascore;
}

}

测试程序2:

l  编辑、编译、调试运行程序4-3(教材116);

l  结合程序运行结果,理解程序代码,掌握静态域(netxtId)与静态方法(getNextId)的用法,在相关代码后添加注释;

l  理解Java单元(类)测试的技巧。

测试程序3:

l  编辑、编译、调试运行程序4-4(教材121);

l  结合程序运行结果,理解程序代码,掌握掌握Java方法参数的用法,在相关代码后添加注释;

测试程序4:

l  编辑、编译、调试运行程序4-5(教材129);

l  结合程序运行结果,理解程序代码,掌握Java用户自定义类的用法,掌握对象构造方法及对象使用方法,在相关代码后添加注释。

测试程序5:

l  编辑、编译、调试运行程序4-6、4-7(教材135);

l  结合程序运行结果,理解程序代码,掌握Java包的定义及用法,在相关代码后添加注释;

实验3  编写长方形类Rectangle与圆形类Circle,其中Rectangle类设置私有属性:width,length;Circle类设置私有属性radius。编写Rectangle类的带参构造函数Rectangle(int width,int length), Circle类的带参构造函数Circle(int radius),编写两个类的toString方法(Eclipse可自动生成)。上述2个类均定义以下方法:

求周长的方法public int getPerimeter()

求面积的方法public int getArea()

在main方法中完成以下任务:

(1)  输入1行长与宽,创建一个Rectangle对象;

(2)  输入1行半径,创建一个Circle对象;

(3)  将两个对象的周长加总输出,将两个对象的面积加总输出。

package theer;

import java.util.*;
public class Three {

@SuppressWarnings("resource")
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
System.out.println("请输入矩形的x y:");
int x = sc.nextInt();
int y = sc.nextInt();
System.out.println("矩形周长 "+Perimeter.getPerimeter(x,y));
System.out.println("矩形面积"+Area.getArea(x,y));

System.out.println("请输入圆的r:");
int r = sc.nextInt();
System.out.println("圆周长 "+Perimeter.getPerimeter(r));
System.out.println("圆面积"+Area.getArea(r));

double c = Perimeter.getPerimeter(x,y)+Perimeter.getPerimeter(r);
double s = Area.getArea(x,y)+Area.getArea(r);
System.out.println("矩形与圆的周长和为:"+c);
System.out.println("矩形与圆的面积和为:"+s);

}
}
class Perimeter
{
public static double getPerimeter(double width, double length)
{
return 2*(width + length);
}

public static double getPerimeter(int radius)
{
return 2*3.1415926*radius;
}

}
class Area
{
public static double getArea(double width, double height)
{
return width * height;
}

public static double getArea(int radius)
{ return 3.1415926*radius*radius;
}
}

 实验总结:此次实验通过对程序的解读和对类的理解进行了知识的了解和加强练习编写代码,虽然有些代码我写得不是太好,但是相信只要多加练习会好的。有些代码我还是可以通过老师的讲解和课本知识去理解。

 

posted on 2018-09-26 00:08  穷吉  阅读(130)  评论(0编辑  收藏  举报

导航