201871010133-赵永军《面向对象程序设计(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.数据结构:分为a.线性数据结构,如线性表、栈、队列、串、数组和文件。

b.非线性数据结构,如树和图。

1)所有数据元素在同一个线性表中必须是相同的数据类型。

  线性表按其存储结构可分为顺序表和链表。

2)栈:也是一种特殊的线性表,是一种后进先出(LIFO)的结构。

  栈是限定仅在表尾进行插入和删除运算的线性表,表尾称为栈顶,表头称为栈底。

3)队列:限定所有的插入只能在表的一端进行,而所有的删除都在表的另一端进行的线性表。是一种先进先出(FIFO)的结构。

  表中允许插入的一端称为队尾,允许删除的一端称为队头。

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

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

  2)集合类的作用(包含在java.util包中):提供一些基本数据结构的支持,如Vector、Hashtable、Stack等。

  3)集合类的特点:a.只容纳对象;

b.集合类容纳的对象都是Object类的实例(一旦把一个对象置入集合类中,它的类信息将丢失)

  4)Vector类:类似长度可变的数组。它只能存放对象,其元素通过下标进行访问。

  5)Stack类(Vector的子类):它描述堆栈数据结构。(所有对象都有一个散列码,可以通过Object类的hashCode方法获得。)

3.集合框架中的基本接口:a.Collection(构造类集框架的基础):集合层次中的根接口,JDK未提供这个接口的直接实现类。

b.Set:不能包含重复的元素,即元素必须唯一。对象可能不是按存放的次序存放。(实 现 Set 接口的类有HashSet,TreeSet)

c.List:有序的集合,可以包含重复的元素。提供了按索引访问的方式。实现它的类有ArrayList和LinkedLis(如ArrayList:能够自动增长容量的数组)

d.Map:Map接口映射唯一关键字到值。包含了key-value对。Map不能包含重复的key。SortedMap是一个按照升序排列key的Map。

3.用户界面:用户与计算机系统(各种程序)交互的接口

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

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

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

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

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

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

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

大部分AWT组件都有其Swing的等价组件。Swing组件的名字一般是在AWT组件名前面添加一个字母“J”。

创建框架

1.组件:构成图形用户界面的元素,拿来即用用图形表示(能在屏幕上显示,能和用户进行交互)

2.通常把由Component类的子类或间接子类创建的对象称为一个组件。

3.容器:容器是Java中能容纳和排列组件的组件。常用的容器是框架(Frame,JFrame)

定位:
  —常用Component类的setLocation和setBounds方法
常用属性
  —Title:框架标题
  —IconImage:框架图标

  确定框架的大小:通过调用Toolkit类的方法来得到屏幕尺寸信息。

4.在组件中显示信息

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

其中内容窗格是用来添加组件的,添加代码如下:

  Container contentPane = getContentPane();

用户也可以自行创建一个组件类,并在组件上进行绘制,此时需要重载paintComponent()。

用户的自建组件也可添加到内容窗格里。

public void setEnabled(boolean b):设置组件是否可被激活。
  当参数b取值true时,组件可以被激活。
  当参数b取值false 时,组件不可激活。
  默认情况下,组件是可以被激活的。
public void setVisible(boolean b):设置组件在该容器中的可见性。
  当b取值true时,组件在容器中可见。
  当b取值false时,组件在容器中不可见。
  除了Window型组件外,其它类型组件默认是可见的。

二:实验部分。

1、实验目的与要求

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

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

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

(4) 应用结对编程(Pair programming),体验程序开发中的两人合作。

2、实验内容和步骤

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

测试程序1:

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

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

Vetor

实验程序如下:

 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=0; i<7; i++)
cats.addElement(new Cat(i));
for(int i=0; i<cats.size(); i++)
(cats.elementAt(i)).print(); //进行强制类型转化
}
}

实验结果如下:

Stack:

实验程序如下:

 import java.util.*;
public class Stacks //栈(先进后出)
{
static String[] months={"金","银","铜","铁"};
public static void main(String[] args){
Stack<String> stk = new Stack<String> ();
for(int i=0; i<months.length; i++)
stk.push(months[i]); //进栈
System.out.println(stk);
System.out.println("element 2=" + stk.elementAt(2));
while(!stk.empty())
System.out.println(stk.pop()); //输出出栈元素
}
}

实验结果如下:

Hashtable:

实验程序如下:

 import java.util.*;
class Counter {
int i = 1; //不加权限修饰符:friendly型
public String toString() { //把其他类型的数据转为字符串类型的数据
return Integer.toString(i);
}
} public class Statistics {
public static void main(String[] args) {
Hashtable ht = new Hashtable();
for (int i = 0; i < 10000; i++) {
Integer r = new Integer((int) (Math.random() * 20)); //生成0到20(不包括20)的整型随机数
if(ht.containsKey(r)) //判断r是否是哈希表中一个元素的键值
((Counter)ht.get(r)).i++; //通过get方法获得其值
else
ht.put(r, new Counter()); //ht不存在
}
System.out.println(ht);
}
}

实验结果如下:

测试程序2:

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

ArrayListDemo:

实验程序如下:

 import java.util.*;

 public class ArrayListDemo   //ArrayList使用了数组的实现
{
public static void main(String[] argv) {
ArrayList al = new ArrayList();
// Add lots of elements to the ArrayList...
al.add(new Integer(11));
al.add(new Integer(12));
al.add(new Integer(13));
al.add(new String("hello")); //下标从0开始,添加4个元素
// First print them out using a for loop.
System.out.println("Retrieving by index:");
for (int i = 0; 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");
ListIterator li = l.listIterator(0);
while (li.hasNext())
System.out.println(li.next());
if (l.indexOf("Hello") < 0)
System.err.println("Lookup does not work");
else
System.err.println("Lookup works");
}
}

实验结果如下:

测试程序3

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

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

实验程序如下:

 import java.util.*;

 /**
* This program demonstrates operations on linked lists.
* @version 1.11 2012-01-26
* @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"); //合并a和b中的词 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); //从第二个链表中每隔一个元素删除一个元素 bIter = b.iterator();
while (bIter.hasNext())
{
bIter.next(); // skip one element
if (bIter.hasNext())
{
bIter.next(); // skip next element
bIter.remove(); // remove that element
}
} System.out.println(b); // bulk operation: remove all words in b from a a.removeAll(b); System.out.println(a);//通过AbstractCollection类中的toString方法打印出链表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);

}

}

实验程序如下:

 import javax.swing.*;
public class SimpleFrameTest
{
public static void main(String[] args)
{
JFrame frame = new JFrame(); //创建一个frame类对象
frame.setBounds(0, 0,300, 200);//定义坐标以及宽度和高度
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//窗口关闭操作
frame.setVisible(true);//窗口是否可见
}
}

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

※掌握空框架创建方法;

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

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

实验程序如下:

 package simpleFrame;

 import java.awt.*;
import javax.swing.*; /**
* @version 1.33 2015-05-12
* @author Cay Horstmann
*/
public class SimpleFrameTest
{
public static void main(String[] args)
{
EventQueue.invokeLater(() ->//lambda表达式:通过线程开启一个队列
{
SimpleFrame frame = new SimpleFrame();//创建一个类对象
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置对象点击关闭操作
frame.setVisible(true);//页面是否可见
});
}
} class SimpleFrame extends JFrame
{
private static final int DEFAULT_WIDTH = 300;
private static final int DEFAULT_HEIGHT = 200; public SimpleFrame()//构造器
{
setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);//设置大小
}
}

实验结果如下:

测试程序2:

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

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

实验程序如下:

 package simpleFrame;

 import java.awt.*;
import javax.swing.*; /**
* @version 1.34 2015-06-16
* @author Cay Horstmann
*/
public class SizedFrameTest
{
public static void main(String[] args)
{
EventQueue.invokeLater(() ->//lambda表达式:通过线程开启一个队列
{
JFrame frame = new SizedFrame();//创建一个frame类对象
frame.setTitle("SizedFrame");//设置标题
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭操作
frame.setVisible(true);//设置可见性
});
}
} class SizedFrame extends JFrame//继承
{
public SizedFrame()//构造器
{
//得到屏幕维度 Toolkit kit = Toolkit.getDefaultToolkit();//生成Toolkit对象
Dimension screenSize = kit.getScreenSize();
int screenHeight = screenSize.height;
int screenWidth = screenSize.width; // set frame width, height and let platform pick screen location setSize(screenWidth / 2, screenHeight / 2);//尺寸大小
setLocationByPlatform(true); // set frame icon Image img = new ImageIcon("icon.gif").getImage();
setIconImage(img);
}
}

实验结果如下:

测试程序3:

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

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

※掌握自定义组件的用法。

实验程序如下:

 package simpleFrame;

 import javax.swing.*;
import java.awt.*; /**
* @version 1.33 2015-05-12
* @author Cay Horstmann
*/
public class NotHelloWorld
{
public static void main(String[] args)
{
EventQueue.invokeLater(() ->//lambda表达式:通过线程开启一个队列
{
JFrame 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 = 75;
public static final int MESSAGE_Y = 100; private static final int DEFAULT_WIDTH = 300;
private static final int DEFAULT_HEIGHT = 200; 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); }
}

实验结果如下:

三:实验总结。

  通过本周学习,我进一步复习了一些有关数据结构的知识,另外初步了解了java集合类,也了解了Vector类,Stack类以及Hashtable类,图形用户界面,即以图形的方式呈现的用户界面。在学习理论知识时初步了解了绘制图形的常用API以及如何设置字体和颜色,实验课上通过运行课本上的程序,进一步了解了图形用户界面。在老师的讲解下,对此有了更深的掌握。在后面的学习中,除了多练习代码,我还会多翻书去记下一些细节和概念。

201871010133-赵永军《面向对象程序设计(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. 201521123051《Java程序设计》第十二周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 一 JAVA语言中主要通过流来完成IO操作. 流:计算机的输入输出之间流动的数据序列,也是类的对象.java中 ...

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

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

随机推荐

  1. LeetCode 674. Longest Continuous Increasing Subsequence最长连续递增序列 (C++/Java)

    题目: Given an unsorted array of integers, find the length of longest continuous increasing subsequenc ...

  2. [日常] SNOI2019场外VP记

    SNOI2019场外VP记 教练突然说要考一场别省省选来测试水平...正好还没看题那就当VP咯w... Day 1 八点开题打 .vimrc. 先看了看题目名...一股莫名鬼畜感袭来... 怎么T1就 ...

  3. CSP-J&S2019前颓废记

    说了是颓废记,就是颓废记,因为真的很颓废...... 2018年12月 我看懂了<啊哈算法>(仅仅是看懂,并没有完全学会,只看得懂,却不会敲) 插曲:八上期末考试 我们老师阻挠我继续学OI ...

  4. VBA基础 - 函数和模块

    概要 对于一般的 VBA 程序来说, 可能一个或几个函数就行了. 毕竟, VBA 只是作为 excel 的辅助工具来用的. 但是, 随着 VBA 写的越来越多, 用个工程来管理就有必要了, 而一个代码 ...

  5. MySQL管理工具 -- MySQL Workbench

    管理MySQL,可以使用可视化图形界面MySQL Workbench.MySQL Workbench是一个图形客户端,可以用可视化的方式查询.创建和修改数据库表.它对MySQL的操作仍然是发送SQL语 ...

  6. MySQL 合并字段及列转行

    数据表: 列转行:利用max(case when then) max---聚合函数 取最大值 (case course when '语文' then score else 0 end) ---判断   ...

  7. 搜索旋转排序数组II

    题目 假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [,,,,,,] 可能变为 [,,,,,,] ). 编写一个函数来判断给定的目标值是否存在于数组中.若存在返回 true, ...

  8. Logstash:Data转换,分析,提取,丰富及核心操作

    Logstash:Data转换,分析,提取,丰富及核心操作 Logstash plugins Logstash是一个非常容易进行扩张的框架.它可以对各种的数据进行分析处理.这依赖于目前提供的超过200 ...

  9. aspx.designer.cs没有自动生成代码(没有自动注册)

    遇到这个问题的最大可能是:aspx页面存在bug. 比如说我的主页是从项目里的别的页面复制过来的,但是少复制了一些引用,页面就存在bug,导致aspx.designer.cs没有自动生成代码. 解决方 ...

  10. 在Linux系统中运行并简单的测试RabbitMq容器

    以前使用的是Windows下面的RabbitMq,需要先安装 Erlang的语言环境等,这次直接在Linux中的Docker容器来测试一下 1:docker配置RabbitMq的指令 docker r ...