201871010106-丁宣元 《面向对象程序设计(java)》第十二周学习总结
正文开头:
项目 |
内容 |
这个作业属于哪个课程 |
https://home.cnblogs.com/u/nwnu-daizh/ |
这个作业的要求在哪里 |
https://www.cnblogs.com/nwnu-daizh/p/11867214.html |
作业学习目标 |
(1) 掌握Vetor、Stack、Hashtable三个类的用途及常用API; (2) 掌握ArrayList、LinkList两个类的用途及常用API。 (3) 掌握Java GUI中框架创建及属性设置中常用类的API; (4) 应用结对编程(Pair programming),体验程序开发中的两人合作。 |
正文内容:
第一部分:总结第九,十章理论知识
9-1 Java的集合框架:实现对各种数据结构的封装
1.框架:一个类库
包括一些通用接口和超类,实现这些接口或者创建这些超类的子类就可方便的设计程序所需要的类
2.集合(容器): 包含多个元素并提供对所包含元素的操作方法的类,包含的元素可以由同一类型的对象组成,也可以由不同类型的对象组成
3.集合框架:Java集合类库的统一架构
4.作用: (1)Java的集合类提供了对基本数据类型的支持 eg:Vector、Hashtable、Stack
(2)集合类的使用:集合类包含在java.util包中 导入用import.java.util.*
5.特点:只容纳对象
数组可以容纳基本数据类型的数据和对象
6.新旧集合类
Java1.0和JDK1.1中:Vector(矢量),Hashtable(哈希表),Stack(堆栈),Properties(属性集)
a.Vector类:类似长度可变的数组,只能存放对象,通过下标进行访问
关键属性:capacity:集合最多能容纳的元素个数
capacityIncrement:每次增加多少容量
size:当前元素的集合
关键方法:void addElement(Object obj),
void add(int index, Object element),
Object elementAt(int index),
void insertElementAt(Object obj, int index)
b.Stack类:Vectoe类的子类
Stack类描述堆栈数据结构,即FILO
关键方法:public void push(Object item)
public Object pop()
public Object peek()
public Boolean empty()
c.Hashtable类:通过键值来查找元素
用散列码来确定键。所有对象都有一个散列码,可以通过Object类的hashCode()方法获得
Java1.2:设计了一个统一的类集:Collection,
List,
Set,
Map
9-2 集合框架中的基本接口
1.详解:
Collection:集合层次中的根接口
Set:不能包含重复的元素。对象可能不是按存放次序存放,即不能像数组一样按索引的方式进行访问,SortedSet是一个按照升序排列元素的Set
List:是一个有序集合,可以包含重复的元素,提供了按索引访问的方式
Map:包含key—value 对,不能包含重复的key
SortedMap:是一个按升序排列key的Map。
2.集合框架中的类:
a.List:元素都有一个确定的顺序;
类ArrayListLinkedList,元素在内存中是顺序存储
能够自动增长容量的数组,利用ArrayList的toArrY()返回一个数组
Arrays.asList()返回一个列表
类LinkedList,元素在内存中是链表方式存储
采用双向循环链表实现的
利用LinkedList实现栈,队列,双向队列,类内除了数据本身外,还有两个引用,分别指向前一个元素和后一个元素
b.Set:必须定义equals方法,提供算法来判断欲添加进来的元素是否与已经存在的某对象相等
实现Set接口的类:HashSet,TreeSet。
c.TreeSet:一个有序集合
元素按照升序排列,TreeSet中元素要实现Comparable接口
在构造TreeSet对象时,传递实现了Comparable接口的比较器对象
HashSet是基于Hash算法实现的,其性能通常都优于TreeSet,使用HashSet,需要排序的功能时,使用TreeSet。
d.Map:用来处理”键—值“对,以便通过键值来查找相应的元素
基于散列表实现(替代Hashtable)
TreeMap在一个二叉树的基础上实现。
1.定义:
Map接口映射唯一关键字的值。
关键字(key):用于检索值得对象。
给定一个关键字和值,可以存储这个值到一个Map对象中。
当值被存储后,就可以使用关键字来检索它
2.Map循环:get()
put():可以将一个指定了”关键字和值“得值加入映射,为了得到值,可以将关键字作为参数来调用get()方法。
3.方法:boolean containsKey(Object K) ;
boolean containsValue(Object v) ;
Object get(Object k) ;
Boolean isEmpty();
Object put(Object k, Object v) ;
Object remove (Object k)
4.接口:实现类:HashMap、TreeMap、Hashtable、properties
第九章总结:
可以为大型,小型作业提供便利;
第十章
10-1AWT与Swing简介
1.用户界面:用户与计算机系统(各种程序)交互的接口
图形用户界面:以图形方式呈现的用户界面;
2.AWT:
Java的抽象窗口工具箱在java.util包中,提供了许多用来设计GUI的组件类和容器类;
处理用户界面元素的方法:把图形元素的创建和行为委托给本地的GUI工具箱进行处理
缺陷:菜单、滚动条、和文本域等用户界面元素,在不同的平台,操作行为存在一些微妙的差异。
3.AWT组件
4.Swing:具有更加丰富且方便的用户界面元素的集合;底层平台的依赖很少;Swing类库在javax.swing包里;组件层次关系
5.AWT与Swing的关系
组件:构成图形用户界面的元素,用图形显示。
通常把由Comparable类的子类后者间接子类创建的对象称为一个组件。
6.容器:Java中能容纳和排列组件的组件
a.常用的容器时框架:(Frame,JFrame)
API:void setResizable(boolean b) ,
void set Title(String s),
void setIconImage(Image image)
b.添加组件:Container类提供了方法add(),用来在容器类组件对象中添加其他组件
eg:fra.add(button)
可以把一个容器添加到另一个容器里,实现容器嵌套
7.框架的创建(Frame)
a.创建空框架:常采用框架创建初始界面,即GUI的顶层窗口
b.框架定位于框架属性
定位:用Component类的setLocation和setBounds方法
属性:Title:框架标题
IconImage:框架图标
c.确定框架大小:调用Toolkit类的方法来得到屏幕尺寸信息
8.在组件中显示信息:
a.JFrame的结构:根面板、层级面板、玻璃面板和内容面板四层面板
用户也可以自行创建一个组件类;此时需要重载paintComponent()
*9.图形编程:2D图形 坐标系 图形类:
10.颜色的使用:Graphics 2D类的setPaint方法
a.标准色
b.复合色
11.字体的使用: (1) AWT的五种逻辑字体名:SanaSerif Serif Monospaced Dialog Dialoginput
(2)字体风格:Font.PLAIN Font.BOLD Font.ITALIC Font.BOLD+Font.ITALIC
12.图像:
将一个图像文件加载到程序中,调用Graphics类提供的DrawImage()显示
eg:
public void paintComponent(Graphics g)
{ g.drawImage(image x , y,null)}
第二部分:实验内容和步骤
实验1: 导入第9章示例程序,测试程序并进行代码注释。
测试程序1:
使用JDK命令运行编辑、运行以下三个示例程序,结合运行结果理解程序;
掌握Vetor、Stack、Hashtable三个类的用途及常用API。
示例代码1:
//示例程序1
import java.util.Vector;
class Cat {
private int catNumber;//Cat的私有属性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++) //for循环
cats.addElement(new Cat(i));
for(int i=0; i<cats.size(); i++)
(cats.elementAt(i)).print();
}
}
结果:
示例代码2:
//示例程序2
import java.util.*;
public class Stacks
{
static String[] months={"金","银","铜","铁"};//字符串数组month
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));//数组下标从0开始,故element 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.*; /**
* 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)
{
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"); // merge the words from b into a 合并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); // remove every second word from b 从第二个链表中每隔一个元素删除一个元素 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 批量操作: 删除从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,结合运行结果理解程序;
掌握在框架中添加组件;
掌握自定义组件的用法。
代码:
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(() -> //lambda表达式
{
JFrame frame = new NotHelloWorldFrame();
frame.setTitle("NotHelloWorld");//标题为NotHelloWorld
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关闭
frame.setVisible(true);//可见
});
}
} /**
* A frame that contains a message panel.
*/
class NotHelloWorldFrame extends JFrame//NotHelloWorldFrame继承JFrame
{
public NotHelloWorldFrame()
{
add(new NotHelloWorldComponent());//添加窗口
pack();
}
} /**
* A component that displays a message.
*/
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);
}
}
结果:
关于结对编程:
以下图片是一个结对编程场景:两位学习伙伴坐在一起,面对着同一台显示器,使用着同一键盘,同一个鼠标,他们一起思考问题,一起分析问题,一起编写程序。关于结对编程的阐述可参见以下链接:
http://www.cnblogs.com/xinz/archive/2011/08/07/2130332.html,http://en.wikipedia.org/wiki/Pair_programming
对于结对编程中代码设计规范的要求参考:http://www.cnblogs.com/xinz/archive/2011/11/20/2255971.html
结对编程:一种敏捷软件开发的方法,两个程序员在一个计算机上共同工作。一个人输入代码,而另一个人审查他输入的每一行代码。输入代码的人称作驾驶员,审查代码的人称作观察员。观察员同时考虑工作的战略性方向,提出改进的意见,增加代码的健壮性。在写代码时,可以互相讨论,提供思路。
三.实验总结
通过本次实验,我了解了:1.Vetor、Stack、Hashtable三个类用途及API 2.ArrayList、LinkList类的用法
3.Java GUI中框架创建及简单属性设置
本次实验以验证性实验为主,主要集中于加深对数据结构中常见类的用法和简单框架的构造,对简单的数据结构有了更进一步的理解。存在的问题是对Hashtable代码的理解有一些困难,还有lambda表达式不太理解,熟悉。在空闲时间我要把lambda表达式多下一些功夫再次理解。在理解书上代码后,尝试着在理解的基础上自己动手敲代码有困难,在写的过程中问题很多,有些问题看似明白了,实质上对本质还是不理解,致使写出来很空难,要多尝试多写写。其次对结对编程的要求和优点有了了解。
201871010106-丁宣元 《面向对象程序设计(java)》第十二周学习总结的更多相关文章
-
20155322 2016-2017-2 《Java面向对象程序设计》第十二周课堂练习之Arrays和String单元测试
20155322 2016-2017-2 <Java面向对象程序设计>第十二周课堂练习之Arrays和String单元测试 练习目地 在IDEA中以TDD的方式对String类和Array ...
-
201571030332 扎西平措 《面向对象程序设计Java》第八周学习总结
<面向对象程序设计Java>第八周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https: ...
-
201521123061 《Java程序设计》第十二周学习总结
201521123061 <Java程序设计>第十二周学习总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student对 ...
-
201521123072《java程序设计》第十二周学习总结
201521123072<java程序设计>第十二周学习总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student对象 ...
-
201521123038 《Java程序设计》 第十二周学习总结
201521123038 <Java程序设计> 第十二周学习总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student ...
-
201521123122 《java程序设计》第十二周学习总结
## 201521123122 <java程序设计>第十二周实验总结 ## 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将St ...
-
201771010118马昕璐《面向对象程序设计java》第八周学习总结
第一部分:理论知识学习部分 1.接口 在Java程序设计语言中,接口不是类,而是对类的一组需求描述,由常量和一组抽象方法组成.Java为了克服单继承的缺点,Java使用了接口,一个类可以实现一个或多个 ...
-
201771010134杨其菊《面向对象程序设计java》第八周学习总结
第八周学习总结 第一部分:理论知识 一.接口.lambda和内部类: Comparator与comparable接口: 1.comparable接口的方法是compareTo,只有一个参数:comp ...
-
201771010134杨其菊《面向对象程序设计java》第七周学习总结
第七周学习总结 第一部分:理论知识 1.继承是面向对象程序设计(Object Oriented Programming-OOP)中软件重用的关键技术.继承机制使用已经定义的类作为基础建立新的类定义,新 ...
-
201521123005 《Java程序设计》 第十二周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student对象(属性:int id, String name,int age,doubl ...
随机推荐
-
JavaScript基础知识总结(三)
JavaScript语法 七.循环语句 1.while 语法: while (exp) { //statements; } 说明:while (变量<=结束值) { 需执行的代码 } 例子: / ...
-
fileupload图片预览功能
FileUpload上传图片前首先预览一下 看看效果: 在专案中,创建aspx页面,拉上FileUpload控件一个Image,将用来预览上传时的图片. <%@ Page Language=&q ...
-
C++以对象管理资源
先看下面一段代码: class Node {}; Node* CreateNode() { } void Solve() { Node *p=CreateNode(); //调用CreateNode函 ...
-
簡單SQL存儲過程實例
簡單SQL存儲過程實例 摘自:http://blog.csdn.net/libra6956/article/details/5589173 实例1:只返回单一记录集的存储过程. 银行存款表(bankM ...
-
Prism&;MEF构建开发框架 (三)
菜单管控模块EntityFW 菜单的加载采用MEF技术,程序实现思路: 1 .主菜单加载页面MainMenuView.xaml指向MenuRegion 2. 菜单Item点击及内容加载,采用订阅模式, ...
-
利用systemtap学习Linux路由代码
http://bbs.chinaunix.net/thread-4090162-1-1.html 一.为什么要这样做读kernel route子系统代码,当我弄懂了数据结构之间的关系以及控制流程后,心 ...
-
javascript的层次
1.功能api 2.代码organization 3.performance 4.work flow
-
iOS-----------计算两个时间的时间差
UIButton * nameButton = [UIButton buttonWithType:UIButtonTypeCustom]; nameButton.frame = CGRectMake( ...
-
NOI2018游记
Day-1 下午报道,没什么好说的 Day0 先考笔试,开幕式咕到了下午 笔试没什么好说的,反正都是 \(100\) 好像有很多人被gedit坑了? 下午开幕式,很多省的口号都有意思,比如: &quo ...
-
Emmet/Zen Coding 快速入门说明
快速参考 以下是支持的特性: ele creates an HTML element tag 展开一个HTML元素标签 # creates an id attribute 作用于元素标签,展开一个id ...