实验六 接口的定义与使用

实验时间 2018-10-18

1、实验目的与要求

(1) 接口定义:接口不是类,而是对类的一组需求描述,这些类要遵从接口描述的统一格式进行定义;由常量和一组抽象方法组成;接口中的是所有方法自动地属于public。

任何实现Comparable接口的类都需要包含compareTo方法,并且这个方法的参数必须是一个Object对象,返回一个整型数值。

为了让类实现一个接口,两个步骤:1、将类声明为实现给定的接口

2、对接口中的所有方法进行定义

要让一个类使用排序服务必须让它实现compareTo方法。

(2)接口的特性:接口不是类,尤其不能使用new运算符实例化一个接口;接口变量必须引用实现了接口的类对象;使用instance检查一个对象是否实现了某个特定的接口;接口也可以被扩展;虽然在接口中不能包含实例域或静态方法,但却可以包含常量;尽管每个类只能够拥有一个超类,但却可以实现多个接口。

(3)回调:回调是一种常见的程序设计模式,在这种模式中,可以指出某个特定事件时应该采取的动作。

在java.swing包中有一个Timer类,可以使用它在到达给定的时间间隔时发出通告

(4) Comparator接口:对于每一个类,需要确定:1、默认的clone方法是否满足要求2、是否可以在可变的子对象上调用clone来修补默认的clone方法3、是否不该使用clone。

(5) Lambdajava中的一种lambda的表达形式:参数,箭头(->)以及一个表达式;无需指定lambda表达式的返回类型,lambda表达式的返回类型总是会由上下文推导出。

(6) 默认的克隆操作是“浅拷贝”,并没有克隆对象中引用的其他对象;如果对象中的所有数据域都是数值或其他基本类型,拷贝这些域没有任何问题,但如果对象包含子对象的引用,拷贝域就会得到相同子对象的另一个引用,这样一来,原对象和克隆的对象仍然会共享一些信息。

浅拷贝的影响:如果原对象和浅克隆对象共享的子对象不是可变的,那么这种共享就是安全的;或者在对象的生命期中,子对象一直包含不变的常量,没有更改器方法会改变它,也没有方法会生成它的引用,这种情况下同样是安全的。

不过,通常子对象都是可变的,必须重新定义clone方法来建立一个深拷贝,同时克隆所有子对象。

(7) 内部类:内部类是定义在另一个类中的类。

使用内部类的原因如下:1、内部类方法可以访问给类定义所在的作用域中的数据,包括私有的数据。2、内部类可以对同一个包中的其他类隐藏起来。3、当想要定义一个回调函数且不想编写大量代码时,使用匿名(anonymous)内部类比较便捷。

内部类既可以访问自身的数据域,也可以访问创建它的外围类对象的数据域(外围类的引用在构造器中设置),编译器修改了所有的内部类的构造器,添加一个外围类引用的参数。

(注意,在外围类的作用域之外,可以这样引用内部类:OuterClass.InnerClass)

内部类中声明的所有静态域都必须是final(如果这个域不是final,它可能就不是唯一的);内部类不能有static方法。

2、实验内容和步骤

实验1 导入第6章示例程序,测试程序并进行代码注释。

测试程序1:

l 编辑、编译、调试运行阅读教材214页-215页程序6-1、6-2,理解程序并分析程序运行结果;

l 在程序中相关代码处添加新知识的注释。

l 掌握接口的实现用法;

l 掌握内置接口Compareable的用法。

测试程序2:

编辑、编译、调试以下程序,结合程序运行结果理解程序;

interface  A

{

  double g=9.8;

  void show( );

}

class C implements A

{

  public void show( )

  {System.out.println("g="+g);}

}

 

class InterfaceTest

{

  public static void main(String[ ] args)

  {

       A a=new C( );

       a.show( );

System.out.println("g="+C.g);

  }

}

实验结果:

测试程序3:

l 在elipse IDE中调试运行教材223页6-3,结合程序运行结果理解程序;

l 26行、36行代码参阅224页,详细内容涉及教材12章。

l 在程序中相关代码处添加新知识的注释。

l 掌握回调程序设计模式;

实验结果;

测试程序4:

l 调试运行教材229页-231页程序6-4、6-5,结合程序运行结果理解程序;

l 在程序中相关代码处添加新知识的注释。

l 掌握对象克隆实现技术;

l 掌握浅拷贝和深拷贝的差别。

实验2 导入第6章示例程序6-6,学习Lambda表达式用法。

l 调试运行教材233页-234页程序6-6,结合程序运行结果理解程序;

l 在程序中相关代码处添加新知识的注释。

l 将27-29行代码与教材223页程序对比,将27-29行代码与此程序对比,体会Lambda表达式的优点。

实验截图:

注:以下实验课后完成

实验3: 编程练习

l 编制一个程序,将身份证号.txt 中的信息读入到内存中;

l 按姓名字典序输出人员信息;

l 查询最大年龄的人员信息;

l 查询最小年龄人员信息;

l 输入你的年龄,查询身份证号.txt中年龄与你最近人的姓名、身份证号、年龄、性别和出生地;

l 查询人员中是否有你的同乡。

package Test;public class Student implements Comparable<Student> {private String name;private String number ;private String sex ;private int age;private String province;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getnumber() {return number;}public void setnumber(String number) {this.number = number;}public String getsex() {return sex ;}public void setsex(String sex ) {this.sex =sex ;}public int getage() {return age;}public void setage(int age) {// int a = Integer.parseInt(age);this.age= age;}public String getprovince() {return province;}public void setprovince(String province) {this.province=province ;}public int compareTo(Student o) {return this.name.compareTo(o.getName());}public String toString() {return  name+"\t"+sex+"\t"+age+"\t"+number+"\t"+province+"\n";}
}

import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.Arrays;import java.util.Collections;import java.util.Scanner;public class Search{private static ArrayList<Person> Personlist1;public static void main(String[] args) {Personlist1 = new ArrayList<>();Scanner scanner = new Scanner(System.in);File file = new File("E:\\面向对象程序设计Java\\实验\\实验六\\身份证号.txt");try {FileInputStream F = new FileInputStream(file);BufferedReader in = new BufferedReader(new InputStreamReader(F));String temp = null;while ((temp = in.readLine()) != null) {Scanner linescanner = new Scanner(temp);linescanner.useDelimiter(" ");    String name = linescanner.next();String id = linescanner.next();String sex = linescanner.next();String age = linescanner.next();String place =linescanner.nextLine();Person Person = new Person();Person.setname(name);Person.setid(id);Person.setsex(sex);int a = Integer.parseInt(age);Person.setage(a);Person.setbirthplace(place);Personlist1.add(Person);}} catch (FileNotFoundException e) {System.out.println("查找不到信息");e.printStackTrace();} catch (IOException e) {System.out.println("信息读取有误");e.printStackTrace();}boolean isTrue = true;while (isTrue) {System.out.println("******************************************");System.out.println("1:按姓名字典顺序输出信息;");System.out.println("2:查询最大年龄与最小年龄人员信息;");System.out.println("3:按省份找你的同乡;");System.out.println("4:输入你的年龄,查询年龄与你最近人的信息;");System.out.println("5:退出");System.out.println("******************************************");int type = scanner.nextInt();switch (type) {case 1:Collections.sort(Personlist1);System.out.println(Personlist1.toString());break;case 2:int max=0,min=100;int j,k1 = 0,k2=0;for(int i=1;i<Personlist1.size();i++){j=Personlist1.get(i).getage();if(j>max){max=j; k1=i;}if(j<min){min=j; k2=i;}}  System.out.println("年龄最大:"+Personlist1.get(k1));System.out.println("年龄最小:"+Personlist1.get(k2));break;case 3:System.out.println("place?");String find = scanner.next();        String place=find.substring(0,3);String place2=find.substring(0,3);for (int i = 0; i <Personlist1.size(); i++) {if(Personlist1.get(i).getbirthplace().substring(1,4).equals(place)) {System.out.println("你的同乡:"+Personlist1.get(i));}} break;case 4:System.out.println("年龄:");int yourage = scanner.nextInt();int close=ageclose(yourage);int d_value=yourage-Personlist1.get(close).getage();System.out.println(""+Personlist1.get(close));break;case 5:isTrue = false;System.out.println("再见!");break;default:System.out.println("输入有误");}}}public static int ageclose(int age) {int m=0;int    max=53;int d_value=0;int k=0;for (int i = 0; i < Personlist1.size(); i++){d_value=Personlist1.get(i).getage()-age;if(d_value<0) d_value=-d_value; if (d_value<max) {max=d_value;k=i;}}    return k;}}//jiekouwenjiaanpublic class Person implements Comparable<Person> {private String name;private String id;private int age;private String sex;private String birthplace;public String getname() {return name;}public void setname(String name) {this.name = name;}public String getid() {return id;}public void setid(String id) {this.id= id;}public int getage() {return age;}public void setage(int age) {// int a = Integer.parseInt(age);this.age= age;}public String getsex() {return sex;}public void setsex(String sex) {this.sex= sex;}public String getbirthplace() {return birthplace;}public void setbirthplace(String birthplace) {this.birthplace= birthplace;
}public int compareTo(Person o) {return this.name.compareTo(o.getname());}public String toString() {return  name+"\t"+sex+"\t"+age+"\t"+id+"\t";}

实验4:内部类语法验证实验

实验程序1:

l 编辑、调试运行教材246页-247页程序6-7,结合程序运行结果理解程序;

l 了解内部类的基本用法。

实验程序2:

l 编辑、调试运行教材254页程序6-8,结合程序运行结果理解程序;

l 了解匿名内部类的用法。

实验截图:

实验程序3:

l 在elipse IDE中调试运行教材257页-258页程序6-9,结合程序运行结果理解程序;

l 了解静态内部类的用法。

实验截图:

实验总结:通过本周实验学习了接口,lambda表达式与内部类,学习了其定义了解了其用法,但是在真正写程序的应用中并不能很好的掌握和应用,对浅拷贝和深拷贝不明白,写程序时还有困难,然后自己会                   好好看代码、多多练习编码的编写;这次的实验编写代码的确实有困难。

转载于:https://www.cnblogs.com/zd0421/p/9824930.html

201771010137赵栋《第八周学习总结》相关推荐

  1. 2018-2019-20172329 《Java软件结构与数据结构》第九周学习总结

    2018-2019-20172329 <Java软件结构与数据结构>第九周学习总结 教材学习内容总结 <Java软件结构与数据结构>第十五章-图 一.图及无向图 1.图的相关概 ...

  2. # 2017-2018-1 20155224 《信息安全系统设计基础》第九周学习总结

    2017-2018-1 20155224 <信息安全系统设计基础>第九周学习总结 教材学习内容总结 存储器 随机访问存储器(RAM): 静态RAM:用来作为高速缓存存储器,每个位存储在一个 ...

  3. 2018-2019-1 20165206 《信息安全系统设计基础》第九周学习总结

    - 2018-2019-1 20165206 <信息安全系统设计基础>第九周学习总结 - 教材学习内容总结 计算机系统的主存被组织成一个由M个连续的字节大小的单元组成的数组.每个字节都有一 ...

  4. 20172304 《程序设计与数据结构》第九周学习总结

    20172304 <程序设计与数据结构>第九周学习总结 教材学习内容总结 本章是第十五章,主要介绍了图的概念. 首先我来介绍一下图的基本结构. 从逻辑上讲,图是由边和结点组成的,在我的理解 ...

  5. 20155227 2016-2017-2 《Java程序设计》第九周学习总结

    20155227 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 JDBC简介 JDBC全名Java DataBase Connectivity,是java联 ...

  6. 20162329 2017-2018-1 《程序设计与数据结构》第九周学习总结

    第九周学习总结 一.学习目标 二叉查找树的理解 二叉查找树的实现 平衡二叉查找树 哈夫曼树的实现 堆的理解 堆的实现 二.学习内容 1.二叉查找树 思路: 二叉查找树与一般二叉树的区别在于,二叉查找树 ...

  7. 20162316刘诚昊 第九周学习总结

    学号20162316 2016-2017-2 <程序设计与数据结构>第九周学习总结 ps:在赶进度,进度和其他同学们有所差距. 教材学习内容总结 -1. 当用某个类声明引用变量时,它可以指 ...

  8. 20165212第九周学习总结

    20165212第九周学习总结 教材内容总结 URL类 URL类是java.net包中的一个重要的类 一个URL对象包含的三个基本信息:协议.地址和资源 协议:必须是URL对象所在的Java虚拟机支持 ...

  9. 20175208 《Java程序设计》第九周学习总结

    20175208 2018-2019-2 <Java程序设计>第九周学习总结 一.教材学习内容总结: 第11章 JDBC与MySQL数据库 MySQL数据库管理系统 MySQL数据库管理系 ...

  10. 20175204 张湲祯 2018-2019-2《Java程序设计》第九周学习总结

    20175204 张湲祯 2018-2019-2<Java程序设计>第九周学习总结 教材学习内容总结 -第十一章JDBC和MySQL数据库要点: 1.下载MySQL和客户端管理工具navi ...

最新文章

  1. Linux ifconfig指令
  2. python 内建比较函数详解
  3. matlab 实验6 高层绘图操作,实验06_高层绘图操作(第5章).doc
  4. UBuntu国内镜像地址下载
  5. 多元算力加持,华为云鲲鹏大数据服务公测上线
  6. 解决pytorch RuntimeError: expected scalar type XXXX but found XXXX
  7. SQL Server 建立索引视图并查看性能状况
  8. WebService与RestAPI 、SoapAPI
  9. hive Unexpected column vector type LIST
  10. 半导体封装测试英语词汇量的软件,半导体英语
  11. WSJ0中的wv文件如何转换为wav文件
  12. 清华梦的粉碎—写给清华大学的退学申请
  13. 定理证明器HOL的下载和安装
  14. ICCV 2021 | 2D和3D通用!港大提出PCRL:新医疗影像自监督SOTA!
  15. TCTF writeup
  16. HTML5介绍,HTML5语义化标签
  17. serverlet 区别_jsp serverlet 区别
  18. 日常工作记录:安卓运行时出现的Cause: Dex cannot parse version 52 byte code.问题
  19. XML教程~一文完结
  20. LeetCode 695. 岛屿的最大面积

热门文章

  1. 5. 统计学基础1:平均值...四分位数、方差、标准差(均方差)、标准误(标准误差、均方根误差)、 标准分
  2. 数字化转型——技术转型推动业务转型(第一次讨论稿)
  3. 【Altium秘籍】room 复制报错的解决办法
  4. 关于微信小程序学习的一些心得
  5. 为什么移动计算比移动数据更便宜?
  6. linux u识别,基于uCLinux的纸币识别器底层系统研究和实现
  7. maven deploy
  8. python常用的集成开发工具,python的主流开发工具
  9. 一文读懂:股权激励的“三重境界”
  10. Pytorch模型训练和模型验证