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. 配置Ngnix1.15.11+php5.4出现502 Bad Gateway问题

    今天在调试Ngnix1.15.11+php5.4网站时候,因为网站数据和并发过大,出现502 Bad Gateway问题,所以记下笔记. 只需要修改php-fpm.conf的request_termi ...

  2. day47_9_6(前端之js)

    一.js发展. 1996年11月,JavaScript的创造者--Netscape公司,决定将JavaScript提交给国际标准化组织ECMA,希望这门语言能够成为国际标准.次年,ECMA发布262号 ...

  3. Angular 4.x NgClass ngStyle 指令用法

    <some-element [ngClass]="'first second'">...</some-element> <some-element [ ...

  4. 事件代理/事件委托----点击li弹出对应的下标和内容

    <body> <ul> <li>这是第一行</li> <li>这是第二行</li> <li>这是第三行</li ...

  5. JavaScript查找两个数组的相同元素和相差元素

    let intersection = a.filter(v => b.includes(v)) 返回交集数组 let difference = a.concat(b).filter(v => ...

  6. USB鼠标抓包数据(转)

    https://blog.csdn.net/zqixiao_09/article/details/53056854

  7. multer 基础教程(中文版)

    此文档于2016年10月3日翻译时multer的版本是1.2.0,它可能不是最新的! 甚至可能存在翻译错误!你可能需要阅读原版英语README 此文档仅供参考! Multer Multer 是一个 n ...

  8. mysql启动报错:Failed to start LSB: start and stop MySQL

    报错信息: [root@youxx- bin]# service mysql status Redirecting to /bin/systemctl status mysql.service ¡ñ ...

  9. 第三章 web设计原则:

    程序员的修炼从优秀带卓越 第三章 web设计原则:    网站的评判标准     加载的速度要快     这到底是什么东西     给我看一个例子     清清楚楚的告诉我要做什么,并且扫除障碍   ...

  10. string 字符串 的一些使用方法

    Java语言中,把字符串作为对象来处理,类String就可以用来表示字符串(类名首字母都是大写的). 字符串常量是用双引号括住的一串字符. 例如:"Hello World" Str ...