201871010135 张玉晶《面向对象程序设计(java)》第十二周学习总结
内容 |
|
这个作业属于哪个课程 |
https://www.cnblogs.com/nwnu-daizh/ |
这个作业的要求在哪里 |
https://www.cnblogs.com/zyja/p/11865491.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类
• 类似长度可变的数组
• 只能存放对象
• 其元素通过下标进行访问
• 关键方法: ——void addElement(Object obj)
——void add(int index, Object element)
——Object elementAt(int index)
——void insertElementAt(Object obj, int index)
3. Stack类
• 描述堆栈数据结构,即FILO
• 关键方法: -public void push(Object item) //把项压入栈顶
-public Object pop() //出栈
-public boolean empty() //测试堆栈是否为空
-public Object peek() //查看栈顶对象而不移除它
4. Hashtable 类
• Hashtable通过键来查找元素
• 用散列码来确定键,所有对象都有一个散列码,可以通过Object类的hashCode()方法获得
5. 集合框架中的基本接口
• Collection : 集合层次中的根接口。
• Set: 不能包含重复的元素。对象可能不是按存放的次序存放,也就是说不能像数组一样按索引的方式进行访问,SortedSet是一个按照升序排列元素的Set.
HashSet:底层的数据结构是哈希表(散列表)。无序,比数组查询效率高,线程不同步。
TreeSet:底层数据结构是二叉树。可以对Set集合的元素按照指定规则进行排序。线程不同步。
• List: 是一个有序的集合,可以包含重复的元素。提供了按索引访问的方式----ArrayList(按顺序存储)和 linklist(按链式存储)
ArrayList类可以将其看作是能够自动增长容量的数组,利用ArrayList的toArray()返回一个数组
LinkedList类是采用双向循环链表实现的;利用LinkedList实现栈,队列,双向队列,类内除了数据本身外,还有两个引用,分别指向前一个元素和后一个元素;
• Map: 包含了Key-value对,不能包含重复的key。元素是成对出现的,以键和值的形式体现出来,键要保证唯一性。
• SortedMap是一个按照升序排列key的Map.
第十章
1. AWT: Java的抽象窗口工具箱包含在Java.awt包中,他提供了许多用来设计GUI的组件类和容器类
2. String类概述: Swing新一代的图形界面工具。位于javax.swing包中。
3. 创建框架:顶层窗口被称为框架(frame)
• Frame 类的Swing版本名为JFrame,它扩展于Frame.
• 组件: 由component类的子类或间接子类的对象称为一个组件。
组件内的常用API:
4. 容器 : 是Java中能容纳和排列组件的组件,常用的容器是 框架。
5. 添加组件: Container类提供了一个方法 add(), 用来在容器内组件对象中添加其他组件
6. 在 Swing 中有三种可以使用的顶层容器,分别是 JFrame、JDialog 和 JApplet。
a . JFrame:用于框架窗口的类,此窗口带有边框、标题、关闭和最小化窗口的图标。带 GUI 的应用程序至少使用一个框架窗口。
b. JDialog:用于对话框的类。
c. JApplet:用于使用 Swing 组件的 Java Applet 类.
7. 框架定位和框架属性:
setLocation和setBounds方法用于设置框架的位置。
setIconImage用于告诉窗口系统在标题栏、任务切换窗口等位置显示哪个图标。
setTitle:改变标题栏文字。
setResizable:利用一个boolean值确定框架的大小是否允许用户改变。
通过调用Toolkit类的方法来得到屏幕尺寸信息(确定框架大小)
11. JFrame类本身只包含若干个改变外观的方法。然而,继承了各个超类中许多处理框架大小和位置的方法。如:
dispose方法用于关闭窗口,并回收创建窗口所使用的全部系统资源。
setIconImage方法用于将窗口极小化时的图标设置为Image对象。
setTitle方法用于改变标题栏中的文本。
setResizable方法利用一个boolean值确定框架的大小是否允许用户改变。
setLocation(x,y)方法将窗口放置在坐标为x,y的位置。
setBounds(x,y,width,height)方法将窗口指定位置,同时设定窗口大小。
12. 处理2D图形
Graphics类包含绘制直线,矩形或者椭圆的方法。但是绘制图形的能力有限,不能改变线的粗细,不能旋转这些图形
Java 2D 支持更加复杂的图形,如圆弧,二次曲线,三次曲线和通用路径。
2D图形类使用浮点数坐标系
13. 颜色的使用:
Graphics 2D类的setPaint方法(Graphics 类为setColor方法)用来设置颜色;
第二部分:实验内容和步骤
实验1: 导入第9章示例程序,测试程序并进行代码注释。
测试程序1:
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=; i<; i++)
cats.addElement(new Cat(i));
for(int i=; 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> ();//创建String类型的栈对象str
for(int i=; i<months.length; i++)
stk.push(months[i]);//将数组中的元素入栈
System.out.println(stk);
System.out.println("element 2=" + stk.elementAt());//将数组中第二个元素输出
while(!stk.empty())//当栈不为空的时候
System.out.println(stk.pop());//出栈
}
}
运行结果如下:
3.
import java.util.*;
class Counter {
int i = ;
public String toString() {
return Integer.toString(i);
}
} public class Statistics {
public static void main(String[] args) {
Hashtable ht = new Hashtable();
for (int i = ; i < ; i++) {
Integer r = new Integer((int) (Math.random() * ));//产生(0,20)之间的随机数
if(ht.containsKey(r))
((Counter)ht.get(r)).i++;//统计每个随机数出现的次数
else
ht.put(r, new Counter());
}
System.out.println(ht);
}
}
运行结果如下:
测试程序2:
1. 使用JDK命令编辑运行ArrayListDemo和LinkedListDemo两个程序,结合程序运行结果理解程序;
package 实验十;
import java.util.*; public class ArrayListDemo {
public static void main(String[] argv) {
ArrayList al = new ArrayList();
// 初始化a1这个对象
al.add(new Integer());
al.add(new Integer());
al.add(new Integer());
al.add(new String("hello"));
// First print them out using a for loop.
System.out.println("Retrieving by index:");
for (int i = ; i < al.size(); i++) {
System.out.println("Element " + i + " = " + al.get(i));
}
}
}
运行结果如下:
2. 在Elipse环境下编辑运行调试教材360页程序9-1,结合程序运行结果理解程序;
掌握ArrayList、LinkList两个类的用途及常用API。
import java.util.*;
public class LinkedListTest
{
public static void main(String[] args)
{
List<String> a = new LinkedList<String>();//创建了一个线性表a,a的元素类型是String类
a.add("Amy");
a.add("Carl");
a.add("Erica"); LinkedList<String> 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); // bIter = b.iterator();
while (bIter.hasNext())
{
bIter.next(); // 跳过一个元素
if (bIter.hasNext())
{
bIter.next(); //跳过下一个元素
bIter.remove(); // 删除那个元素
}
} System.out.println(b); //批量操作:从a中删除b中的所有元素 a.removeAll(b); System.out.println(a);
}
}
运行结果如下:
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();
while (li.hasNext())
System.out.println(li.next());
if (l.indexOf("Hello") < )
System.err.println("Lookup does not work");
else
System.err.println("Lookup works");
}
}
实验2:导入第10章示例程序,测试程序并进行代码注释。
测试程序1:
package 实验十; import javax.swing.*;
public class SimpleFrameTest
{
public static void main(String[] args)
{
JFrame frame = new JFrame();
frame.setBounds(, ,, );//给出组件的位置及大小
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);////定义一个用户关闭框架时的响应动作
frame.setVisible(true); //该组件是可见的
}
}
2.
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(() ->
{
SimpleFrame frame = new SimpleFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//定义一个用户关闭框架时的响应动作
frame.setVisible(true);//frame这个对象是可见的,即这个框架是可见的
});
}
} class SimpleFrame extends JFrame
{
private static final int DEFAULT_WIDTH = ;
private static final int DEFAULT_HEIGHT = ; public SimpleFrame()
{
setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);//给定这个组件的宽度和高度,设置其大小
}
}
运行结果如下:
测试程序2:
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(() ->
{
JFrame frame = new SizedFrame();
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(); //调用getScreenSize方法,并以Dimension对象的形式返回屏幕的大小
int screenHeight = screenSize.height;
int screenWidth = screenSize.width; // 设置框架宽度、高度并让平台拾取屏幕位置 setSize(screenWidth / , screenHeight / );
setLocationByPlatform(true); // 设置框架的图标 Image img = new ImageIcon("icon.gif").getImage();
setIconImage(img);
}
}
运行结果如下:
测试程序3:
package notHelloWorld; import javax.swing.*;
import java.awt.*; public class NotHelloWorld
{
public static void main(String[] args)
{
EventQueue.invokeLater(() ->
{
JFrame frame = new NotHelloWorldFrame();
frame.setTitle("NotHelloWorld");//给出组件标题
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);//这个组件是可见的
});
}
} class NotHelloWorldFrame extends JFrame
{ private static final long serialVersionUID = -6750546436103958866L; public NotHelloWorldFrame()
{
add(new NotHelloWorldComponent());
pack();//调用pick()方法,使得在框架中填入组件时只使用它们的首选大小
}
} class NotHelloWorldComponent extends JComponent
{
public static final int MESSAGE_X = ;
public static final int MESSAGE_Y = ; private static final int DEFAULT_WIDTH = ;
private static final int DEFAULT_HEIGHT = ; public void paintComponent(Graphics g)
{
g.drawString("Not a Hello, World program", MESSAGE_X, MESSAGE_Y);//在坐标(75,100)位置显示"Not a Hello, World program"这个字符串
} public Dimension getPreferredSize()
{
return new Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT); //返回一个有首选宽度和高度的Dimension对象
}
}
运行结果如下:
实验总结: 在集合中学到了集合类,主要有Vector类,Stack类和Hashtable类。Vector类类似于数组,但其长度是可变的。Stack类描述了堆栈的数据结构,即FILO。Hashtable类通过键来查找元素,用散列码来确定键。集合中的基本接口中,collection是层次中的根接口,Set不能包含重复的元素,而list 是一个有序集合,主要有两个类的实现,ArrayList 和 LinkList类。 String类是新一代的图形界面工具,位于javax.swing包中。顶层窗口称为框架。由component类的子类或间接子类的对象称为一个组件,还有容器的概念。框架属性和框架定位的一些基本方法。因为都是一些验证性的实验,再加上看书,所以就理解的还可以。
201871010135 张玉晶《面向对象程序设计(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 ...
随机推荐
- jQ的select事件和trigger方法的小冲突
方法和事件都不难理解,分开用也都没问题,但是一起用就有些小问题出现. 直接上结论:使用trigger方法触发一个文本类型的 input 元素的select事件时,chrome浏览器会错误的触发三次,f ...
- Loj #2568. 「APIO2016」烟花表演
Loj #2568. 「APIO2016」烟花表演 题目描述 烟花表演是最引人注目的节日活动之一.在表演中,所有的烟花必须同时爆炸.为了确保安全,烟花被安置在远离开关的位置上,通过一些导火索与开关相连 ...
- spring context:component-scan
<context:component-scan base-package="com.zhuguang.jack" <!-- 扫描的基本包路径 --> annota ...
- SpringDataSolr入门
1 Spring Data Solr简介 虽然支持任何编程语言的能力具有很大的市场价值,你可能感兴趣的问题是:我如何将Solr的应用集成到Spring中?可以,Spring Data Solr就是为了 ...
- spring的一些概念及优点
Spring是一个轻量级的DI和AOP容器框架.说它轻量级有一大部分原因是相对于EJB的(虽然本人从来没有接触过EJB的应用),但重要的是Spring是非侵入式的,基于Spring开发应用一般不依赖于 ...
- 【UOJ#390】【UNR#3】百鸽笼(动态规划,容斥)
[UOJ#390][UNR#3]百鸽笼(动态规划,容斥) 题面 UOJ 题解 发现这就是题解里说的:"火山喷发概率问题"(大雾 考虑如果是暴力的话,你需要记录下当前每一个位置的鸽笼 ...
- virsh 查看信息
获取域网络接口信息 virsh domiflist debian8 获取vcpu信息 virsh vcpuinfo debian8 设定内存最大内存 virsh setmaxmem debian8 9 ...
- Asp.netCore 3.0 Web 实现Oauth2.0微信授权登陆的测试
1:Oauth2.0授权的流程截图 官方流程如下: 1 第一步:用户同意授权,获取code 2 第二步:通过code换取网页授权access_token 3 第三步:刷新access_token(如果 ...
- 将Windows网络适配器共享网络的ip:192.168.137.1 改为其他IP
修改注册表 方法1 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\SharedAccess\Parameters 中的: ScopeAddr ...
- 一款好用的SSH工具“FinalShell”
FinalShell是一体化的的服务器,网络管理软件,不仅是ssh客户端,还是功能强大的开发,运维工具,充分满足开发,运维需求. 特色功能:免费海外服务器远程桌面加速,ssh加速,双边tcp加速,内网 ...