黑马程序员-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中的加号可以讲各种不同类型的对象连接起来。

那么StringBufferappend方法也有此功能:

比如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各元素对象之间有指定的顺序,也就是列出。然后CollectionList允许重复元素和多个null元素的存在。

Set什么都不是,没有顺序,不允许重复元素,最多允许一个null元素的存在。

ArrayList实际上就是实现了List.

注意,像这些集合类,它的方法里面都有比如说增加一个对象进入集合类中,就是add()方法,但是这个方法里面只能是对象,所以必须使用基本数据类型的封转类。


注意Collections中的sort()方法可以对ListArrayList中的元素进行排序。

3.与日期相关的类:

Date,DateFormat,Calendar.

Calendar的出现就是为了弥补DateDateFormat的缺陷。

由于Date没有实现国际化,所以就出现了Calendar.

我们主要学习了Calendar这个类,这类它是一个抽象的类,可以通过getInstance()静态方法来得到它的一个子类。

Calendar可以在目前日期的基础上加上若干个时间来得到一个新的日期。

它可以通过set()方法来设置年小时等,也可以通过get()方法得到年月日周天小时,分秒。

我们昨天学习了一个例子就是得到距离当前时间315天后的日期,然后年月日小时分秒的格式输出。

DateFormat也是一个抽象类,SimpleDateFormat是它的子类。

File类不是获取文件的内容,而好似获取文件的信息。

RandAcessFile这个类是java中功能最为全面的文件访问类。

它是支持随机访问的,可以跳转到文件的任意位置开始读取数据。

这个还好,但是有一点,就是它是java中功能最为全面的文件访问类。

注意新建RandomAccessFile是这样新建的RandomAccessFile as=new RandomAccessFile("Employee.txt",rw);

里面要加上一个文件名和一个读写方式,只读的还是读写的。

4.一个整数占用两个字节,一个中文也占用两个字节。

流大致可以分为节点流和过滤流。

InputStreamOutputStream都是抽象类。

Int read()。注意是保存为整数类型。

注意InputStream中的方法一般都是int类型的,而OutputStream中的方法一般都是void 型的。

Filejava中唯一一个只读取文件信息不读取文件内容的类。

RandomAccessFile类是java中功能最全面的文件访问类。

OutputStream有一个flush(0方法。

5.妈的,复习了1一小时,过长了。

好的,现在开始来学习新知识:

InputStreamOutputStream都是抽象类。

我们接下来来学习FileInputStreamFileOutputStream.

FileInputStreamFileOutputStream类分别用来创建磁盘文件的输入流和输出流,是磁盘文件的。通过它们的构造函数来指定文件的路径和文件名。

创建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));//打印出数组中从0len的数据

fi.close();

}

}

7.编译一下,出现各种异常,我们来捕获一下:

public static void main(String[] args)throws Exception

但是实际开发中不要这样,这是偷懒。

文件也创建出来了。

8.我们接着来看WriterReader类:

我们刚刚上面的例子,像文件中写入字符串要进行转换,读取字符串也要进行转换,使用ReaderWriter类就不需要这样。这两个类是所有字符流类的抽象基类,用于简化对字符串的输入输出编程,即可用于读写文本数据

我们来进行一个编程实例:

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个。

我们前面说过,流大体可以分为节点流和过滤流。

我们就来学习过滤流和包装类。

包装类的概念:

我们以前通过FileInputStreamFileOutputStream可以读取数据或者将数据写入到文件,但是都要转换成字节类型。比如我们想通过FileOutputStream将一个浮点类型小数写入到文件中,你感觉有点困难吧,先要将浮点数转换成字节型。

我们前面学习了如果通过writer简单地写入字符类型的数据。

DataOutputStream类提供了往各种输出流对象中写入各种数据的方法(当然包括浮点小数),我们所需要做的就是传递一个FileOutputStream输出流对象给DataOutputStream实例对象和调用DataOutputStream实例对象用于写入浮点小数的方法。

DataOutputStream有向输出流写入各种类型的数据的方法。

因为DataOutputStream并没有具体的连接到某一个流设备,所以我们需要给它传递一个流设备。

完成了一个类似DataOutputStream的类就是一个包装类。也叫做过滤流类。

包装类之间可以进行互相包装。

12.DataOutputStream的各种方法:

有写入Booleanshort,char,int ,long,float,double,bytes类型数据的方法。

再来看看BufferedInputStreamBufferedOutputStream类:

缓冲流为IO增加了内存缓冲区。

增加缓冲区有两个基本的目的:

*允许java不只一次地操作一个字节,这样提高了程序的性能。

*由于有了缓冲区,使得在流上执行skip,markreset方法都称为了可能。

缓冲流也需要传入流参数。

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>、期待与您交流! ----------------------


原创粉丝点击