201871010109-胡欢欢《面向对象程序设计(java)》第十二周学习总结
201871010109-胡欢欢《面向对象程序设计(java)》第十二周学习总结
内容 |
|
这个作业属于哪个课程 |
https://www.cnblogs.com/nwnu-daizh/ |
这个作业的要求在哪里 |
|
作业学习目标 |
(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 }
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),并且结合老师讲解及自学了解了图形用户界面基本组件窗口、按钮、文本框、选择框、滚动条等的,收获良多,以后我会继续努力。