实验五 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

相关文章

Spring Boot循环依赖原理、解决方案与最佳实践(全解析)

《SpringBoot循环依赖原理、解决方案与最佳实践(全解析)》循环依赖指两个或多个Bean相互直接或间接引用,形成闭环依赖关系,:本文主要介绍SpringBoot循环依赖原理、解决方案与最... 目录一、循环依赖的本质与危害1.1 什么是循环依赖?1.2 核心危害二、Spring的三级缓存机制2.1 三

在Spring Boot中浅尝内存泄漏的实战记录

《在SpringBoot中浅尝内存泄漏的实战记录》本文给大家分享在SpringBoot中浅尝内存泄漏的实战记录,结合实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录使用静态集合持有对象引用,阻止GC回收关键点:可执行代码:验证:1,运行程序(启动时添加JVM参数限制堆大小):2,访问 htt

SpringBoot集成Milvus实现数据增删改查功能

《SpringBoot集成Milvus实现数据增删改查功能》milvus支持的语言比较多,支持python,Java,Go,node等开发语言,本文主要介绍如何使用Java语言,采用springboo... 目录1、Milvus基本概念2、添加maven依赖3、配置yml文件4、创建MilvusClient

浅析Java中如何优雅地处理null值

《浅析Java中如何优雅地处理null值》这篇文章主要为大家详细介绍了如何结合Lambda表达式和Optional,让Java更优雅地处理null值,感兴趣的小伙伴可以跟随小编一起学习一下... 目录场景 1:不为 null 则执行场景 2:不为 null 则返回,为 null 则返回特定值或抛出异常场景

SpringMVC获取请求参数的方法

《SpringMVC获取请求参数的方法》:本文主要介绍SpringMVC获取请求参数的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下... 目录1、通过ServletAPI获取2、通过控制器方法的形参获取请求参数3、@RequestParam4、@

SpringShell命令行之交互式Shell应用开发方式

《SpringShell命令行之交互式Shell应用开发方式》本文将深入探讨SpringShell的核心特性、实现方式及应用场景,帮助开发者掌握这一强大工具,具有很好的参考价值,希望对大家有所帮助,如... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定

SpringBoot应用中出现的Full GC问题的场景与解决

《SpringBoot应用中出现的FullGC问题的场景与解决》这篇文章主要为大家详细介绍了SpringBoot应用中出现的FullGC问题的场景与解决方法,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录Full GC的原理与触发条件原理触发条件对Spring Boot应用的影响示例代码优化建议结论F

springboot项目中常用的工具类和api详解

《springboot项目中常用的工具类和api详解》在SpringBoot项目中,开发者通常会依赖一些工具类和API来简化开发、提高效率,以下是一些常用的工具类及其典型应用场景,涵盖Spring原生... 目录1. Spring Framework 自带工具类(1) StringUtils(2) Coll

MySQL 分区与分库分表策略应用小结

《MySQL分区与分库分表策略应用小结》在大数据量、复杂查询和高并发的应用场景下,单一数据库往往难以满足性能和扩展性的要求,本文将详细介绍这两种策略的基本概念、实现方法及优缺点,并通过实际案例展示如... 目录mysql 分区与分库分表策略1. 数据库水平拆分的背景2. MySQL 分区策略2.1 分区概念

SpringBoot条件注解核心作用与使用场景详解

《SpringBoot条件注解核心作用与使用场景详解》SpringBoot的条件注解为开发者提供了强大的动态配置能力,理解其原理和适用场景是构建灵活、可扩展应用的关键,本文将系统梳理所有常用的条件注... 目录引言一、条件注解的核心机制二、SpringBoot内置条件注解详解1、@ConditionalOn