黑马程序员-java学习5
来源:互联网 发布:日语语法书推荐 知乎 编辑:程序博客网 时间:2024/05/19 23:23
---------------------- <a href="http://edu.csdn.net/heima" target="blank">android培训</a>、<a href="http://edu.csdn.net/heima" target="blank">java培训</a>、期待与您交流! ----------------------
1.我们先来复习一下上次的知识要点:
我们学过String中的加号可以讲各种不同类型的对象连接起来。
那么StringBuffer的append方法也有此功能:
比如String x=new StringBufffer().append("a").append(4).append("c").toString();
为什么最后要加上一个toString呢,因为它最后要转成String类型。
集合类Vector,它是如何新建起来的呢?Vector v=new Vector();
它适合什么情况呢?适合于不知道要存放多少个元素,也就是说不知道要存放的元素的数目时,最好的选择就是它。
从键盘上读取数据:System.in.read(),但是它每次只能读取一个数据,并且保存为int类型。
2.我们来看一下Collection,Set,List这三个集合类之间的区别:
首先可以明确指出,只有List各元素对象之间有指定的顺序,也就是列出。然后Collection和List允许重复元素和多个null元素的存在。
而Set什么都不是,没有顺序,不允许重复元素,最多允许一个null元素的存在。
ArrayList实际上就是实现了List.
注意,像这些集合类,它的方法里面都有比如说增加一个对象进入集合类中,就是add()方法,但是这个方法里面只能是对象,所以必须使用基本数据类型的封转类。
注意Collections中的sort()方法可以对List和ArrayList中的元素进行排序。
3.与日期相关的类:
Date,DateFormat,Calendar.
Calendar的出现就是为了弥补Date和DateFormat的缺陷。
由于Date没有实现国际化,所以就出现了Calendar.
我们主要学习了Calendar这个类,这类它是一个抽象的类,可以通过getInstance()静态方法来得到它的一个子类。
Calendar可以在目前日期的基础上加上若干个时间来得到一个新的日期。
它可以通过set()方法来设置年小时等,也可以通过get()方法得到年月日周天小时,分秒。
我们昨天学习了一个例子就是得到距离当前时间315天后的日期,然后年月日小时分秒的格式输出。
DateFormat也是一个抽象类,SimpleDateFormat是它的子类。
File类不是获取文件的内容,而好似获取文件的信息。
RandAcessFile这个类是java中功能最为全面的文件访问类。
它是支持随机访问的,可以跳转到文件的任意位置开始读取数据。
这个还好,但是有一点,就是它是java中功能最为全面的文件访问类。
注意新建RandomAccessFile是这样新建的RandomAccessFile as=new RandomAccessFile("Employee.txt",rw);
里面要加上一个文件名和一个读写方式,只读的还是读写的。
4.一个整数占用两个字节,一个中文也占用两个字节。
流大致可以分为节点流和过滤流。
InputStream和OutputStream都是抽象类。
Int read()。注意是保存为整数类型。
注意InputStream中的方法一般都是int类型的,而OutputStream中的方法一般都是void 型的。
File是java中唯一一个只读取文件信息不读取文件内容的类。
RandomAccessFile类是java中功能最全面的文件访问类。
OutputStream有一个flush(0方法。
5.妈的,复习了1一小时,过长了。
好的,现在开始来学习新知识:
InputStream和OutputStream都是抽象类。
我们接下来来学习FileInputStream和FileOutputStream.
FileInputStream和FileOutputStream类分别用来创建磁盘文件的输入流和输出流,是磁盘文件的。通过它们的构造函数来指定文件的路径和文件名。
创建FileInputStream实例对象的时候,指定的文件应当是存在和可读的。创建FileOutputStream实例对象的时候,如果指定的文件已经存在,这个文件中的原来的内容将会被覆盖清除,因为它本来就是写入数据的。
创建FileInputStream:
有两种方式:
FileInputStream in=new FileInputStream("hello.test");//里面是文件的路径
还有一种方式是:
File f=new File("hello.test");//里面是文件的路径
FileInputStream in=new FileInputStream(f);
第一种方式很显然是简单的,但是为什么要第二种方式呢,因为它先指定一个File,可以读取文件的信息。
然后再进行关联操作。
磁盘文件输出流和这个是一样的。
6.创建FileOutputStream对象的时候,可以指定一个不存在的文件名,就相当于会创建这个文件,然后将数据写入到里面。不能指定一个被其他程序正在打开的文件。
比如我们要将A文件中的内容写入到B文件中,我们可以对A用输入流读取里面的内容,然后用输出流将文件内容写入到B中。
我们来编写一个程序,用FileOutputStream向文件中写入一个字符串,然后用FileInputStream向文件读取这个字符串。
import java.io.*;
public class Stream{
public static void main(String[] args){
//先新建一个文件输出流写入数据,文件可以不存在
FileOutputStream os=new FileOutputStream("hello.txt");
os.write("我是况众文".getBytes());//然后我们一串字符串写入到里面的,但是不能直接写入,调用getBytes()方法将其转为数组类型
os.close();
File f=new File("hello.txt");
FileInputStream fi=new FileInputStream(f);
//定义一个数组保存读取到的数据
byte[] buf=new byte[1024];
int len=fi.read(buf);//注意,它保存为的是整数类型,我们定义它读取到的字节长度,后面有用
System.out.println(new String(buf,0,len));//打印出数组中从0到len的数据
fi.close();
}
}
7.编译一下,出现各种异常,我们来捕获一下:
public static void main(String[] args)throws Exception
但是实际开发中不要这样,这是偷懒。
文件也创建出来了。
8.我们接着来看Writer和Reader类:
我们刚刚上面的例子,像文件中写入字符串要进行转换,读取字符串也要进行转换,使用Reader和Writer类就不需要这样。这两个类是所有字符流类的抽象基类,用于简化对字符串的输入输出编程,即可用于读写文本数据。
我们来进行一个编程实例:
用FileWriter类向文件写入一个字符串,然后用FileReader类读出写入的内容。
注意byte是字节,而char是字符。
使用reader保存在的是一个char字符数组。
import java.io.*;
public class Stream{
public static void main(String[] args)throws Exception{
FileWriter fw=new FileWriter("kzw.txt");
fw.write("我是况众文,我的女朋友是潘丹心");//你看这里不需要进行转换,直接就可以写入字符
fw.close();
FileReader fr=new FileReader("kzw.txt");
//注意它保存在字符数组中,而不是字节数组
char[] buf=new char[1024];
int len=fr.read(buf);
System.out.println(new String(buf,0,len));
fr.close();
}
}
注意,一定不要忘了关闭输入输出流。
9.像管道流这个用的比较少,所以不需要学习。
我们接下来学习字符编码。
随着数字通信和电子商务的发展,程序之间通常需要交换文本格式的文档,一个应用程序要理解另一个文档的内容,必须要理解它的字符编码。我们这一章主要讲的是IO流,我们在读取文档数据的时候,难免会涉及到字符编码的问题。
我们要知道,计算机里面只有数字,计算机软件里面的一切都是用数字来表示的,屏幕上显示的一个个字符也不例外。
一个中文字符用两个字节来表示,一个数字也是两个字节,
Unicode编码就是一个全球通用的编码。ISO将全世界的符号进行了统一编码,称之为unicode编码。
如果所有的计算机使用到都是Unicode编码,在中国大陆本地化系统中显示的是"中"这个字符,那么发送到伊拉克的本地化系统中,显示的仍然是"中"这个字符。
Unicode编码的字符都占用两个字节的大小。
10.UTF-8编码:
我想说的是,关于编码的暂时还用不到,所以先跳跃,虽然说现在不能跳,但是我是查漏补缺,学习重点难点,毕竟时间有限。
11.我的神, 字符编码的视频多达5个。
我们前面说过,流大体可以分为节点流和过滤流。
我们就来学习过滤流和包装类。
包装类的概念:
我们以前通过FileInputStream和FileOutputStream可以读取数据或者将数据写入到文件,但是都要转换成字节类型。比如我们想通过FileOutputStream将一个浮点类型小数写入到文件中,你感觉有点困难吧,先要将浮点数转换成字节型。
我们前面学习了如果通过writer简单地写入字符类型的数据。
DataOutputStream类提供了往各种输出流对象中写入各种数据的方法(当然包括浮点小数),我们所需要做的就是传递一个FileOutputStream输出流对象给DataOutputStream实例对象和调用DataOutputStream实例对象用于写入浮点小数的方法。
DataOutputStream有向输出流写入各种类型的数据的方法。
因为DataOutputStream并没有具体的连接到某一个流设备,所以我们需要给它传递一个流设备。
完成了一个类似DataOutputStream的类就是一个包装类。也叫做过滤流类。
包装类之间可以进行互相包装。
12.DataOutputStream的各种方法:
有写入Boolean,short,char,int ,long,float,double,bytes类型数据的方法。
再来看看BufferedInputStream和BufferedOutputStream类:
缓冲流为IO增加了内存缓冲区。
增加缓冲区有两个基本的目的:
*允许java不只一次地操作一个字节,这样提高了程序的性能。
*由于有了缓冲区,使得在流上执行skip,mark和reset方法都称为了可能。
缓冲流也需要传入流参数。
13.况众文,你可以不用学了,你说流这章你又学了多少知识点,我的神。太疯狂了!不过大体上开发要用的知识都掌握了。而且今天心情莫名的烦躁,学不下去,没有精神,不过不管怎样,还是要强忍地学下去。坚持!
我们现在开始java应用程序的第八讲——GUI图形用户界面。
这个很重要,以后设置界面,都要使用它,就相当于android中的主界面。
好好学,学重点,认真点。
AWT的基础知识:
GUI是图形用户界面。
几乎所有的程序都是使用了GUI功能,这是用户对于程序的操作变得非常简单。
在JDK中,有两个包是用于GUI的开发和设计的,一个是AWT包,一个是Swing包。
掌握了AWT也就基本上掌握了Swing。
14.我们来做一个实例感受一下:
打开JCreator.
import java.awt.*;
public class TestFrame{
public static void main(String[] args){
Frame f=new Frame("kuangzhongwen");//里面的文字用于显示窗口上的文字
f.setVisible(true);//不要忘记将其显示出来
}
}
运行一下:
有没有看到,程序运行起来是这么一个小窗口。
并且点击关闭,这个窗口关闭不了。
import java.awt.*;
public class TestFrame{
public static void main(String[] args){
Frame f=new Frame("kuangzhongwen");
f.setSize(300,300);
f.setVisible(true);
}
}
但是还是关闭不了。
15.我们还可以在里面增加一个按钮:
import java.awt.*;
public class TestFrame{
public static void main(String[] args){
Frame f=new Frame("kuangzhongwen");
//我们还可以增加一个按钮
Button b=new Button("ok");
f.add(b);
f.setSize(300,300);
f.setVisible(true);
}
}
来看看效果:
16.GUI组件大致可以分为两大类:
基本组件和容器。
基本组件不能容纳其他组件,比如一个按钮上不能容纳其他组件,但是容器可以,它就是这个功能,比如刚刚这个对话框。
我们现在来修改上面的程序,让框架窗口显示5秒钟后就自动关闭。然后我们再来看AWT线程的状况。
import java.awt.*;
public class TestFrame{
public static void main(String[] args){
Frame f=new Frame("kuangzhongwen");
//我们还可以增加一个按钮
Button b=new Button("ok");
f.add(b);
f.setSize(300,300);
f.setVisible(true);
try{
Thread.sleep(5000);
}catch(Exception ex){
}
f.dispose();//将窗口释放掉
}
}
窗口显示出来了,然后5秒钟后消失了。
17.我们来讲解一下AWT的事件处理:
GUI只是用户操作界面,它不对用户操作的数据负责。比如我们单击这个按钮,界面并不知道怎么办,我们想要它实现功能,就必须为其编写代码。就比如上面例子的一个明显的问题就是窗口关闭不了。
事件处理机制:是用来处理程序与用户之间的交互。不是用户与GUI界面的交互。
在事件处理机制中药了解三个重要的概念:
事件:用户对GUI组件的一个操作就被称为事件
事件源:发生事件的组件就是事件源
事件处理器:某个java类中负责处理事件的具体方法。
事件的分类:
几个典型的——
MouseEvent
WindowEvent
ActionEvent:对应的不是一个具体的动作,比如按下按钮,还有回车后文本输入都可以触发这个action事件。
18.好的,继续学习,从18:58开始:
事件监听器。
一个事件监听器对象负责处理一类事件。
一类事件的每一种发生情况,分别由事件监听器中的一个方法来具体处理。
事件监听器就是实现了特定的接口,比如MouseListener
我们来进行一个实例编程,关闭窗口。
注意,接口实现类里卖弄的方法是不能删除的,为什么呢,因为接口是抽象的,里面的方法都是抽象的,如果不全部重写里里面的方法的话,那么这个类就不能实例化。
所以里面的方法不能删除任何一个。
我们要处理关闭的时间,那么就是WindowListener这个事件监听器中的closing方法来具体处理。
注意,里面有两个方法我们要区分一下:
一个windowClosing,这个是表示窗口正要关闭。
一个是windowClosed,这个是指窗口已经关闭了。
我们新建一个类:
package java.io;
import java.awt.event.WindowListener;
import java.awt.event.WindowEvent;
public class MyWindowListener implements WindowListener {
public void windowActivated(WindowEvent arg0) {
}
public void windowClosed(WindowEvent arg0) {
}
public void windowClosing(WindowEvent arg0) {
//用这个方法来处理窗口关闭
System.exit(0);
}
public void windowDeactivated(WindowEvent arg0) {
}
public void windowDeiconified(WindowEvent arg0) {
}
public void windowIconified(WindowEvent arg0) {
}
public void windowOpened(WindowEvent arg0) {
}
}
19.我们编写完这个事件监听器之后,我们要将它添加到窗口上,或者组件上。
回到TestFrame.java:
package java.io;
import java.awt.*;
public class TestFrame{
public static void main(String[] args){
Frame f=new Frame("kuangzhongwen");
//我们还可以增加一个按钮
Button b=new Button("ok");
f.add(b);
f.setSize(300,300);
f.setVisible(true);
f.addWindowListener(new MyWindowListener());
}
}
这样我们的窗口就可以关闭了。
20.最后,我们来总结一下:
很简单:
处理发生在某个GUI组件上的xxxEvent事件的某种情况,其事件处理的通用编写流程是:
编写一个实现了xxxListener接口的事件监听器类。
找到里面的特定方法,来编写处理。
添加监听器到组件,addxxxListener(),在里面实例化监听器类。
今天大概又学了5个多小时,包括做习题,项目。学完了GUI的视频02!
---------------------- <a href="http://edu.csdn.net/heima" target="blank">android培训</a>、<a href="http://edu.csdn.net/heima" target="blank">java培训</a>、期待与您交流! ----------------------
- 黑马程序员-java学习5
- 黑马程序员 java基础学习笔记5
- 黑马程序员 -- Java基础学习(5)
- 黑马程序员--java学习总结(5)
- 黑马程序员-java学习4
- 黑马程序员-JAVA基础学习
- 黑马程序员--java高新技术学习
- 黑马程序员----java基础知识学习
- 黑马程序员--JAVA学习笔记
- 黑马程序员 ----java学习日记
- 黑马程序员-Java异常学习
- 黑马程序员---Java 学习笔记
- 黑马程序员 java反射学习
- 黑马程序员-Java反射学习
- 黑马程序员学习5
- 黑马程序员-java学习笔记-java基础
- 黑马程序员--Java学习01--java简介
- 黑马程序员:java学习之一 java概述
- 从服务器上下载excel
- c/c++笔试题(3)
- ubuntu debian 设置locale和时区
- Android 获取系统应用信息
- Oracle Clusterware 工具集(2)——应用层!
- 黑马程序员-java学习5
- 班级排名
- php将汉字转换为拼音和得到词语首字母
- SQLSERVER2005 死锁问题解决
- 黑马程序员--交通灯系统1
- 黑马程序员-交通灯系统2
- 图片平铺 repeat-x repeat-y
- .NET中Attribute
- c#操作DataTable