201871010109-胡欢欢《面向对象程序设计(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.Java的集合框架 : 实现了对各种数据结构的封装

框架: 就是一个类库,框架中包含一些通用接口和超类,编程者实现这些接口或创建这些超类的子类就可方便的设计程序所需要的类

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

Java的集合类包含在Java.util包中

集合类只容纳对象,数组可以容纳基本数据类型和对象。

2. Vector类

长度可以改变的数组

只能存放对象

其元素通过下标进行访问

常用API:

       void  addElement(Object   obj)

Object  elementAt(int   index)

       void   add(int  index,  Object   element)

void   insertElementAt(Object  obj,int  index)

3. Hashtable 类

该类通过键查找元素

所有对象都有一个散列码,可以通过散列码来确定键,通过Object类的hashCode()方法可获得散列码

4. Stack类

用于描述堆栈数据结构,即FILO

常用API: public void push(Object item) //压栈

public Object pop()  //出栈

       public Object peek()  //查看栈顶元素,不弹栈

public boolean empty()  //判断是否栈空

5. 集合框架中的基本接口

Collection : 集合层次中的根接口。

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

HashSet:底层的数据结构是哈希表(散列表)。

TreeSet:底层数据结构是二叉树。

List: 为一个有序集合,可包含重复元素。提供了两种存储方式----ArrayList(顺序存储)和 linklist(链式存储)

ArrayList类是能够自动增加容量的数组,利用toArray()返回一个数组

LinkedList类底层运用双向循环链表来实现;利用LinkedList实现栈,队列等数据结构。

Map: 包含了Key-value对,不能包含重复的key。元素是成对出现的,以键和值的形式体现出来,键要保证唯一性。

注:其中SortedMap是按照升序排列key的Map.

第十章

理论知识

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

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

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

Swing:用户界面库是非基于对等体的GUI工具箱,具有更丰富并且更方便的用户界面元素集合。

Swing组件层次关系:

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

组件:构成图形用户界面的元素,拿来即用。通常把由Component类的子类或间接子类创建的对象称为一个组件。

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

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

框架创建:

创建空框架:用框架(Frame)创建初始界面     JFrame frame = new JFrame();

框架定位与框架属性:常用Component类的setLocation和setBounds方法

Title:框架标题                         IconImage:框架

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

创建框架时的常用类及API:

– boolean isVisible() 检查组件是否可见

– void setVisible(boolean b) 设置组件可见

– void setSize(int width,int height) 把组件缩放到指定宽度和高度
– void setBounds(int x,int y,int width,int height) 移动并缩放组件
– Dimension getSize() 得到组件的大小
– void setSize(Dimension d) 把组件缩放到指定的大小

void setResizable(boolean b) 缩放框架
– void setTitle(String s) 设置框架标题
– void setIconImage(Image image) 将Image用作框架图标

static Toolkit getDefaultToolkit() 返回默认工具箱
– Dimension getScreenSize()得到用户屏幕大小
2D对象:Java SE了包含一个Java 2D库,该库提供了一个非常强大的图形操作集

Java 2D图形类使用浮点数坐标系,这样可为坐标指定单位

2D库为每个图形类提供两个版本的静态内部类

 
第二部分:实验内容和步骤

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

测试程序1:

import java.util.Vector;
2 class Cat {
3 private int catNumber;
4 Cat(int i) {
5 catNumber = i;
6 }
7 void print() {
8 System.out.println("Cat #" + catNumber);
9 }
10 }
11 public class Cats{
12 public static void main(String[] args){
13 Vector<Cat> cats= new Vector<Cat>();
14 for(int i=0; i<7; i++)
15 cats.addElement(new Cat(i));
16 for(int i=0; i<cats.size(); i++)
17 (cats.elementAt(i)).print();
18 }
19 }

 测试程序2:
import java.util.*;
public class Stacks
{
static String[] months={"金","银","铜","铁"};//创建字符串数组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());//输出出栈元素,由栈的性质(先入后出)知出栈的顺序为铁,铜,银,金
}
}

测试程序3:

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();//创建哈希表这个数据类型,名为ht
for (int i = 0; i < 10000; i++) {
Integer r = new Integer((int) (Math.random() * 20));//将自动生成的0—20的数强制类型转换为int
if(ht.containsKey(r)) //判断r是否是哈希表中某个元素的键值
((Counter)ht.get(r)).i++;//是,则用get方法获得值,i++
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 lots of elements to the ArrayList... 在ArrayList中添加元素
al.add(new Integer(11));//利用add方法
al.add(new Integer(12));
al.add(new Integer(13));
al.add(new String("hello"));
// 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);//通过迭代器来生成对象,产生方法hasNext并返回
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");
}
}

运行结果:

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

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

 测试代码:

package linkedList;

import java.util.*;

public class LinkedListTest
{
public static void main(String[] args)
{
List<String> a = new LinkedList<String>();//创建泛型链表a
a.add("Amy");
a.add("Carl");
a.add("Erica"); List<String> b = new LinkedList<String>();//创建泛型链表b
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(); // 跳至第一元素
if (bIter.hasNext())
{
bIter.next(); // 跳至下一元素
bIter.remove();
}
} System.out.println(b); // 批量删除从b到a的所有单词 a.removeAll(b); System.out.println(a);
}
}

运行结果:

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

测试程序1:

package linkedList;
import javax.swing.*;
public class SimpleFrameTest
{
public static void main(String[] args)
{
JFrame frame = new JFrame(); //JFrame框架
frame.setBounds(0, 0,300, 200);//setBounds方法,从左上角开始,width:300,height: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.34 2018-04-10
* @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//SimpleFrame类继承与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 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表达式
{
JFrame frame = new SizedFrame();
frame.setTitle("SizedFrame");//设置标题
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关闭
frame.setVisible(true);//窗口可见
});
}
} class SizedFrame extends JFrame//SizedFrame继承于JFrame
{
public SizedFrame()
{
// get screen dimensions得到屏幕的大小 Toolkit kit = Toolkit.getDefaultToolkit();
Dimension screenSize = kit.getScreenSize();//以Dimension对象的形式返回屏幕的大小
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,结合运行结果理解程序;

     掌握在框架中添加组件;

    掌握自定义组件的用法。

  代码:

import javax.swing.*;
import java.awt.*;
public class NotHelloWorld
{
public static void main(String[] args)
{
EventQueue.invokeLater(() -> //lambda表达式
{
JFrame frame = new NotHelloWorldFrame();
frame.setTitle("NotHelloWorld");//标题为NotHelloWorld
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关闭
frame.setVisible(true);//可见的
});
}
}
class NotHelloWorldComponent extends JComponent//NotHelloWorldComponent继承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);
}
}
class NotHelloWorldFrame extends JFrame//NotHelloWorldFrame继承JFrame { public NotHelloWorldFrame() { add(new NotHelloWorldComponent());//添加窗口 pack(); } } 

运行结果:

三.实验总结

通过本次实验,在集合中我学习到了Vector类,Stack类和Hashtable类以及ArrayList和LinkList以及一些简单应用(API),并且结合老师讲解及自学了解了图形用户界面基本组件窗口、按钮、文本框、选择框、滚动条等的,收获良多,以后我会继续努力。

201871010109-胡欢欢《面向对象程序设计(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. url中的20%、22%、26%、28%、29%怎么解析还原成真实的字符

  2. lstm和gru详解

    一.LSTM(长短期记忆网络) LSTM是一种特殊的RNN类型,一般的RNN结构如下图所示,是一种将以往学习的结果应用到当前学习的模型,但是这种一般的RNN存在着许多的弊端.举个例子,如果我们要预测“ ...

  3. 2019 SDN阅读作业

    2019 SDN阅读作业 1.为什么需要SDN?SDN特点? 答:因为随着网络规模的不断扩大,封闭的网络设备内置了过多的复杂协议,增加了运营商定制优化网络的难度,科研人员无法在真实环境中规模部署新协议 ...

  4. Linux学习笔记-第18天 有点迷茫。。

    有点迷茫学的这些知识的实用性..但愿今天可以用得到这些吧

  5. 第04组 Alpha事后诸葛亮

    一.组长博客:地址 二.Postmortem模板 设想和目标 1.我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 我们要解决的问题是让大学生可以通过福鱼网站将暂时无 ...

  6. Paper | D3: Deep Dual-Domain Based Fast Restoration of JPEG-Compressed Images

    目录 摘要 读后感 故事 深度双域法(D3) 发表于2016年CVPR. 摘要 既利用了CNN,又考虑了JPEG压缩的特性,解决JPEG图像去失真问题. 针对于压缩特性,作者考虑了JPEG压缩方案的先 ...

  7. java基础之----java常见异常及代码示例

    概述 java中有两种错误类型,一个是Exception,一个是Error,都在java.lang包下,一般来说程序中的try...catch捕获的是Exception类型的异常,而Error类型的错 ...

  8. poj-2803 Defining Moment

    Defining Moment Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 1660   Accepted: 760 De ...

  9. 5分钟上手:本地开发环境启动HTTPS

    今天我们访问的所有网站几乎都是受HTTPS保护的.如果你的站点还没有,那你应该使用它.使用HTTPS保护服务器也意味着你不能从不是HTTPS服务器向此服务器发送请求.这给使用本地开发环境的开发人员带来 ...

  10. Kubernetes DaemonSet(部署守护进程)

    Kubernetes DaemonSet(部署守护进程) • 在每一个Node上运行一个Pod• 新加入的Node也同样会自动运行一个Pod 应用场景:Agent 官方文档:https://kuber ...