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以及如何设置字体和颜色,实验课上通过运行课本上的程序,进一步了解了图形用户界面。在老师的讲解下,对此有了更深的掌握。在后面的学习中,除了多练习代码,我还会多翻书去记下一些细节和概念。

最新文章

  1. 百度API城市代码CityCode官方文档
  2. 微信公众平台实现pc端网站登录
  3. 使用ImitateLogin模拟登录百度
  4. jquery选择器之基本筛选器
  5. HOG matlab练习
  6. PHP url重定向
  7. mysql三
  8. H5移动端的注意细节
  9. e-mail Web端管理
  10. 【系统架构】软件核心复杂性应对之道-领域驱动DDD(Domain-Driven Design)
  11. Sublime text 替换成对标签 首尾匹配的HTML 标签
  12. php中生成标准uuid(guid)的方法
  13. Java开发学习教程之对象的创建与使用
  14. 1.Tensorflow的基本概念:
  15. maven 远程仓库的配置
  16. Linux配置Hadoop 常用的命令
  17. Yii2 查询条件
  18. nginx配置转发详解
  19. [Codeforces526F]Pudding Monsters 分治
  20. ubuntu 18.04 64bit没有声音如何解决

热门文章

  1. IntelliJ IDEA常用配置(三)
  2. MySQL 王者晋级之路
  3. 洛谷 P5595 【XR-4】歌唱比赛
  4. Mondb
  5. 数据仓库001 - 复习Linux shell命令 - pwd mkdir mv tail -f xxx.log 和 ail -F xxx.log
  6. python-5-str常用操作
  7. java基础之----java常见异常及代码示例
  8. fastadmin表单提交后却没有关闭弹窗
  9. oracle的instr()函数
  10. Django学习笔记(16)——扩展Django自带User模型,实现用户注册与登录