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),并且结合老师讲解及自学了解了图形用户界面基本组件窗口、按钮、文本框、选择框、滚动条等的,收获良多,以后我会继续努力。
201871010109-胡欢欢《面向对象程序设计(java)》第十二周学习总结的更多相关文章
- 20155322 2016-2017-2 《Java面向对象程序设计》第十二周课堂练习之Arrays和String单元测试
20155322 2016-2017-2 <Java面向对象程序设计>第十二周课堂练习之Arrays和String单元测试 练习目地 在IDEA中以TDD的方式对String类和Array ...
- 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 ...
- 201571030332 扎西平措 《面向对象程序设计Java》第八周学习总结
<面向对象程序设计Java>第八周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https: ...
- 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 ...
随机推荐
- 201271050130-滕江南-《面向对象程序设计(java)》第十三周学习总结
201271050130-滕江南-<面向对象程序设计(java)>第十三周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daiz ...
- C++ class内的=重载,拷贝赋值函数copy op=,重载示例。必须是class内
#include <iostream> // overloading "operator = " inside class // = 是一元操作符.不写,编译器会提供 ...
- H5开发 连接蓝牙打印机 打印标签(斑马ZR628)
1.连接蓝牙打印机(先用手机自带蓝牙进行配对),然后绑定出已配对的蓝牙设备(用来选择/切换打印机之用),代码如下 已配对蓝牙设备,中显示的就是已连接的,点击一下即可 代码: <!DOCTYPE ...
- Python爬取糗事百科示例代码
参考链接:http://python.jobbole.com/81351/#comment-93968 主要参考自伯乐在线的内容,但是该链接博客下的源码部分的正则表达式部分应该是有问题,试了好几次,没 ...
- Vue 学习记录(一)-创建项目
环境准备 node.js vue-cli 安装配置环境 1.下载node.js,使用默认配置安装 . 2.使用npm命令安装国内下载镜像(可选) cmd: npm install -g cnpm ...
- MySQL存储过程-2019/7/18
MySQL 5.0 版本开始支持存储过程. 存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象. 存储过程是为了完成特定功能的SQL语句集,经编 ...
- HTML连载24-属性选择器(下)
一.格式 标签[属性=值]:{属性:值:} 1.属性的取值是以什么开头的 attribute |= value(CSS2) attribute^=value(CSS3) 两者之间的区别:CSS2中只能 ...
- 使用k8s-prometheus-adapter实现HPA
环境: kubernetes 1.11+/openshift3.11 自定义metric HPA原理: 首选需要注册一个apiservice(custom metrics API). 当HPA请求me ...
- jwt入门
JWT(JSON Web Token)是一个非常轻巧的规范,这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息,通常使用在HTTP通信过程中进行身份认证. 我们知道,HTTP通信是无状态的 ...
- Prometheus K8S中部署Alertmanager
Prometheus K8S中部署Alertmanager 设置告警和通知的主要步骤如下:一.部署Alertmanager二.配置Prometheus与Alertmanager通信三.配置告警 1. ...