201871010107-公海瑜《面向对象程序设计(java)》第十二周学习总结

             项目                                内容
   这个作业属于哪个课程     https://www.cnblogs.com/nwnu-daizh/
   这个作业的要求在哪里   https://www.cnblogs.com/nwnu-daizh/p/11867214.html  
   作业学习目标

(1) 掌握Vetor、Stack、Hashtable三个类的用途及常用API;

(2)  掌握ArrayList、LinkList两个类的用途及常用API;

(3) 了解java集合框架体系组成;

(4) 掌握Java GUI中框架创建及属性设置中常用类的API;

(5) 了解Java GUI中2D图形绘制常用类的API;

第一部分:总结第九章、第十章理论知识

集合

1.数据结构介绍

l 一般将数据结构分为两大类:线性数据结构和非线性数据结构。

l 线性数据结构:线性表、栈、队列、串、数组和文件。

l 非线性数据结构:树和图。

A.线性表     单向链表 循环链表 双向循环链表

B.栈(Stack)

C.队列(Queue)

D.散列表

2.JAVA的集合框架

l JAVA的集合框架实现对各种数据结构的封装,以降低对数据管理与处理的难度。

l 所谓框架就是一个类库的集合,框架中包含很多超类,编程者创建这些超类的子类可较方便的设计设计程序所需的类。例如:Swing类包

l 集合(Collection或称为容器)是一种包含多个元素并提供对所包含元素操作方法的类,其包含的元素可以由同一类型的对象组成,也可以由不同类型的对象组成。

l 集合框架:JAVA集合类库的统一架构。

1)集合类的作用

l 集合类的作用:

– Java的集合类提供了一些基本数据结构的支持。

– 例如Vector、Hashtable、Stack等。

l 集合类的使用:

– Java的集合类包含在java.util包中。

– import java.util.*;

2)集合类的特点

l 特点一:

– 只容纳对象。

注意:数组可以容纳基本数据类型数据和对象。

– 如果集合类中想使用基本数据类型,又想利用集合类的灵活性,可以把基本数据类型数据封装成该数据类型的包装器对象,然后放入集合中处理。

l 特点二: 

– 集合类容纳的对象都是Object类的实例,一旦把一个对象置入集合类中,它的类信息将丢失,这样设计的目的是为了集合类的通用性。

– 因为Object类是所有类的祖先,所以可以在这些集合中存放任何类的对象而不受限制,但切记在使用集合成员之前必须对它重新造型。

3. 新旧集合类

Vector类

Stack类

Hashtable类

集合框架中的基本接口

l Collection:集合层次中的根接口,JDK未提供这个接口的直接实现类。

l Set:不能包含重复的元素。对象可能不是按存放的次序存放,也就是说不能像数组一样按索引的方式进行访问,SortedSet是一个按照升序排列元素的Set。

l List:是一个有序的集合,可以包含重复的元素。提供了按索引访问的方式。

l Map:包含了key-value对。Map不能包含重复的key。

l SortedMap是一个按照升序排列key的Map。

4.AWT与Swing简介

用户界面(User Interface)

– 用户与计算机系统(各种程序)交互的接口

图形用户界面(Graphical User Interface)

– 以图形方式呈现的用户界面

AWT

Java 的 抽 象 窗 口 工 具 箱 ( Abstract WindowToolkit, AWT)包含在java.awt包中,它提供了许多用来设计GUI的组件类和容器类。

AWT库处理用户界面元素的方法:把图形元素的创建和行为委托给本地GUI工具箱进行处理。

应用AWT编写依赖于本地用户界面元素GUI会暴露出一些缺陷。例如,菜单、滚动条和文本域这些用户界面元素,在不同的平台上,操作行为上存在一些微妙的差异。

Swing

l Swing用户界面库是非基于对等体的GUI工具箱。

l Swing具有更丰富并且更方便的用户界面元素集合。

l Swing对底层平台的依赖很少,因此与平台相关的bug很少。

l Swing会带来交叉平台上的统一视觉体验。

l Swing类库被放在javax.swing包里。

AWT与Swing的关系

l 大部分AWT组件都有其Swing的等价组件。

l Swing组件的名字一般是在AWT组件名前面添加一个字母“J”,如:JButton,JFrame,JPanel等

5.框架的创建

1)组件

构成图形用户界面的元素,拿来即用

l 用图形表示(能在屏幕上显示,能和用户进行交互)

– Button、Checkbox、Scrollbar、Choice、Frame

l 通常把由Component类的子类或间接子类创建的

对象称为一组件

2)容器

l 容器是Java中能容纳和排列组件的组件。

l 常用的容器是框架(Frame,JFrame)

3)添加组件

Container类提供了一个方法add(),用来在容器类组件对象中添加其他组件。

容器本身也是一个组件,可以把一个容器添加到另一个容器里,

4)框架(Frame)

l 在Java中,常采用框架(Frame)创建初始界面,即GUI的顶层窗口

5)在组件中显示信息

①Jframe的结构,它由根面板、层级面板、玻璃面板和 内容面板(content pane)四层面板构成。Swing程序员最关心的是内容面板,也称为内容窗格。

②在AWT中可调用add()方法把组件直接添加到AWT Frame中,在Swing中组件则添加到内容窗格里。

第二部分:实验部分

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

测试程序1:

l 使用JDK命令运行编辑、运行以下三个示例程序,结合运行结果理解程序;

l 掌握Vetor、Stack、Hashtable三个类的用途及常用API。

//示例程序1
import java.util.Vector;
class Cat {
private int catNumber;
Cat(int i) {
catNumber = i;
}
void print() {
System.out.println("Cat #" + catNumber);
}
}
public class Cats{
public static void main(String[] args){
Vector<Cat> cats= new Vector<Cat>();
for(int i=; i<; i++)
cats.addElement(new Cat(i));
for(int i=; i<cats.size(); i++)
(cats.elementAt(i)).print();
}
}

运行结果:

//示例程序2
import java.util.*;
public class Stacks
{
static String[] months={"金","银","铜","铁"};
public static void main(String[] args){
Stack<String> stk = new Stack<String> ();
for(int i=; i<months.length; i++)
stk.push(months[i]);//放入一个i值
      System.out.println(stk);
System.out.println("element 2=" + stk.elementAt());//element表示一个节点
while(!stk.empty())
System.out.println(stk.pop());
}
}

运行结果:

//示例程序3
import java.util.*;
class Counter {
int i = ;
public String toString() {
return Integer.toString(i);
}
} public class Statistics {
public static void main(String[] args) {
Hashtable ht = new Hashtable();//生成集合类Hashtable
for (int i = ; i < ; i++) {
Integer r = new Integer((int) (Math.random() * )); //随机生成实数定义为整型
if(ht.containsKey(r))
((Counter)ht.get(r)).i++;//用来判断r是否为一个间值
else
ht.put(r, new Counter());
}
System.out.println(ht);
}
}

运行结果:

测试程序2:

使用JDK命令编辑运行ArrayListDemo和LinkedListDemo两个程序,结合程序运行结果理解程序;

ArrayListDemo代码如下:
import java.util.*;

public class ArrayListDemo {
public static void main(String[] argv) {
ArrayList al = new ArrayList();
//用Add来添加对象且可以重载
// Add lots of elements to the ArrayList...
al.add(new Integer());
al.add(new Integer());
al.add(new Integer());
al.add(new String("hello"));
// 首先使用for循环将它们打印出来。
System.out.println("Retrieving by index:");
for (int i = ; i < al.size(); i++) {
System.out.println("Element " + i + " = " + al.get(i));
}
}
}

运行结果:

LinkedListDemo代码如下:

import java.util.*;
public class LinkedListDemo {
public static void main(String[] argv) {
LinkedList l = new LinkedList();
l.add(new Object());
l.add("Hello");
l.add("zhangsan"); //add方法可以重载
ListIterator li = l.listIterator(); //迭代器生成li对象
while (li.hasNext())
System.out.println(li.next());
if (l.indexOf("Hello") < ) //生成循环语句判断最后结果
System.err.println("Lookup does not work");
else
System.err.println("Lookup works");
}
}

运行结果:

测试程序3:

l 在Elipse环境下编辑运行调试教材360页程序9-1,结合程序运行结果理解程序;

l 掌握ArrayList、LinkList两个类的用途及常用API。

程序代码如下:

package linkedList;

import java.util.*;

/**
* This program demonstrates operations on linked lists.
* @version 1.12 2018-04-10
* @author Cay Horstmann
*/
public class LinkedListTest
{
public static void main(String[] args)
{
//创建a和b两个链表
List<String> a = new LinkedList<>();
a.add("Amy");
a.add("Carl");
a.add("Erica"); List<String> b = new LinkedList<>();
b.add("Bob");
b.add("Doug");
b.add("Frances");
b.add("Gloria"); //把b和a合并 ListIterator<String> aIter = a.listIterator();
Iterator<String> bIter = b.iterator(); while (bIter.hasNext())
{
if (aIter.hasNext()) aIter.next();
aIter.add(bIter.next());
} System.out.println(a); // 删除b中的每两个单词 bIter = b.iterator();
while (bIter.hasNext())
{
bIter.next(); // 跳过一个元素
if (bIter.hasNext())
{
bIter.next(); // 跳过下一个元素
bIter.remove(); // 删除该元素
}
} System.out.println(b); // 批量操作:从a中删除b中的所有单词 a.removeAll(b); System.out.println(a);
}
}

运行结果:

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

测试程序1:

运行下列程序,观察程序运行结果。

import javax.swing.*;
public class SimpleFrameTest
{
public static void main(String[] args)
{
JFrame frame = new JFrame();
frame.setBounds(0, 0,300, 200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}

运行结果:

l 在elipse IDE中调试运行教材407页程序10-1,结合程序运行结果理解程序;与上面程序对比,思考异同;

掌握空框架创建方法;

了解主线程与事件分派线程概念;

掌握GUI顶层窗口创建技术。

程序代码如下:

package simpleFrame;

import java.awt.*;
import javax.swing.*; /**
* @version 1.34 2018-04-10
* @author Cay Horstmann
*/
public class SimpleFrameTest
{
public static void main(String[] args)
{
EventQueue.invokeLater(() ->
{
SimpleFrame frame = new SimpleFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true); //设置用户是否能调整框架大小
})y; }
} class SimpleFrame extends JFrame
{
private static final int DEFAULT_WIDTH = ;
private static final int DEFAULT_HEIGHT = ; public SimpleFrame()
{
setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
}
}

运行结果:

测试程序2:

在elipse IDE中调试运行教材412页程序10-2,结合运行结果理解程序;

掌握确定框架常用属性的设置方法。

程  程序代码如下:

package sizedFrame;

import java.awt.*;
import javax.swing.*; /**
* @version 1.35 2018-04-10
* @author Cay Horstmann
*/
public class SizedFrameTest
{
public static void main(String[] args)
{
EventQueue.invokeLater(() -> //lambda表达式:通过线程开启一个队列
{
var frame = new SizedFrame();
frame.setTitle("SizedFrame");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
});
}
} class SizedFrame extends JFrame
{
public SizedFrame()
{
// 获得Dimension的大小 Toolkit kit = Toolkit.getDefaultToolkit();
Dimension screenSize = kit.getScreenSize();
int screenHeight = screenSize.height;
int screenWidth = screenSize.width; // 确定框架的大小,以及在屏幕上的位置 setSize(screenWidth / , screenHeight / );
setLocationByPlatform(true); // 将图像设置为框架的图标 Image img = new ImageIcon("icon.gif").getImage();
setIconImage(img);
}
}

yu运行结果:

测试程序3:

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

l 掌握在框架中添加组件;

掌握自定义组件的用法。

程序代码如下:

package notHelloWorld;

import javax.swing.*;
import java.awt.*; /**
* @version 1.34 2018-04-10
* @author Cay Horstmann
*/
public class NotHelloWorld
{
public static void main(String[] args)
{
EventQueue.invokeLater(() ->
{
var frame = new NotHelloWorldFrame();
frame.setTitle("NotHelloWorld");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
});
}
} /**
* A frame that contains a message panel.
*/
class NotHelloWorldFrame extends JFrame
{
public NotHelloWorldFrame()
{
add(new NotHelloWorldComponent()); //添加窗口
pack();
}
} /**
* A component that displays a message.
*/
class NotHelloWorldComponent extends JComponent
{
public static final int MESSAGE_X = ;
public static final int MESSAGE_Y = ; private static final int DEFAULT_WIDTH = ;
private static final int DEFAULT_HEIGHT = ; public void paintComponent(Graphics g) //绘图
{
g.drawString("Not a Hello, World program", MESSAGE_X, MESSAGE_Y);
} public Dimension getPreferredSize()
{
return new Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT);
}
}

运行结果:

三、实验总结

通过本周的学习,我更深层次地掌握了数据结构方面的知识,并且对图形用户界面的知识有了一定的了解。在课堂上,我初步了解了绘制图形的常用API以及如何设置字体和颜色,因为上个学期有过这方面知识的学习,所里理解起来并不是特别困难,但课后还是需要多加巩固练习。其次是编程方面还是有一定的困难,以后要继续练习。

201871010107-公海瑜《面向对象程序设计(java)》第十二周学习总结的更多相关文章

  1. 20155322 2016-2017-2 《Java面向对象程序设计》第十二周课堂练习之Arrays和String单元测试

    20155322 2016-2017-2 <Java面向对象程序设计>第十二周课堂练习之Arrays和String单元测试 练习目地 在IDEA中以TDD的方式对String类和Array ...

  2. 201521123061 《Java程序设计》第十二周学习总结

    201521123061 <Java程序设计>第十二周学习总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student对 ...

  3. 201521123072《java程序设计》第十二周学习总结

    201521123072<java程序设计>第十二周学习总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student对象 ...

  4. 201521123038 《Java程序设计》 第十二周学习总结

    201521123038 <Java程序设计> 第十二周学习总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student ...

  5. 201571030332 扎西平措 《面向对象程序设计Java》第八周学习总结

    <面向对象程序设计Java>第八周学习总结   项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https: ...

  6. 201521123122 《java程序设计》第十二周学习总结

    ## 201521123122 <java程序设计>第十二周实验总结 ## 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将St ...

  7. 201771010118马昕璐《面向对象程序设计java》第八周学习总结

    第一部分:理论知识学习部分 1.接口 在Java程序设计语言中,接口不是类,而是对类的一组需求描述,由常量和一组抽象方法组成.Java为了克服单继承的缺点,Java使用了接口,一个类可以实现一个或多个 ...

  8. 201771010134杨其菊《面向对象程序设计java》第八周学习总结

    第八周学习总结 第一部分:理论知识 一.接口.lambda和内部类:  Comparator与comparable接口: 1.comparable接口的方法是compareTo,只有一个参数:comp ...

  9. 201771010134杨其菊《面向对象程序设计java》第七周学习总结

    第七周学习总结 第一部分:理论知识 1.继承是面向对象程序设计(Object Oriented Programming-OOP)中软件重用的关键技术.继承机制使用已经定义的类作为基础建立新的类定义,新 ...

  10. 201521123005 《Java程序设计》 第十二周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student对象(属性:int id, String name,int age,doubl ...

随机推荐

  1. 浅谈C++ STL vector 容器

    浅谈C++ STL vector 容器 本篇随笔简单介绍一下\(C++STL\)中\(vector\)容器的使用方法和常见的使用技巧.\(vector\)容器是\(C++STL\)的一种比较基本的容器 ...

  2. Koa 中间件的执行顺序

    中间件工作原理 初始化koa实例后,我们会用use方法来加载中间件(middleware),会有一个数组来存储中间件,use调用顺序会决定中间件的执行顺序. 每个中间件都是一个函数(不是函数将报错), ...

  3. [日常] NOI2019 退役记

    这次要彻底退役了 开个坑先 Day -2 出发坐车去gz 好像和上次去雅礼的车是同一趟于是大家都以为和上次一样是 \(10:40\) 开车, 于是提前2h大概八点多就去坐公交了 到了之后取票, 发现票 ...

  4. 快速认识springcloud微服务

    这周浅显的学习了springcloud.简单聊一下微服务.所谓的微服务远远没有我想想的那么高端难以理解,简单说,就是多个服务分布在不同的服务器上,由这些服务互相配合完成某一项任务.那服务和服务之间调用 ...

  5. Java中的Object类的几个方法

    Object类被称为上帝类,也被称为祖宗类.在定义Java类时,如果没有指定父类,那么默认都会去继承Object类.配合Java的向上类型转换,借助Object类就可以完成很多工作了. 在Object ...

  6. Gin框架 - 使用 Logrus 进行日志记录

    概述 上篇文章分享了 Gin 框架的路由配置,这篇文章分享日志记录. 查了很多资料,Go 的日志记录用的最多的还是 github.com/sirupsen/logrus. Logrus is a st ...

  7. 用 qemu-user 在arm linux机器上运行amd64/x86程序

    1. qemu-user 是什么 本来, 对于 QEmu, 我只知道它是一个模拟器, 可以像 VirtualBox/VMWare 那样跑一个操作系统, 只不过 QEmu 可以在 AMD64 上面跑针对 ...

  8. Kubernetes Job与CronJob(离线业务)

    Kubernetes Job与CronJob(离线业务) Job Job分为普通任务(Job)  一次性执行 应用场景:离线数据处理,视频解码等业务 官方文档:https://kubernetes.i ...

  9. 1、Ext.NET 1.7官方示例笔记-事件

    官网参考地址:https://examples1.ext.net/#/Events/DirectEvents/Overview/ 先了解一下“事件” Ext.NET包括3种事件机制 DirectEve ...

  10. python3模块

    一.sys模块 import sys #print(sys.path) #打印环境变量 #print(sys.argv) print(sys.argv[3]) Sys.argv[ ]其实就是一个列表, ...