实验四类与对象的定义及使用
实验时间 2018-9-20
一.理论知识:
1、类与对象的基础概念
类:对具有相同属性和方法的一类事物的抽象。
对象:具体的某一事物,代表自身的一些属性和方法。
类(对象)之间的关系:类是一种抽象的概念集合,是最基础的组织单位,作为对象的模板、合约或蓝图。类是对象的类型,使用一个通用类可以定义同一类型的对象,类中定义对象的数据域是什么以及方法是做什么的。
关联(组合、聚合),继承,依赖、实现。
2、使用预定义类
(1)在java程序设计语言中,使用构造器构造新事例。构造器是一种特殊的方法,用来构造并初始化对象。
(2)更改器前缀为set;访问器前缀为get;
(3)构造器和类有相同的名字
3、用户自定义类
(1)Employee类
(2)隐式参数与显式参数
4、静态域与静态方法
(1)静态域: 如果将静态域定义为static ,那么每个类中只有一个这样的域,而每一个对象对于所有的实例域都有自己的一份拷贝本。
(2静态常量 :静态变量使用的比较少,但是静态常量却使用的比较多 。
(3)静态方法 : 静态方法是一种不能由对象操作的方法, 例如Math类中的求取一个数的次方的pow()方法就是一个静态方法。表达式是: Math.pow(x, a),在运算时,不使用任何Math对象,换句话说,没有隐式的参数。可以认为静态方法是没有this参数的方法(在一个非静态的方法中,this参数表示这个方法的隐式参数)
(4)main方法:我们学习java的时候,程序中大多会有一个main 方法,我们都称作程序的入口,main方法不对任何对象进行操作,事实上,在启动程序的时候,还没有任何一个对象,静态的main方法将执行并创建程序所需的对象。
5、方法参数
6、对象构造
7、包
Java允许把一个或多个类收集在一起成为一组,称作包,以便于组织任务,标准Java库分为许多包.java.langjava.utiljava,net等,包是分层次的所有的java包都在java和javax包层次内。
8、类路径
9、文档注释
10、类设计技巧
二 实验内容
1、实验目的与要求
(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成绩
1 import java.util.*; 2 public class StudentTest 3 { 4 public static void main(String[] args) 5 { 6 Employee[] student = new Employee[3]; 7 System.out.println("请输入学生"); 8 9 @SuppressWarnings("resource") 10 Scanner in = new Scanner(System.in); 11 for(int i=0;i<student.length;i++) { 12 student[i]=new Employee(in.next(),in.next(),in.nextInt()); 13 } 14 System.out.println("name"+" "+"sex"+" "+"javascore"); 15 16 for (Employee e : student) 17 System.out.println(e.getName() +" "+e.getSex()+" "+e.getJavaScore()); 18 } 19 } 20 21 class Employee 22 { 23 private String name; 24 private String sex; 25 private int javascore; 26 27 public Employee(String n, String s, int m) 28 { 29 name = n; 30 sex = s; 31 javascore =m; 32 } 33 34 public String getName() 35 { 36 return name; 37 } 38 39 public String getSex() 40 { 41 return sex; 42 } 43 44 public int getJavaScore() 45 { 46 return javascore; 47 } 48 }
测试程序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) 将两个对象的周长加总输出,将两个对象的面积加总输出。
1 package shiyan; 2 3 import java.util.Scanner; 4 5 public class jisuan { 6 7 public static void main(String[] args) { 8 // TODO 自动生成的方法存根 9 Scanner in=new Scanner(System.in); 10 System.out.println("请输入长方形的长与宽:"); 11 int length=in.nextInt(); 12 int width=in.nextInt(); 13 Rectangle a=new Rectangle(length, width); 14 System.out.println("长方形周长:"+a.getPerimeter()); 15 System.out.println("长方形面积:"+a.getArea()); 16 System.out.println("输入圆半径:"); 17 int r=in.nextInt(); 18 Circle b=new Circle(r); 19 System.out.println("圆的周长为:"+b.getPerimeter()); 20 System.out.println("圆的面积为:"+b.getArea()); 21 System.out.println("长方形和圆的周长之和="+(a.getPerimeter()+b.getPerimeter())); 22 System.out.println("长方形和圆的面积和="+(a.getArea()+b.getArea())); 23 } 24 } 25 class Rectangle 26 { 27 private int length; 28 private int width; 29 public Rectangle(int l,int w) 30 { 31 length=l; 32 width=w; 33 } 34 public int getPerimeter() 35 { 36 int Perimeter=(length+width)*2; 37 return Perimeter; 38 } 39 40 public int getArea() 41 { 42 int Area=length*width; 43 return Area; 44 } 45 } 46 class Circle 47 { 48 private int radius; 49 double Pi=3.14; 50 public Circle(int r) 51 { 52 radius=r; 53 } 54 public double getPerimeter() 55 { 56 double Perimeter=2*Pi*radius; 57 return Perimeter; 58 } 59 public double getArea() 60 { 61 double Area=Pi*radius*radius; 62 return Area; 63 } 64 }
实验总结:理解了用户自定义类的定义,同时掌握了对象的声明对类属性及方法的使用更加熟悉,理论实验结合,不足之处有很多,编程能力很缺乏,学到了很多,会继续努力。