201871010108-高文利《面向对象程序设计(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; |
第一部分:总结第九章、第十章理论知识(40分)
第九章:
1.集合是一种包含多个元素 并提供对所包含元素操作方法的类,其包含的元 素可以由同一类型的对象组成,也可以由不同类 型的对象组成。
2.集合框架:JAVA集合类库的统一架构。
框架就是一个类库,框架中包含一些通用接口和超类,实现这些接口或创建这些超类的子类就可方便的设计程序所需的类。
集合类的作用: Java的集合类提供了一些基本数据结构的支持。 例Vector、Hashtable、Stack等。
集合类的使用: Java的集合类包含在java.util包中。
集合类的特点:
1. 只容纳对象。 注意:数组可以容纳基本数据类型数据和对象。 如果集合类中想使用基本数据类型,又想利用 集合类的灵活性,可以把基本数据类型数据封 装成该数据类型的包装器对象,然后放入集合 中处理。
2. 集合类容纳的对象都是Object类的实例,一旦 把一个对象置入集合类中,它的类信息将丢失 ,这样设计的目的是为了集合类的通用性。 因为Object类是所有类的祖先,所以可以在这 些集合中存放任何类的对象而不受限制,但切 记在使用集合成员之前必须对它重新造型。
Vector类:
Vector类类似长度可变的数组。
Vector中只能存放对象。
Vector的元素通过下标进行访问。
Vector类关键属性: capacity表示集合多能容纳的元素个数。 capacityIncrement表示每次增加多少容量。 size表示集合当前元素个数。
Stack类:Stack类是Vector的子类。FILO
Hashtable类:
Hashtable通过键来查找元素。
Hashtable用散列码(hashcode)来确定键。所 有对象都有一个散列码,可以通过Object类的 hashCode()方法获得。
Math.random()方法的随机性。
集合框架中的基本接口:
Collection:集合层次中的根接口,JDK未提供这个 接口的直接实现类。
Set:不能包含重复的元素。对象可能不是按存放的 次序存放,也就是说不能像数组一样按索引的方式进 行访问,SortedSet是一个按照升序排列元素的Set。
List:是一个有序的集合,可以包含重复的元素。提 供了按索引访问的方式。 Map:包含了key-value对。Map不能包含重复的key 。
SortedMap是一个按照升序排列key的Map。
List:
List的明显特征是它的元素 都有一个确定的顺序。
LinkedList中的元素在内存 中是以链表方式存储的。 List的明显特征是它的元素 都有一个确定的顺序。
实现它的类有ArrayList和 LinkedList。
ArrayList中的元素在内存中 是顺序存储的。
LinkedList中的元素在内存 中是以链表方式存储的。
ArrayList和linkedList :
ArrayList:可以将其看作是能够自动增长容量的数组。利用ArrayList的toArray()返回一个数组。
Arrays.asList()返回一个列表。
LinkedList是采用双向循环链表实现的。
利用LinkedList实现栈(stack)、队列(queue)、双向队列(double-ended queue )。
ArrayList底层采用数组完成,而LinkedList则是以一般的 双向链表(double-linked list)完成,其内每个对象除了数据 本身外,还有两个引用,分别指向前一个元素和后一个元 素。
如果经常在 List 中进行插入和删除操作,应该使用LinkedList,否则,使用ArrayList将更加快速。
Set:
Set中的元素必须唯一。
添加到Set中的对象元素必须定义equals方法,以提供算法来判断欲添加进来的对象是否与已经存在的某对象相等,从而建立对象的唯一性。
实 现 Set 接口的类有HashSet,TreeSet
HashSet与TreeSet:
TreeSet是一个有序集合,TreeSet中元素将按照升序排列,缺省是按照自然顺序进行排列,意味着TreeSet中元素要实现Comparable接口。
可以在构造 TreeSet 对象时,传递实现了Comparator接口的比较器对象。
HashSet是基于Hash算法实现的,其性能通常都优于TreeSet。通常使用HashSet,需要排序的功能时,使用TreeSet。
Map:
映射(map)是一个存储关键字和值的关联或关键字/值对的对象。给定一个关键字,可以得到它的值。关键字和值都是对象。关键字必须是唯一的。但值是 可以被复制的。
Map接口映射唯一关键字到值。关键字(key)是以 后用于检索值的对象。给定一个关键字和一个值,可 以存储这个值到一个Map对象中。当这个值被存储以 后,就可以使用它的关键字来检索它
Map循环使用两个基本操作:get( )和put( )。使用put( )方法可以将一个指定了关键字和值的值加入映 射。为了得到值,可以通过将关键字作为参数来调用get( )方法。调用返回该值。
第十章:
Java的抽象窗口工具箱包含在java.awt包中,它提供了许 多用来设计GUI的组件类和容器类。
AWT库处理用户界面元素的方法:把图形元素的创 建和行为委托给本地GUI工具箱进行处理。
Swing:
Swing用户界面库是非基于对等体的GUI工具箱。
Swing具有更丰富并且更方便的用户界面元素集合。
Swing类库被放在javax.swing包里。
大部分AWT组件都有其Swing的等价组件。
Swing组件的名字一般是在AWT组件名前面添加一个字母“J”,如:JButton,JFrame,JPanel等。
组件:构成图形用户界面的元素,拿来即用图形表示(能在屏幕上显示,能和用户进行交互)
通常把由Component类的子类或间接子类创建的 对象称为一个组件。
容器:容器是Java中能容纳和排列组件的组件。
常用的容器是框架(Frame,JFrame)
添加组件:
Container类提供了一个方法add(),用来在容器类 组件对象中添加其他组件。
容器本身也是一个组件,可以把一个容器添加到 另一个容器里,实现容器嵌套。
框架的创建:
创建空框架
在Java中,常采用框架(Frame)创建初始界面,即GUI的顶层窗口. AWT库中有一个基于对等体的Frame类。
. 该类的Swing版本为JFrame,JFrame是Frame子类。
定位:
常用Component类的setLocation和setBounds方法常用属性
Title:框架标题
IconImage:框架图标
java.awt.Component 1.0
boolean isVisible() 检查组件是否可见
void setVisible(boolean b) 设置组件可见
void setSize(int width,int height) 把组件缩放到指定宽度和高度
void setBounds(int x,int y,intwidth,int height) 移动并缩放组件
Dimension getSize() 得到组件的大小
void setSize(Dimension d) 把组件缩放到指定的大小
2D图形:
Java SE了包含一个Java 2D库,该库提供了一个非常强大的图形操作集。
Graphics 2D 类是Graphics 类的子类, Graphics2D类对象通常可用Graphics对象转换而来。
颜色
Graphics2D类的setPaint方法(Graphics类为setColor方法)用来设置颜色。
例:g2.setPaint(Color.RED);g2.drawString(“Set Color”,100,100);
(1)Color类中定义的13种标准颜色
BLACK、BLUE、CYAN、DARK_GRAY、GRAY、GREEN、
LIGHT_GRAY、MAGENTA、ORANGE、PINK、RED、
WHITE、YELLOW
6,字体的使用:
(1)AWT中定义的五种逻辑字体名
SanaSerif
Serif
Monospaced
Dialog
DialogInput
这些逻辑字体在不同语言和操作系统上映射为不同
的物理字体。
(2)字体风格
Font.PLAIN
Font.BOLD
Fond.ITALIC
Fond.BOLD + Font.ITALIC
(3)设置字体
Font serif=new Font(“Serif”,Font.BOLD,14);
g2.setFont(serif);
第二部分:实验部分
实验1:测试程序1(6分)
使用JDK命令运行编辑、运行以下三个示例程序,结合运行结果理解程序;
掌握Vetor、Stack、Hashtable三个类的用途及常用API。
//示例程序1
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();
}
}
//示例程序2
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());
}
}
//示例程序3
import java.util.*;
class Counter {
int i = 1;
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++) {//生成10000个随机数
Integer r = new Integer((int) (Math.random() * 20));
if(ht.containsKey(r))//确定 Hashtable 是否包含特定键。
((Counter)ht.get(r)).i++;//计算key的hash值,匹配直到找到相对应key的value,若没有找到返回null
else ht.put(r, new Counter());
}
System.out.println(ht);
}
}
小结:
Vector类:类似长度可变的数组;只能存放对象;通过下标进行访问。
关键属性: capacity表示集合多能容纳的元素个数。 capacityIncrement表示每次增加多少容量。 size表示集合当前元素个数。
Stack类:Vector的子类。特点:FILO
Hashtable类:通过键来查找元素。用散列码(hashcode)来确定键。所 有对象都有一个散列码,可以通过Object类的 hashCode()方法获得。
Math.random()方法的随机性。get、put 方法的使用。
实验1:测试程序2(6分)
使用JDK命令编辑运行ArrayListDemo和LinkedListDemo两个程序,结合程序运行结果理解程序;
import java.util.*; public class ArrayListDemo {
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"));
// 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));
}
}
}
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");
}
}
在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)
{
var a = new LinkedList<String>();//创建链表
a.add("Amy");
a.add("Carl");
a.add("Erica"); var b = new LinkedList<String>();
b.add("Bob");
b.add("Doug");
b.add("Frances");
b.add("Gloria"); // 把b中的元素合并到a中 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(); //返回下一个要访问的元素
bIter.remove(); // 移出元素
}
} System.out.println(b); a.removeAll(b);//删除a中删除b中存在的所有元素 System.out.println(a);
}
}
实验2:测试程序1(6分)
运行下列程序,观察程序运行结果。
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); //获取或设置Visible属性 ,组件可见
}
}
在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(() ->
{
var 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:测试程序2(6分)
在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(() ->
{
var frame = new SizedFrame();
frame.setTitle("SizedFrame");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
});
}
} class SizedFrame extends JFrame
{
public SizedFrame()
{
// get screen dimensions Toolkit kit = Toolkit.getDefaultToolkit();//调用Toolkit类的静态方法getDefaultToolkit得到一个Toolkit对象
Dimension screenSize = kit.getScreenSize();//调用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);//框架大小定义为取值的50%
setLocationByPlatform(true);//告知窗口系统定位框架 // set frame icon Image img = new ImageIcon("icon.gif").getImage();
setIconImage(img); //图像设置为框架图标
}
}
实验2:测试程序3(6分)
在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(() ->
{
var 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);
}
}
实验总结:(19分)本周学习了第九、十章的内容。第九章主要学习了Vector类、Stack类、Hashtable类等遗留类的知识与API。ArrayList和linkedList的添加元素等方法的应用。第十章图像程序设计主要学习了添加组件与框架的创建。通过运行程序,并分析程序结果,理解代码相关知识以及API的使用。虽然有些代码刚开始有些不能理解,但通过不断的尝试与问同学,慢慢的理解相应代码。
201871010108-高文利《面向对象程序设计(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: ...
- 201521123072《java程序设计》第十二周学习总结
201521123072<java程序设计>第十二周学习总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student对象 ...
- 201521123061 《Java程序设计》第十二周学习总结
201521123061 <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)中软件重用的关键技术.继承机制使用已经定义的类作为基础建立新的类定义,新 ...
- 201521123034《Java程序设计》第十二周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student对象(属性:int id, String name,int age,doubl ...
随机推荐
- vue阻止事件冒泡和默认事件
本文地址:https://www.cnblogs.com/guomin/p/9273862.html 原生js取消事件冒泡 try{ e.stopPropagation();//非IE浏览器 } ca ...
- 《淘宝数据库OceanBase SQL编译器部分 源码阅读--解析SQL语法树》
淘宝数据库OceanBase SQL编译器部分 源码阅读--解析SQL语法树 曾经的学渣 2014-06-05 18:38:00 浏览1455 云数据库Oceanbase OceanBase是 ...
- Ubuntu安装有道词典
dpkg -i youdao-dict.deb正常安装 会报一堆依赖关系的错误, 1.更新系统 #更新系统 apt-get update apt-get dist-upgrade 2.对每一个未安装的 ...
- 【shell脚本】显示进度条
使用动态时针版本显示进度条 [root@VM_0_10_centos shellScript]# cat progressBar.sh #!/bin/bash # 进度条,动态时针版本 # 定义显示进 ...
- Socket超时时间设置
你知道在 Java 中怎么对 Socket 设置超时时间吗?他们的区别是什么?想一想和女朋友打电话的场景就知道了,如果实在想不到,那我们就一起来来看一下是咋回事吧 设置方式 主要有以下两种方式,我们来 ...
- RestController 能不能通过配置关闭
https://stackoverflow.com/questions/29958231/can-a-spring-boot-restcontroller-be-enabled-disabled-us ...
- VS工具箱不显示DEV控件解决方法
VS工具箱中不显示DEV控件解决方法 之前先装vs,再装dev控件,vs工具栏中自动会加载并显示dev相关组件,但是,在更新vs(我用2017版)后,原先安装好的dev控件库不显示在vs的工具栏中了. ...
- 前端移动框架Framework7入门
正版官网:https://framework7.io/ (英文) 对应国内:http://www.framework7.cn/ (中文) 本地构建步骤(Demo级别) 1.HTML结构 2.引入Fr ...
- word转html预览
#region Index页面 /// <summary> /// Index页面 /// </summary> /// <paramname="url&quo ...
- Linux用户和权限——权限管理
Linux用户和权限——权限管理 摘要:本文主要介绍了Linux系统中权限的分类,以及对权限的管理. 用户的三种身份 所有者 由于Linux是个多人多工的系统,因此可能常常会有多人同时使用这部主机来进 ...