Updated 2014/03/27 P402-P454

Updated 2014/04/03 P454-

世界三大首席管理器: border, flow, box

borderLayout: 五个区(东、西、北、南、中央)

FlowLayout:水平顺序排列,放不下换行

BoxLayout:按某个轴垂直排列

1.可以调用setLayout来改变面板的布局管理器,setLayout(null)直接定位画面位置和大小,但使用布局管理器还是比较好的方式

2.BorderLayout布局可以让你把组件加到五个区域上。你必须以下列语法来指定区域:

add(BorderLayout.EAST,panel);

3.BorderLayout布局上的南北区域使用组件的理想高度而不管宽度,东西区域刚好相反,中间区域只能使用剩下的空间

4.pack()方法会使window的大小符合内含组件的大小

5.FlowLayout布局会由左至右、由上至下依次加入的顺序来安置组件,若宽度超过时就会换行。FlowLayout布局会让组件在长宽上都使用理想的尺寸大小。

6.BoxLayout布局让你可以垂直地排列组件,如同FlowLayout布局一样,它会让组件在长宽上都使用理想的尺寸大小。

7.框架默认时使用BoxLayout布局,面板默认使用FlowLayout布局。

如何储存对象状态---通过序列化

一.如果只有自己写的Java程序会用到这些数据:

a)         用序列化(serialization)。将被序列化的对象写到文件中。然后就可以让你的程序去文件中读取序列化的对象并把它们展开回到活生生的状态

二.如果数据需要被其他程序引用:

a)         写一个纯文本文件。用其他程序可以解析的特殊字符写到文件中。例如写成用tab字符来分隔的档案以便让电子表格或数据库应用程序能够应用。

一般来说,串流要两两连接才能作出有意义的事情----其中一个表示连接,另一个则是要表示调用方法的。为何要两个?因为连接的串流通常都是很低层的。以FileOutputStream为例,它有可以写入字节的方法。但我们通常不会直接写字节,而是以对象层次的观点来写入,所以需要高层的连接串流。

那又为何不以单一的串流来执行呢?这就要考虑到良好的面向对象设计了。每个类只要做好一件事。FileOutputStream把字节写入文件。ObjectOutputStream把对象转换成可以写入串流的数据。当我们调用ObjectOutputStream的writeObject时,对象会被打成串流送到FileOutputStream来写入文件。

创建出FileOutputStream链接到ObjectOutputStream以让它写入对象

FileOutputStream fs = new FileOutputStream(“foo.ser”);

ObjectOutputStream os = new ObjectOutputStream(fs);

os.writeObject(myFoo);

os.close();

如果要让类能够被序列化,就实现Serializable

如果类中的某实例变量不能或不应该被序列化,就把它标记为transient(瞬时)的。

解序列化(Deserialization):还原对象

FileInputStream fs = new FileInputStream(“MyGame.ser”);

ObjectInputStream os = new ObjectInputStream(fs);

Object one = os.readObject();

GameCharacter elf = (GameCharacter) one;

os.close();

解序列化步骤:

  1. 对象从stream中读出来。
  2. Java虚拟机通过存储信息判断出对象的class类型
  3. Java虚拟机尝试寻找和加载对象的类。
  4. 新的对象会被配置在堆上,但构造函数不会执行!
  5. 如果对象在继承树上有个不刻序列化的祖先类,则该不刻序列化类以及在它之上的类的构造函数(就算是可序列化也一样)都会被执行。
  6. 对象的实例变量会被还原成序列化时点的状态值。Transient变量会被赋值null的对象引用或primitive主数据类型的默认为0、false等值。

对象必须实现序列化这个接口才能被序列化。如果父类实现序列化,则子类也就自动地有实现,而不管是否有明确的声明。

静态变量不会被序列化,因为所有对象都是共享同一份静态变量值。

写序列化的对象

ObjectOutputStream.writeObject(someObject);

写字符串

fileWriter.write(“My first String to save”);

BufferedWriter writer = new BufferedWriter(new FileWriter(aFile));

缓冲区能让你暂时摆一堆东西一直到满为止。用了缓冲区就可以省下好几趟的来回。

强制缓冲区立即写入: writer.flush();

  1. 用FileWriter这个连接串流来写入文本文件,用FileReader来读取文本文件。
  2. 将FileWriter/FileReader链接到BufferedWriter/BufferedReader可以提升效率。
  3. File对象代表文件的路径而不是文件本身。
  4. 可以用File对象来创建、浏览和删除目录。
  5. 用到String文件名的串流大部分可以用File对象来代替String。
  6. 通常我们会使用特殊的字符来分隔文本数据中的不同元素,使用split()方法可以把String拆开,其中的分隔字符不会被当做数据来看待。

Socket是个代表两台机器之间网络连接的对象。

Socket连接的建立代表两台机器之间存有对方的信息,包括网络地址和TCP的端口号。

TCP端口只是一个16位宽,用来识别服务器上特定程序的数字。E.g.   HTTP(80)

聊天程序

使用BufferedReader从Socket上读取数据

  1. 建立对服务器的Socket连接

Socket chatSocket = new Socket(“127.0.0.1”,5000);

  2.建立连接到Socket上低层输入串流的InputStreamReader

InputStreamReader stream = new InputStreamReader(chatSocket.getInputStream());

  3.建立BufferedReader来读取

BufferedReader reader = new BufferedReader(stream);

String message = reader.readLine();

使用PrintWriter写数据到Socket上;PrintWriter是字符数据和字节间的转换桥梁,可以衔接String和Socket两端

  1. 对服务器建立Socket连接

Socket chatSocket = new Socket(“127.0.0.1”,5000);

  2.建立连接到Socket的PrintWriter

PrintWriter writer = new PrintWriter(chatSocket.getOutputStream());

  3.写数据

writer.println(“message to send”);

writer.print(“another message”);

服务器可以使用ServerSocket来等待用户对特定端口的请求。当ServerSocket接到请求时,它会做一个Socket连接来接受客户端的请求。

《head first java 》读书笔记(二)的更多相关文章

  1. 《CSS世界》笔记二:盒模型四大家族

    上一篇:<CSS世界>笔记一:流/元素/尺寸下一篇:<CSS世界>笔记三:内联元素与对齐 写在前面 在读<CSS世界>第四章之前,粗浅的认为盒模型无非是margin ...

  2. CSS揭秘读书笔记 (一)

    CSS揭秘读书笔记      (一) 一.半透明边框 要想实现半透明边框可以使用border: border: 10px  solid  hsla(0,0%,100%,.5); background: ...

  3. 《你必须知道的.NET》读书笔记二:小OO有大原则

    此篇已收录至<你必须知道的.Net>读书笔记目录贴,点击访问该目录可以获取更多内容. 一.单一职责原则 (1)核心思想:一个类最好只做一件事,只有一个引起它变化的原因 (2)常用模式:Fa ...

  4. spring揭秘 读书笔记 二 BeanFactory的对象注册与依赖绑定

    本文是王福强所著<<spring揭秘>>一书的读书笔记 我们前面就说过,Spring的IoC容器时一个IoC Service Provider,而且IoC Service Pr ...

  5. ES6读书笔记(二)

    前言 前段时间整理了ES6的读书笔记:<ES6读书笔记(一)>,现在为第二篇,本篇内容包括: 一.数组扩展 二.对象扩展 三.函数扩展 四.Set和Map数据结构 五.Reflect 本文 ...

  6. 《精通CSS》读书笔记(一)

    最近新添16本书,目前开始看陈剑瓯翻译的<精通CSS——高级Web标准解决方案>(Andy Budd, CSS Mastery -- Advanced Web Standards Solu ...

  7. spring揭秘 读书笔记 二 BeanFactory的对象注冊与依赖绑定

    本文是王福强所著<<spring揭秘>>一书的读书笔记 我们前面就说过,Spring的IoC容器时一个IoC Service Provider,并且IoC Service Pr ...

  8. 【记】《.net之美》之读书笔记(二) C#中的泛型

    前言 上一篇读书笔记,很多小伙伴说这本书很不错,所以趁着国庆假期,继续我的读书之旅,来跟随书中作者一起温习并掌握第二章的内容吧. 一.理解泛型 1.为什么要使用泛型?-----通过使用泛型,可以极大地 ...

  9. Mastering Web Application Development with AngularJS 读书笔记(二)

    第一章笔记 (二) 一.scopes的层级和事件系统(the eventing system) 在层级中管理的scopes可以被用做事件总线.AngularJS 允许我们去传播已经命名的事件用一种有效 ...

  10. how tomcat works 读书笔记(二)----------一个简单的servlet容器

    app1 (建议读者在看本章之前,先看how tomcat works 读书笔记(一)----------一个简单的web服务器 http://blog.csdn.net/dlf123321/arti ...

随机推荐

  1. WCF之事务

    2阶段提交协议. 事务先提交给协调者,由协调者分发给各个RM,在一段规定的时间后.由RM询问各个RM是否提交还是终止操作.RM根据自己的状态来决定提交/终止.协调者根据RM的结果,决定操作的提交/终止 ...

  2. JS获取非行间样式及兼容问题

    获取非行间样式: <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  3. 6款基于SVG的HTML5CSS3应用和动画

    1.CSS3/SVG质感背景小图标 镂空效果图标按钮 今天我们来分享一款用CSS3和SVG实现的质感背景小图标,鼠标滑过图标时出现镂空的效果,并且有质感背景的描边,效果非常不错. 在线演示 源码下载 ...

  4. C++中extern “C”含义深层探索

    C++中extern “C”含义深层探索 extern “C” 是一个双向都需要用到的语法表示,就是说在cpp引用c头文件,或者c引用cpp文件时都需要用到.但extern “C” 永远只能在cpp引 ...

  5. 简单工厂(Simple Pattern)模式

    一.简单工厂(Simple Factory)模式 Simple Factory 模式根据提供给它的数据,返回几个可能类中的一个类的实例.通常它返回的类都有一个公共的父类和公共的方法. Simple F ...

  6. zynq 之u-boot

    u-boot 启动文件分析 u-boot首先执行的文件:C:\Users\summer_spinach\Desktop\zynq_linux相关\linux\uboot内核\u-boot-xarm\a ...

  7. Eclipse 运行多个Tomcat实例

             

  8. php读取html并截取字符串

    一般php采集代码能用的到,这里只是简单的实现代码. <?php $title='脚本学堂'; $hello='jbxue.com!'; $file=file_get_contents('htt ...

  9. 笔记 php.ini配置文件中magic_quotes_gpc, magic_quotes_runtime的作用是什么?应该开启还是关闭?

    默认情况下,PHP 指令 magic_quotes_gpc 为 on,对所有的 GET.POST 和 COOKIE 数据自动运行 addslashes().不要对已经被 magic_quotes_gp ...

  10. php strpos 用法实例教程

    定义和用法该strpos ( )函数返回的立场,首次出现了一系列内部其他字串. 如果字符串是没有发现,此功能返回FALSE . 语法 strpos(string,find,start) Paramet ...