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
分享到:
相关推荐
### Java私塾Java高级部分教材知识点总结 #### 一、设计模式基础 ##### 1.1 设计模式的概念 设计模式是一种在软件工程领域中广泛使用的解决方案模板,它旨在帮助软件开发人员解决常见的设计问题。设计模式的核心...
【Java高级部分代码注释及笔记】 在Java高级部分的学习中,我们主要涉及以下几个关键知识点: 1. **多线程**:Java提供了多种创建线程的方式,如继承Thread类、实现Runnable接口或Callable接口,以及使用...
这套课程既可以作为从零基础开始学习的JAVA基础到高级学习教程,对于有JAVA基础的同学来说可以略过前面的JAVA基础章节,直接学习后续的JAVA高级部分课程。更可以灵活的作为章节技术,进行针对性的JAVA学习。还是要...
Java高级部分: 随着对基础的深入,开发者需要掌握Java的高级特性,如反射、多线程、集合框架、I/O流、网络编程等。反射机制允许程序在运行时动态访问和修改类的信息,多线程则涉及并发处理,集合框架是存储和操作...
**Java高级工程师岗位笔试题目** **一、选择题(每题2分,共20分)** 1. 下列哪个类是所有Java类的父类(除了Object类本身),即使是那些没有明确使用extends关键字的类? A. Cloneable B. Serializable C. ...
以上只是"Java高级实用教程"中的一部分核心内容,实际教程可能还涵盖设计模式、NIO、并发容器、JMS消息队列、Spring框架、数据库连接池等更多主题。通过深入学习和实践,你将能够成为一位熟练的Java开发者,解决复杂...
以上就是Java高级教程中可能涵盖的一些核心知识点。熟练掌握这些内容,将使你能够编写出高效、可维护且易于扩展的Java应用。同时,持续关注Java的新特性和发展趋势,如Java 11、12及更高版本的更新,也是保持技术...
Java高级部分涵盖了更复杂的特性和技术,包括: 1. **反射**:Java反射机制允许在运行时检查类的信息(如类名、方法、字段等),并能动态调用方法和修改字段值,增强了代码的灵活性。 2. **泛型**:泛型提供了一种...
上海-拼多多-Java高级.pdf 上海-携程-Java高级.pdf 北京-京东-Java中级.pdf 北京-百度-Java中级.pdf 南京-软通动力-Java中级.pdf 厦门-中软国际-Java中级.pdf 广州-唯品会-Java大数据开发工程师.pdf 杭州-蚂蚁金服-...
3. **Java高级部分教材**:这部分将挑战开发者解决复杂问题的能力,涵盖主题如JVM工作原理、内存管理、并发编程、网络编程、设计模式、Spring框架等企业级应用开发技术。这部分知识对于成为一名资深JAVA开发者至关...
【Java高级应用教程】 在Java编程领域,"高级应用"通常涵盖了许多复杂且深入的主题,这些主题对于初学者来说可能是挑战性的,但同时也是提升技能的关键。本教程将带你深入理解Java语言的核心特性,并探讨如何在实际...
3. "Java私塾Java中级部分教材(1).pdf"、"Java私塾Java初级部分教材.pdf"、"Java私塾Java高级部分教材.pdf" 分别对应《Java私塾》的初级、中级和高级教程,内容系统且实用,是循序渐进学习Java的理想资料。...
Java高级编程涵盖了许多关键概念,这些概念在开发复杂的软件系统时尤为重要。让我们深入探讨一下标题和描述中提及的几个核心知识点: 1. **图形界面编程**:Java提供了丰富的图形用户界面(GUI)工具包,如JavaFX和...
本资料"JAVA高级知识点整理.rar"主要涵盖了多线程、虚拟机、Java IO/NIO以及Java集合框架等核心主题,旨在帮助开发者深入理解Java平台的高级特性和最佳实践。 首先,多线程是Java编程中的重要组成部分,它允许程序...
首先,"Java私塾Java高级-理论部分-1.avi"很可能是一个视频教程,它可能会涵盖以下几个核心主题: 1. **多线程**:Java中的并发处理是高级主题之一,包括线程同步、线程池、守护线程、死锁等概念。视频可能详细讲解...
线程的创建、同步、通信和管理是Java高级工程师需要精通的部分。这包括理解线程池的工作原理,掌握synchronized关键字、wait()、notify()和notifyAll()方法的使用,以及死锁和活锁的预防。另外,Java并发工具类如...
Java高级编程实用教程是针对已经掌握了Java基础的开发者们深入学习的一门课程,旨在提升他们的编程技巧和解决复杂问题的能力。本教程将涵盖多个关键领域,包括多线程、网络编程、I/O流、反射、异常处理、集合框架、...
理解Java虚拟机(JVM)的工作原理和垃圾回收机制,以及如何通过调整JVM参数进行性能优化,也是Java高级编程的一部分。例如,理解堆内存、栈内存、方法区以及新生代和老年代的分配,以及如何使用JVisualVM等工具监控...
Java 高级开发技术是 Java 开发语言的高级部分,它涵盖了 Java 底层开发技术的多个方面。下面我们将对 Java 高级开发技术的主要知识点进行总结。 多线程 多线程是 Java 高级开发技术的重要组成部分。多线程是指在...