码迷,mamicode.com
首页 > 其他好文 > 详细

编程专题

时间:2014-06-28 14:57:58      阅读:244      评论:0      收藏:0      [点我收藏+]

标签:java   get   使用   文件   数据   os   

编程专题

1 I/O编程

1.1 java.io

一个方向一个维度

 

两种对称

输入和输出的对称性

   InputStream --- OutputStream

   Reader --- Writer

字节和字符的对称性

   InputStream --- Reader

   OutputStream --- Writer

 

两种设计模式

适配器模式(转换流)和装换模式(处理流)

 

只要输入流一定有read方法读取数据

只要输出流一定有write方法写数据

 

转换流 InputStreamReader (把字节流转换成字符流)

处理流 DataInputStream、BufferedReader -> readLine

 

文件操作 

二进制文件 --- FileInputStream/FileOutputStream 

字符文件 --- FileReader/FileWriter

 

对象的序列化(串行化、腌咸菜)和反序列化

序列化 --- ObjectOutputStream -> writeObject

反序列化 --- ObjectInputStream -> readObject

类必须要实现Serializable(标识接口)

1.2 java.nio

Buffer

Channel

Charset

Selector

1.3 nio.2

Java 7升级的IO

2 容器和泛型

2.1 集合框架

2.1.1 Collection

List

可以用索引来操作元素

 

ArrayList读取效率高

LinkedList增删元素效率高

ArrayList

LinkedList

Set

不允许有重复元素

 

TreeSet会对元素进行排序

需要元素是可比较对象(实现Comparable接口)

 

HashSet会通过元素的哈希码来决定如何存取元素

需要重写hashCode和equals方法

TreeSet

HashSet

Queue

2.1.2 Map

键值对形式的容器,键是唯一的

TreeMap

HashMap

2.1.3 遗留容器

Properties

通常用它来操作键值对形式的配置文件

 

Properties对象的load方法可以从指定的输入流中加载配置文件中的键值对映射

 

配置文件db.properties

driver=com.mysql.jdbc.Driver

url=jdbc:mysql://localhost:3306/demo

uid=root

pwd=123456 

2.2 泛型

2.2.1 泛型方法

例如:

 

public static <T> T foo(T x, T y) { }

2.2.2 泛型类

例如:

 

class MyStack<T> {

private List<T> content = new ArrayList<T>();

 

public void push(T t){  }

 

public T pop() { return null; }

}

2.2.3 泛型接口

例如:

 

public interface BaseDao<E, K> {

 

public boolean save(E entity);

 

public boolean deleteByPK(K pk);

 

public boolean update(E entity);

 

public List<E> findAll();

 

public E findByPK(K pk);

}

3 异常机制

一种在不打乱原有业务»˜的前提下,把程序在Ð行时可能出现的不正常状态处理掉的方式。异常机制是一种低耦合的处理Ð行时状况的手段

异常相关的关键字

throw (Throwable的子类型都可以被抛出)

throws (为方法声明异常)

try (将可能出现异常的代码保护起来)

catch (捕获异常)

finally (总是执行代码,用于释放外部资源)

 

自定义异常

继承Exception或者它的子类型

 

受检异常和运行时异常(非受检异常)

RuntimeException和它的子类型都是非受检异常

 

常见的运行时异常

NullPointerException

ArrayIndexOutOfBoundsException

NumberFormatException

ClassCastException

ArithmeticException

NegativeArraySizeException

IllegalArgumentException

4 网络编程

4.1 基于TCP

4.1.1 服务器

创建服务器

1. 创建服务器套接字ServerSocket并绑定端口(端口是用来区分不同的服务的逻辑地址)

2. 监听客户端的连接,调用ServerSocket对象的accept方法,该方法是阻塞方法,如果没有客户端连接到服务器则保持阻塞;如果监听到客户端连接,则返回Socket对象

3.进行I/O操作。通过Socket对象的getInputStream方法可以得到输入流,调用read方法读取客户端的数据;通过getOutputStream方法可以得到输出流,调用write方法可向客户端发送数据

4. 通信结束后调用Socket对象的close方法关闭客户端套接字

 

通常我们需要创建多线程的服务器,即在监听到客户端连接后通过启动线程的方式来处理客户端的请求并对客户端的请求作出响应,主线程继续监听其他客户端的连接

4.1.2 客户端

创建客户端

1. 创建Socket对象,指定服务器的IP地址和端口号

2. 连接成功后,通过Socket对象的getInputStream和getOutputStream方法得到输入输出流,剩下的事情就是I/O操作

3. 通过Socket对象的close方法关闭套接字

 

I/O操作时可以使用处理流来简化I/O操作

PrintStream 

---> new PrintStream(client.getOutputStream());

DataInputStream

---> new DataInputStream(client.getInputStream());

4.2 基于UDP

不区分服务器和客户端,通信双方都是创建DatagramSocket和DatagramPacket

DatagramPacket代表要收发的数据包,发送方的DatagramPacket对象中需要填写收信人的IP地址、端口号和信息的内容,接收方的DatagramPacket对象是一个空包,里面只需要有足够的缓冲区来接受发送方发送的数据

DatagramSocket提供了send方法用于发送数据包,还提供了receive方法用于接收数据包

4.3 java.net

InetAddress  --- IP地址(寻址)

URL --- 统一资源定位符(资源的位置信息)

URLConnection --- (对网络资源的连接)

5 多线程

5.1 创建线程

通过创建Thread类的对象并调用其start方法可以启动线程

5.1.1 继承Thread类

5.1.2 实现Runnable接口

5.1.3 实现Callable接口

Java 5+

5.2 线程同步

synchronized关键字

用synchronized关键字修饰的方法只有一个线程能够进入

synchronized放在对象上构造同步代码块(对象只有一个线程能够访问)

 

Java 5+

 

Lock ---> ReentrantLock (重入锁)

lock方法 --- 加锁

unlock方法 --- 解锁(建议放在finally代码块中)

 

Semaphore(信号量)

 

不恰当的同步可能导致死锁(deadlock)

5.3 线程调度

线程的生命周期

 

 

Java 1.4-

sleep

yield

join

wait

notify

notifyAll

 

Java 5+

Condition 

5.4 线程池

Java 5

 

ExecutorService接口 -->

      execute(Runnable)

Executors工具类 -->

newFixedThreadPool(int)

newCachedThreadPool()

 

池化技术(包括线程池、数据库连接池)是典型的用空间换时间的策略,因为对于计算机来说时间和空间是不可调和的矛盾,二者可以相互交换

6 GUI编程

6.1 AWT

6.2 Swing

6.2.1 常用的控件

JLabel

JButton / JRadioButton / JCheckBox

JTextField / JTextArea / JPasswordField

JComboBox

JList / JTable / JTree

JMenu / JMenuItem / JRadioButtonMenuitem / JCheckBoxMenuItem / JMenuBar / JPopupMenu / JSeparator

JPanel / JScrollPane / JTabbedPane / JSplitPane

JProgressBar / JEditorPane / JSlider

6.2.2 布局管理器

FlowLayout

BorderLayout

GridLayout

CardLayout

SpringLayout

GroupLayout

6.2.3 MVC架构模式

MVC模式

 

M --- Model模型 --- 数据

V --- View视图 --- 呈现给用户的界面

C --- Controller控制器 --- 连接模型和视图的桥梁

 

MVC模式实现了视图和数据的分离

6.3 事件处理机制

6.3.1 ActionListener

6.3.2 MouseListener / MouseMotionListener / MouseWheelListener

MouseAdapter

6.3.3 KeyListener

KeyAdapter

6.3.4 WindowListener

WindowAdapter

7 反射

通过对象还原类的信息,获得类的元数据

8 JDBC

8.1 核心API

8.1.1 Driver

8.1.2 DriverManager

工具类

 

通过getConnection(url, uid, pwd) 方法  ---> Connection

url ---   jdbc:mysql://IP地址:端口号/数据库的名字

uid --- 数据库的用户名

pwd --- 用户名对应的口令

8.1.3 Connection

开启事务环境的方法:

setAutoCommit(false) --- 开启事务

commit() --- 提交事务

rollback() --- 回滚事务

 

setTransactionIsolation(常量) --- 设置事务隔离级别

8.1.4 Statement

PreparedStatement

预编译语句:

1. 性能好

2. 使用更方便

3. 防范SQL注射攻击

CallableStatement

调用存储过程的SQL语句对象

8.1.5 ResultSet

游标(结果集)

next --- 取下一条记录

 

8.2 性能优化

8.2.1 抓取策略

ResultSet对象的setFetchSize方法可以指定每次抓取多少条记录

8.2.2 批处理

PreparedStatement对象的方法

addBatch --- 将语句添加到批处理

executeBatch --- 执行批处理

8.2.3 连接池

创建连接和释放连接都需要经过TCP协议的三次握手,开销很大,为此可以事先创建好若干连接放入连接池中,需要连接的时候从连接池获取,用完以后归还给连接池,不创建也不释放连接以节省开销。这又是典型的用空间换时间的策略

8.3 事务

事务 ACID 特性

      原子性 --- 

一致性 --- 事务完成后数据状态要一致

隔离性 --- 不同的事务不能看到对方的中间状态

持久性 --- 事务完成后改动会被持久化

事务隔离级别

脏读  --- 读到没有提交的事务的数据

不可重复读 --- 再次读取无法读到被其他事务修改的数据

幻读 --- 再次读取读到了其他事务提交的数据

8.4 DAO模式

DAO --- Data Access Object 数据访问对象

以对象为单位进行增删改查的操作

 

DAO的实现类封装了SQL语句和JDBC代码

9 XML

XML - eXtensible Markup Language 可扩展标记语言

 

<?xml version="1.0" encoding="utf-8"?>

<books>

   <book>

      <name>Java编程思想</name>

      <author gender="男">Bruce Eckel</author>

      <price>128.0</price>

   </book>

   <book>

      <name>Java面向对象程序设计</name>

      <author gender="女">孙卫琴</author>

      <price>38.0</price>

   </book>

</books>

 

1. 异构系统之间的数据交换 (被JSON取代)

2. 作为配置文件(常用)

 

Java操作XML推荐使用dom4j

 

 

编程专题,布布扣,bubuko.com

编程专题

标签:java   get   使用   文件   数据   os   

原文地址:http://www.cnblogs.com/xieh/p/3798247.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!