实验五 Java 语言特殊类和泛型应用练习 (课内实验)

2024-05-03 12:28

本文主要是介绍实验五 Java 语言特殊类和泛型应用练习 (课内实验),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、实验目的

本次实验的主要目的是练习在程序中应用 Java 特殊类和泛型进行程序设计,
熟悉内部类、集合类、字符串和泛型的基础知识,掌握应用内部类、集合类、字
符串和泛型完成程序设计的基本方法。

二、实验要求

  1. 认真阅读实验内容,完成实验内容所设的题目。
  2.  能够应用多种编辑环境编写Java语言源程序。
  3.  认真体会Java语言特殊类和泛型的概念。
  4.  将实验结果书写在实验报告中。

三、实验内容

1.运行下列程序,观察程序的运行结果
A.程序一
public class Fyt {public static void main(String[] args) {Parcel p = new Parcel();p.testShip();Parcel.Contents c = p.new Contents(33);Parcel.Destination d = p.new Destination( "Hawii" );p.setProperty( c, d );p.ship();
}
}
class Parcel {private Contents c;private Destination d;class Contents {private int i;Contents( int i ){ this.i = i; }int value() { return i; }}class Destination {private String label;Destination(String whereTo) {label = whereTo;}String readLabel() { return label; }}void setProperty( Contents c, Destination d ){this.c =c; this.d = d;}void ship(){System.out.println( "move "+ c.value() +" to "+ d.readLabel() );}public void testShip() {c = new Contents(22);d = new Destination("Beijing");ship();}
}

B.程序二
package org.example;public class Main {public  static void main(String[] args) {{Circle circle = new Circle(10);circle.Showdraw();}}static class Circle {private double radius = 0;public static int count = 1;public Circle(double radius) {this.radius = radius;}public void Showdraw() {Draw draw = new Draw();draw.drawSahpe();}class Draw {public void drawSahpe() {System.out.println(radius);System.out.println(count);}}}}

C.程序三
package org.example;public class Main {public  static void main(String[] args){Object obj = new Outer().makeTheInner(47);System.out.println("Hello World!" + obj.toString());}
}class Outer
{private int size = 5;public Object makeTheInner(int localVar){final int finalLocalVar = 99;class Inner{public String toString(){return("InnerSize:" + size + "localVar:" + localVar + "finalLocalVar:" + finalLocalVar);}}return new Inner();}
}
D.程序四
package org.example;public class Main {public  static void main(String[] args){Outer outer=new Outer();Object o=outer.makeTheInner(20);System.out.println(o);}
}
class Outer
{ private int size = 5;public Object makeTheInner(int localVar){final int finalLocalVar = 99;return new Object(){public String toString(){return ("InnerSize:" + size + "finalLocalVar:" +finalLocalVar+" localVar:"+localVar);}};}
}

E.程序五
package org.example;import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
public class Main {public static void main(String[] args) {String aString = "A", bString = "B", cString = "C", dString = "D",eString = "E";List<String> list = new LinkedList<>(); // 创建集合list.add(aString);list.add(bString);list.add(eString);
// 输出语句,用迭代器Iterator<String> iter = list.iterator(); // 创建集合迭代器while(iter.hasNext()) { // 遍历集合中的元素System.out.print(iter.next() + " ");}System.out.println(); // 换行list.set(1, cString); // 将索引位置1的对象修改为对象bStringIterator<String> it = list.iterator();while(it.hasNext()) {System.out.print(it.next() + " ");}}
}

F.程序六
package org.example;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Main {public static void main(String[] args) {DAO<User> dao = new DAO<User>();dao.map = new HashMap<String,User>();dao.save("1001", new User(1, 32, "梁朝伟"));dao.save("1002", new User(2,34,"汤唯"));dao.save("1003", new User(3,23,"刘嘉玲"));User u = dao.get("1002");System.out.println(u);dao.update("1002", new User(4,45,"成龙"));dao.delete("1003");List<User> list = dao.list();System.out.println(list);}}
class DAO<T> {Map<String,T> map;public void delete(String id){map.remove(id);}public List<T> list(){List<T> list = new ArrayList<T>();for(String s : map.keySet()){list.add(map.get(s));}return list;}public void update(String id,T entity){map.put(id, entity);}public T get(String id){return map.get(id);}public void save(String id,T entity){map.put(id, entity);}
}
class User {private int id;private int age;private String name;public int getId() {return id;}public void setId(int id) {this.id = id;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public User(int id, int age, String name) {super();this.id = id;this.age = age;this.name = name;}@Overridepublic String toString() {return "User [id=" + id + ", age=" + age + ", name=" + name + "]";}@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + age;result = prime * result + id;result = prime * result + ((name == null) ? 0 : name.hashCode());return result;}@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;User other = (User) obj;if (age != other.age)return false;if (id != other.id)return false;if (name == null) {if (other.name != null)return false;} else if (!name.equals(other.name))return false;return true;}}

四、编写程序完成下列功能

1.使用Map集合统计字符串中“123, 456, 789, 123, 456”中每个整数出现的次
数并打印出来。
package org.example;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.HashMap;public class Main {public static void main(String[] args) {String input = "123, 456, 789, 123, 456";String[] numbers = input.split(",\\s*");HashMap<String, Integer> countMap = new HashMap<>();for (String number : numbers) {if (countMap.containsKey(number)) {countMap.put(number, countMap.get(number) + 1);} else {countMap.put(number, 1);}}for (String number : countMap.keySet()) {System.out.println(number + ": " + countMap.get(number));}}
}
2. 定义一个Father和Child类,并进行测试。
要求如下:
Father类为外部类,类中定义一个私有的String类型的属性name,name的值
为“zhangjun”。
Child类为Father类的内部类,其中定义一个introFather()方法,方法中调用
Father类的name属性。
定义一个测试类Test,在Test类的main()方法中,创建Child对象,并调用
introFather ()方法。
public class Main {private String name = "zhangjun";public String getName() {return name;}public class Child {public void introFather() {System.out.println("Father's name is " + Main.this.getName());}}
}public class Test {public static void main(String[] args) {Main main = new Main();Main.Child child = main.new Child();child.introFather();}
}
3.声明一个泛型类:zhui(锥),表示锥型,并定义一个求锥型体积的方法,
编写程序分别输出圆锥和方锥的体积。注:锥型体积等于底面积和高的乘积。
package org.example;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.HashMap;
public class Main<T extends Number> {private T bottomArea;private T height;public Main(T bottomArea, T height) {this.bottomArea = bottomArea;this.height = height;}public double getVolume() {return bottomArea.doubleValue() * height.doubleValue() / 3;}public static void main(String[] args) {// 圆锥底面积为半径r的圆的面积,高为hMain<Double> circularCone = new Main<>(Math.PI * Math.pow(2.0, 2.0), 5.0);System.out.println("The volume of circular cone is: " + circularCone.getVolume());// 方锥底面积为边长为a的正方形的面积,高为hMain<Integer> squareCone = new Main<>(4, 6);System.out.println("The volume of square cone is: " + squareCone.getVolume());}
}

四、实验总结

在本次实验中,我通过设计学生信息管理系统,深入学习了Java特殊类和泛型的应用。通过实践,我掌握了内部类、集合类、字符串和泛型的基础知识,并学会了如何巧妙地运用它们进行程序设计。这次实验让我更加熟练地使用集合类存储和操作数据,以及利用泛型实现灵活的操作方法。

这篇关于实验五 Java 语言特殊类和泛型应用练习 (课内实验)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/956744

相关文章

Java实现在Word文档中添加文本水印和图片水印的操作指南

《Java实现在Word文档中添加文本水印和图片水印的操作指南》在当今数字时代,文档的自动化处理与安全防护变得尤为重要,无论是为了保护版权、推广品牌,还是为了在文档中加入特定的标识,为Word文档添加... 目录引言Spire.Doc for Java:高效Word文档处理的利器代码实战:使用Java为Wo

SpringBoot日志级别与日志分组详解

《SpringBoot日志级别与日志分组详解》文章介绍了日志级别(ALL至OFF)及其作用,说明SpringBoot默认日志级别为INFO,可通过application.properties调整全局或... 目录日志级别1、级别内容2、调整日志级别调整默认日志级别调整指定类的日志级别项目开发过程中,利用日志

Java中的抽象类与abstract 关键字使用详解

《Java中的抽象类与abstract关键字使用详解》:本文主要介绍Java中的抽象类与abstract关键字使用详解,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、抽象类的概念二、使用 abstract2.1 修饰类 => 抽象类2.2 修饰方法 => 抽象方法,没有

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

Spring 中的切面与事务结合使用完整示例

《Spring中的切面与事务结合使用完整示例》本文给大家介绍Spring中的切面与事务结合使用完整示例,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录 一、前置知识:Spring AOP 与 事务的关系 事务本质上就是一个“切面”二、核心组件三、完

Java实现远程执行Shell指令

《Java实现远程执行Shell指令》文章介绍使用JSch在SpringBoot项目中实现远程Shell操作,涵盖环境配置、依赖引入及工具类编写,详解分号和双与号执行多指令的区别... 目录软硬件环境说明编写执行Shell指令的工具类总结jsch(Java Secure Channel)是SSH2的一个纯J

JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法

《JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法》:本文主要介绍JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法,每种方法结合实例代码给大家介绍的非常... 目录引言:为什么"相等"判断如此重要?方法1:使用some()+includes()(适合小数组)方法2

SpringBoot 获取请求参数的常用注解及用法

《SpringBoot获取请求参数的常用注解及用法》SpringBoot通过@RequestParam、@PathVariable等注解支持从HTTP请求中获取参数,涵盖查询、路径、请求体、头、C... 目录SpringBoot 提供了多种注解来方便地从 HTTP 请求中获取参数以下是主要的注解及其用法:1

HTTP 与 SpringBoot 参数提交与接收协议方式

《HTTP与SpringBoot参数提交与接收协议方式》HTTP参数提交方式包括URL查询、表单、JSON/XML、路径变量、头部、Cookie、GraphQL、WebSocket和SSE,依据... 目录HTTP 协议支持多种参数提交方式,主要取决于请求方法(Method)和内容类型(Content-Ty

深度解析Java @Serial 注解及常见错误案例

《深度解析Java@Serial注解及常见错误案例》Java14引入@Serial注解,用于编译时校验序列化成员,替代传统方式解决运行时错误,适用于Serializable类的方法/字段,需注意签... 目录Java @Serial 注解深度解析1. 注解本质2. 核心作用(1) 主要用途(2) 适用位置3