java高级以上等级,Java高级一部分

当前位置:我的异常网» 编程 » Java高级一部分

Java高级一部分

www.myexceptions.net  网友分享于:2013-12-21  浏览:2次

Java高级部分

io

==========

java.io.File 重点

==================

表示文件或者文件夹

1, 创建

File f1 = new File("c:/a.txt");

File f2 = new File("c:/windows");

File f3 = new File(f2, "notepad.exe");

2, 方法

文件或目录属性

-------------------

length() - 文件字节数,目录字节数返回0

isFile() - 判断是否表示文件

isDirectory() - 判断是否表示目录

lastModified() - 最后修改时间

getName() - 文件名

getPath() - 文件路径

getParent() - 父目录File对象

exists() - 文件或目录是否存在

canRead() canWrite() canExecute() - 是否具有读写执行权限

文件或目录操作

--------------------

createNewFile() - 创建文件, 返回是否成创建文件

mkdir() - 创建单层目录,返回是否成创建文件

mkdirs() - 创建多层目录,返回是否成创建文件

delete() - 删除文件,删除空目录,返回是否成删除

renameTo(File) - 改名

目录列表

--------------------

list()

listFiles() - 子目录和子文件的列表, 返回File[]

list(FileNameFilter) - 使用给定过滤器过滤文件

listFiles(FileNameFilter)

listFiles(FileFilter)

回调模式 - 其他方法的代码中反过来调用自己的代码

java.io.FileFilter 接口

java.io.FileNameFilter 接口

-----------------------

文件过滤器

accept(File) - 参数文件是否符合过滤条件

java.io.RandomAccessFile 次重点

============================

read() - 返回指针指向的字节,指针后移一位

返回int类型,范围0-255或-1

返回-1表示没有数据

readInt() - 从指针位置读4个字节作为int返回,

如果不足4个字节会出现异常 EOFException

readByte() readChar() readShort() readLong() readFloat() readDouble() readBoolean()

readUTF() - 读出字符串

write(int) - 将一个字节写入到当前指针位置,指针后移一位

writeInt(int) - int的四个字节写出去

writeUTF(String) - 字符串编码为UTF-8编码写出

seek(位置) - 将指针移动到给定位置

getFilePointer()

用处

----------------

1, 处理固定格式的文件

2, 处理大型文件

处理 BMP 文件

----------------

1,前54字节是BMP头,包含文件大小

2,宽度从18字节开始到21字节

高度从22字节开始到25字节

3,54字节之后是像素颜色数据 RGB

每个像素3字节

4,像素从左到有从上倒下排列

5,每个扫描行字节量必须是4的倍数

6,宽度、高度、RGB色是低字节序排列

io

================

InputStream

FileInputStream

ByteArrayInputStream

BufferedInputStream

DataInputStream

PrintStream

OutputStream

...

========================

InputStream

OutputStream

========================

1, 抽象类

2, 读写方法

---------------

read() - 读取一个字节,返回int类型

如果返回-1,表示读取结束

read(byte[]) - 一次读取多个字节放入数组

返回int类型,表示读取的字节数量

如果返回-1,表示读取结束

write(int) - 写一个字节

write(byte[])

write(byte[],起始位置,字节数)

FileInputStream

FileOutputStream

======================

文件读写

ByteArrayInputStream

ByteArrayOuputStream

======================

内存字节数组的读写

BufferedInputStream

BufferedOutputStream

======================

为其它流提供内存缓冲以提高读写效率

当io效率差时,可考虑接入BufferedIO

默认缓冲区大小是8k字节

可通过构造方法指定缓冲区大小

flush() - 手动刷出输出流中缓冲的数据

DataInputStream

DataOutputStream

======================

以字节方式读写基本数据

如果读写的数据具有固定的字节格式,可选用DataIO

readInt() - 读4个字节

readUTF() - 读字符串

writeInt(888888) - 写4个字节

writeUTF("abc") - 写字符串

PrintStream

=======================

打印流

将任何数据变成字符数据输出

输出文本数据可选用 PrintStream

print()

println()

io

==================

字符集

======================

Reader

Writer

======================

read() - 返回int类型,表示一个char

返回-1表示没有数据

read(char[]) - 读出多个字符放入数组,返回int表示字符个数

返回-1表示没有数据

write(int) - 将后两个字节按字符集编码后写出

write(char[])

write(char[],起始位置,字符个数)

write(String)

InputStreamReader

OutputStreamWriter

======================

转换流

将从字节流中读取的字节按指定编码或默认编码转换为字符

FileReader

FileWriter

======================

内部是InputStreamReader接FileInputStream

OutputStreamWriter接FileOutputStream

使用默认编码

BufferedReader

BufferedWriter

======================

BufferedReader 的 readLine()

读取正行数据,不包含末尾换行符

PrintWriter

======================

任何类型数据转为字符输出

print()

println()

对象序列化

ObjectOutputStream

ObjectInputStream

======================

1,序列化的对象必须实现Serializable接口

2,writeObject(Object) 序列化对象

3,readObject() 反序列化对象

4,static 和 transient 成员不序列化

5,对象中成员类型也必须是可序列化的

线程

========================

1, 实现线程两种方式

a,继承Thread

b,实现Runnable接口

2, 线程的静态方法

---------------------

Thread.sleep(毫秒值) - 当前线程暂停给定毫秒

Thread.currentThread() - 获得当前线程对象

Thread.yield() - 暂停执行,切换到其他线程执行

3, 线程的非静态方法

---------------------

setId()

getId()

setName()

getName()

setPriority(int) - 优先级设置,1-10,默认5

getPriority()

setDaemon(boolean) - 后台线程

isDaemon()

java虚拟机等待所有的前台线程消亡,自动退出

即使还有后台线程没有执行完,虚拟机也会自动退出

join() - 将一个线程加入到当前线程中

4, 什么时候使用线程

-------------------------

1,多个并行子任务提高程序效率

2,阻塞的操作,必须在一个线程内执行

3,后台执行的重复任务

线程

==================

多线程共享数据,线程的同步

synchronized (重点)

----------------------------------

1,同步锁

每个对象上都有一个同步锁

一个线程执行 synchronized 块时,

需要获得同步锁才能执行

等执行完会归还锁

2,synchronized 非静态方法

要获得当前实例的同步锁

3,synchronized 静态方法

要获得类对象的同步锁

4,synchronized 块

synchronized(对象) {

......

}

要获得小括号中对象的同步锁

可以选择以下对象:

a, this

b, 类对象

c, 非静态成员 Object lock = new Object()

d, 静态成员 static Object lock = new Object()

e, 正在修改或访问的对象

5,线程安全效率很差

线程不安全 - 线程安全

jdk1.2  -  jdk1.0

ArrayList  -  Vector

HashMap  -  HashTable

StringBuilder - StringBuffer

6,获得线程安全的集合

syncList = Collections.synchronizedList(List);

syncMap = Collections.synchronizedMap(Map);

syncSet = Collections.synchronizedSet(Set);

等待通知机制 (非重点)

==================

1,wait 和 notifyAll 必须在synchronized代码块内调用

2,wait 会释放锁 (sleep不会释放锁)

3,wait 总应该在一个循环检查内调用(旋锁)

4,notify 方法只通知一个等待的线程

notifyAll 方法通知所有等待的线程

多数情况下应该使用notifyAll方法

5,等待通知机制可以看作是线程之间通信的机制

一个线程运算产生结果后通知另一个线程使用该数据

Timer

TimerTask

----------------------------------

1,执行重复任务

2,TimerTask - 执行的任务

3,Timer - 计时重复调用任务

schedule(TimerTask, Date)

在给定时间点执行一次指定任务

schedule(TimerTask, Date, long)

在给定时间点第一次执行, 间隔一定毫秒后重复执行

schedule(TimerTask, long, long)

间隔一定毫秒后执行第一次, 间隔一定毫秒后重复执行

scheduleAtFixedRate(TimerTask, Date, long)

固定频率执行

ThreadLocal

----------------------------------

线程安全的数据传递方式

在线程上绑定数据,

在线程执行到其他方法是从线程绑定取出数据

set(Object)

get()

remove()

Executors - 用于创建线程池

----------------------------------

执行大量任务时使用线程池避免创建过多线程

newCachedThreadPool()

创建一个可根据需要创建新线程的线程池

newFixedThreadPool()

创建一个可重用固定线程数的线程池

ExecutorService - 线程池

----------------------------------

execute(Runnable)

使用线程池中的线程执行任务

反射

=============

java.lang.Class

------------------------

0,获取类对象

实例.getClass()

类.class

Class.forName(类名字符串)

1,

包含类的信息(类名、属性、方法、构造方法)

2,

以下三个方法获取的是有访问权限的成员

包含继承的成员

c.getConstructors() - 获取构造方法

c.getFields() - 获取属性

c.getMethods() - 获取方法

3,

以下三个方法获取的是该类中定义的所有成员

不包含继承的成员

getDeclaredConstructors()

getDeclaredFields()

getDeclaredMethods()

通过反射创建实例

---------------------------------

Class.newInstance()

无参构造方法创建实例

Constructor.newInstance(Object[])

有参构造方法创建实例

通过反射调用成员

---------------------------------

返回值 = Method.invoke(对象, 参数数组)

Field.set(对象,值) - 给对象的成员变量赋值

Field.get(对象) - 获取对象的变量值

反射调用私有成员

setAccessable(true) - 将私有成员设为可访问

反射的作用:动态编程

---------------------------------

java.lang.reflect.Field

java.lang.reflect.Method

java.lang.reflect.Constructor

注解

=============

为其他工具、程序提供关于类、方法、属性的更多信息

自定义注解

-------------------------

@interface 关键字声明标注

@Target标注规定自定义标注的标注范围(类、方法、属性)

@Retention标注规定自定义标注的保留范围(源文件、字节码文件、内存)

@Target(ElementType.METHOD) //该标注只能应用于方法

@Retention(RetentionPolicy.RUNTIME) //在运行期保留

public @interface Test {

int id(); // 标注的属性

String description();

}

使用标注

---------------------------

class A {

@Test(id=12, description="测试12")

public void a() {......}

}

反射提取标注

---------------------------

T t = Method.getAnnotation(Test.class);

int id = t.id();

String desc = t.description();

java.net

======================

Socket 网络套接字

---------------------------------

ip地址 + 端口

java.net.ServerSocket

---------------------------------

构造方法指定端口号

accept() - 接受客户端连接请求并建立一个Socket通道

java.net.Socket

---------------------------------

Socket s = new Socket(ip,端口);

s.getInputStream()

s.getOutputStream()

java.net.URL

java.net.URLEncoder

java.net.URLDecoder

文章评论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值