java.lang.Throwable
类是 Java 语言中错误 (Error) 和异常 (Exception) 的超类。Error
类主要用于描述 Java 虚拟机无法解决的严重错误,通常无法编码解决,如:JVM挂掉了等。Exception
类主要用于描述因编程错误或偶然外在因素导致的轻微错误,通常可以编码解决,如:0 作为除数等。java.lang.Exception
类是所有异常的超类,主要分为以下两种:RuntimeException
- 运行时异常,也叫作非检测性异常IOException
和其它异常 - 其它异常,也叫作检测性异常,所谓检测性异常就是指在编译阶段都能被编译器检测出来的异常。RuntimeException
类的主要子类:ArithmeticException
类 - 算术异常ArrayIndexOutOfBoundsException
类 - 数组下标越界异常NullPointerException
- 空指针异常ClassCastException
- 类型转换异常NumberFormatException
- 数字格式异常if
条件判断来避免异常的发生。if
条件判断会导致程序的代码加长、臃肿,可读性差。try {
编写可能发生异常的代码;
}
catch(异常类型 引用变量名) {
编写针对该类异常的处理代码;
}
...
finally {
编写无论是否发生异常都要执行的代码;
}
catch
分支时,切记小类型应该放在大类型的前面;finally
通常用于进行善后处理,如:关闭已经打开的文件等。try {
a;
b; // 可能发生异常的语句 b
c;
}catch(Exception ex) {
d;
}finally {
e;
}
访问权限 返回值类型 方法名称(形参列表) throws 异常类型1,异常类型2,...{ 方法体; }
如:
public void show() throws IOException{}xxxException
异常类继承 Exception
类或者其子类。throw new 异常类型(实参);
如:
throw new AgeException("年龄异常");java.io.File
类主要用于描述文件或目录路径的抽象表示信息,可以获取文件或目录的特征信息,如:大小等。c:/
, d:/
, /..
。相对路径:主要以当前目录所在位置开始的路径信息,如 ./
, ../
。方法声明 | 功能概述 |
---|---|
File(String pathname) | 根据参数指定的路径名来构造对象 |
File(String parent, String child) | 根据参数指定的父路径和子路径信息构造对象 |
File(File parent, String child) | 根据参数指定的父抽象路径和子路径信息构造对象 |
boolean exists() | 测试此抽象路径名表示的文件或目录是否存在 |
String getName() | 用于获取文件的名称 |
long length() | 返回由此抽象路径名表示的文件的长度 |
long lastModified() | 用于获取文件的最后一次修改时间 |
String getAbsolutePath() | 用于获取绝对路径信息 |
boolean delete() | 用于删除文件,当删除目录时要求是空目录 |
boolean createNewFile() | 用于创建新的空文件 |
boolean mkdir() | 用于创建目录 |
boolean mkdirs() | 用于创建多级目录 |
File[] listFiles() | 获取该目录下的所有内容 |
boolean isFile() | 判断是否为文件 |
boolean isDirectory() | 判断是否为目录 |
File[] listFiles(FileFilter filter) | 获取目录下满足筛选器的所有内容 |
java.io.FileWriter
类主要用于将文本内容写入到文本文件。方法声明 | 功能介绍 |
---|---|
FileWriter(String fileName) | 根据参数指定的文件名构造对象 |
FileWriter(String fileName, boolean append) | 以追加的方式根据参数指定的文件名来构造对象 |
void write(int c) | 写入单个字符 |
void write(char[] cbuf, int off, int len) | 将指定字符数组中从偏移量 off 开始的 len 个字符写入此文件输出流 |
void write(char[] cbuf) | 将 cbuf.length 个字符从指定字符数组写入此文件输出流中 |
void flush() | 刷新流 |
void close() | 关闭流对象并释放有关的资源 |
java.io.FileReader
类主要用于从文本文件读取文本数据内容。方法声明 | 功能介绍 |
---|---|
FileReader(String fileName) | 根据参数指定的文件名构造对象 |
int read() | 读取单个字符的数据并返回,返回 -1 表示读取到末尾 |
int read(char[] cbuf, int offset, int length) | 从输入流中将最多 len 个字符的数据读入一个字符数组中,返回读取到的字符个数,返回 -1 表示读取到末尾 |
int read(char[] cbuf) | 从此输入流中将最多 cbuf.length 个字符的数据读入字符数组中,返回读取到的字符个数,返回 -1 表示读取到末尾 |
void close() | 关闭流对象并释放有关的资源 |
java.io.FileOutputStream
类主要用于将图像数据之类的原始字节流写入到输出流中。方法声明 | 功能介绍 |
---|---|
FileOutputStream(String name) | 根据参数指定的文件名来构造对象 |
FileOutputStream(String name, boolean append) | 以追加的方式根据参数指定的文件名来构造对象 |
void write(int b) | 将指定字节写入此文件输出流 |
void write(byte[] b, int off, int len) | 将指定字节数组中从偏移量 off 开始的 len 个字节写入此文件输出流 |
void write(byte[] b) | 将 b.length 个字节从指定字节数组写入此文件输出流中 |
void flush() | 刷新此输出流并强制写出任何缓冲的输出字节 |
void close() | 关闭流对象并释放有关的资源 |
java.io.FileInputStream
类主要用于从输入流中以字节流的方式读取图像数据等。方法声明 | 功能介绍 |
---|---|
FileInputStream(String name) | 根据参数指定的文件路径名来构造对象 |
int read() | 从输入流中读取单个字节的数据并返回,返回 -1 表示读取到末尾 |
int read(byte[] b, int off, int len) | 从此输入流中将最多 len 个字节的数据读入字节数组中,返回读取到的字节个数,返回 -1 表示读取到末尾 |
int read(byte[] b) | 从此输入流中将最多 b.length 个字节的数据读入字节数组中,返回读取到的字节个数,返回 -1 表示读取到末尾 |
void close() | 关闭流对象并释放有关的资源 |
int available() | 获取输入流所关联文件的大小 |
java.io.BufferedOutputStream
类主要用于描述缓冲输出流,此时不用为写入的每个字节调用底层系统。方法声明 | 功能介绍 |
---|---|
BufferedOutputStream(OutputStream out) | 根据参数指定的引用来构造对象 |
BufferedOutputStream(OutputStream out, int size) | 根据参数指定的引用和缓冲区大小来构造对象 |
void write(int b) | 写入单个字节 |
void write(byte[] b, int off, int len) | 写入字节数组中的一部分数据 |
void write(byte[] b) | 写入参数指定的整个字节数组 |
void flush() | 刷新流 |
void close() | 关闭流对象并释放有关的资源 |
java.io.BufferedInputStream
类主要用于描述缓冲输入流。方法声明 | 功能介绍 |
---|---|
BufferedInputStream(InputStream in) | 根据参数指定的引用构造对象 |
BufferedInputStream(InputStream in, int size) | 根据参数指定的引用和缓冲区大小构造对象 |
int read() | 读取单个字节 |
int read(byte[] b, int off, int len) | 读取 len 个字节 |
int read(byte[] b) | 读取 b.length 个字节 |
void close() | 关闭流对象并释放有关的资源 |
java.io.BufferedWriter
类主要用于写入单个字符、字符数组以及字符串到输出流中。方法声明 | 功能介绍 |
---|---|
BufferedWriter(Writer out) | 根据参数指定的引用来构造对象 |
BufferedWriter(Writer out, int sz) | 根据参数指定的引用和缓冲区大小来构造对象 |
void write(int c) | 写入单个字符到输出流中 |
void write(char[] cbuf, int off, int len) | 将字符数组 cbuf 中从下标 off 开始的 len 个字符写入输出流中 |
void write(char[] cbuf) | 将字符串数组 cbuf 中所有内容写入输出流中 |
void write(String s, int off, int len) | 将参数 s 中下标从 off 开始的 len 个字符写入输出流中 |
void write(String str) | 将参数指定的字符串内容写入输出流中 |
void newLine() | 用于写入行分隔符到输出流中,会调用 flush() 方法 |
void flush() | 刷新流 |
void close() | 关闭流对象并释放有关的资源 |
java.io.BufferedReader
类用于从输入流中读取单个字符、字符数组以及字符串。方法声明 | 功能介绍 |
---|---|
BufferedReader(Reader in) | 根据参数指定的引用来构造对象 |
BufferedReader(Reader in, int sz) | 根据参数指定的引用和缓冲区大小来构造对象 |
int read() | 从输入流读取单个字符,读取到末尾则返回 -1,否则返回实际读取到的字符内容 |
int read(char[] cbuf, int off, int len) | 从输入流中读取 len 个字符放入数组 cbuf 中下标从 off 开始的位置上,若读取到末尾则返回 -1,否则返回实际读取到的字符个数 |
int read(char[] cbuf) | 从输入流中读满整个数组 cbuf |
String readLine() | 读取一行字符串并返回,返回 null 表示读取到末尾 |
void close() | 关闭流对象并释放有关的资源 |
java.io.PrintStream
类主要用于更加方便地打印各种数据内容。PrintStream
永远不会抛出 IOException 异常。出现异常情况会在内部设置标识,通过 checkError()
获取此标识。方法声明 | 功能介绍 |
---|---|
PrintStream(OutputStream out) | 根据参数指定的引用来构造对象 |
void print(String s) | 用于将参数指定的字符串内容打印出来 |
void println(String x) | 用于打印字符串后并终止该行。在 print() 的基础上多调用了一个 newLine() 私有方法。 |
void flush() | 刷新流 |
void close() | 用于关闭输出流并释放有关的资源 |
java.io.PrintWriter
类主要用于将对象的格式化形式打印到文本输出流。PrintWriter
可以正常的存储中文,减少乱码输出。方法声明 | 功能介绍 |
---|---|
PrintWriter(Writer out) | 根据参数指定的引用来构造对象 |
void print(String s) | 将参数指定的字符串内容打印出来 |
void println(String x) | 打印字符串后并终止该行 |
void flush() | 刷新流 |
void close() | 关闭流对象并释放有关的资源 |
java.io.OutputStreamWriter
类主要用于实现从字符流到字节流的转换。可以指定编码格式。方法声明 | 功能介绍 |
---|---|
OutputStreamWriter(OutputStream out) | 根据参数指定的引用来构造对象 |
OutputStreamWriter(OutputStream out, String charsetName) | 根据参数指定的引用和编码构造对象 |
void write(String str) | 将参数指定的字符串写入 |
void flush() | 刷新流 |
void close() | 用于关闭输出流并释放有关的资源 |
java.io.InputStreamReader
类主要用于实现从字节流到字符流的转换。可以指定编码格式。方法声明 | 功能介绍 |
---|---|
InputStreamReader(InputStream in) | 根据参数指定的引用来构造对象 |
InputStreamReader(InputStream in, String charsetName) | 根据参数指定的引用和编码来构造对象 |
int read(char[] cbuf) | 读取字符数据到参数指定的数组 |
void close() | 用于关闭输出流并释放有关的资源 |
java.io.DataOutputStream
类主要用于以适当的方式将基本数据类型写入输出流中。方法声明 | 功能介绍 |
---|---|
DataOutputStream(OutputStream out) | 根据参数指定的引用构造对象 OutputStream 类是个抽象类,实参需要传递子类对象 |
void writeInt(int v) | 用于将参数指定的整数一次性写入输出流,优先写入高字节 |
void close() | 用于关闭文件输出流并释放有关的资源 |
java.io.DataInputStream
类主要用于从输入流中读取基本数据类型的数据。方法声明 | 功能介绍 |
---|---|
DataInputStream(InputStream in) | 根据参数指定的引用来构造对象 InputStream 类是抽象类,实参需要传递子类对象 |
int readInt() | 用于从输入流中一次性读取一个整数数据并返回 |
void close() | 用于关闭文件输出流并释放有关的资源 |
java.io.ObjectOutputStream
类主要用于将一个对象的所有内容整体写入到输出流中。java.io.Serializable
接口的对象写入流中。java.io.Serializable
接口以启用其序列化功能。方法声明 | 功能介绍 |
---|---|
ObjectOutputStream(OutputStream out) | 根据参数指定的引用来构造对象 |
void writeObject(Object obj) | 用于将参数指定的对象整体写入到输出流中 |
void close() | 用于关闭输出流并释放有关的资源 |
java.io.ObjectInputStream
类主要用于从输入流中一次性将对象整体读取出来。方法声明 | 功能介绍 |
---|---|
ObjectInputStream(InputStream<br/>in) | 根据参数指定的引用来构造对象 |
Object readObject() | 主要用于从输入流中读取一个对象并返回,无法通过返回值来判断是否读取到文件的末尾 |
void close() | 用于关闭输入流并释放有关的资源 |
序列化机制是通过在运行时判断类的 serialVersionUID
来验证版本一致性的。在进行反序列化时,JVM会把传来的字节流中的 serialVersionUID
与本地相应实体类的 serialVersionUID
进行比较,如果相同就认为是一致的,可以进行反序列化,否则就会出现序列化版本不一致的异常 (InvalidCastException
)。
transient
是 Java 语言的关键字,用来表示一个域不是该对象串行化的一部分。当一个对象被串行化的时候,transient
型变量的值不包括在串行化的表示中,然而非 transient
型的变量是被包括进去的。
当希望将多个对象写入文件时,通常建议将多个对象放入一个集合中,然后将集合这个整体看做一个对象写入输出流中,此时只需要调用一次 readObject
方法就可以将整个集合的数据读取出来,从而避免了通过返回值进行是否达到文件末尾的判断。
java.io.RandomAccessFile
类主要支持对随机访问文件的读写操作。方法声明 | 功能介绍 |
---|---|
RandomAccessFile(String name, String mode) | 根据参数指定的名称和模式构造对象。r:以只读方式打开。rw:打开以便读取和写入。rwd:打开以便读取和写入,同步文件内容的更新。rws:打开以便读取和写入,同步文件内容和元数据的更新 |
int read() | 读取单个字节的数据 |
void seek(long pos) | 用于设置从此文件的开头开始测量的文件指针偏移量 |
void write(int b) | 将参数指定的单个字节写入 |
void close() | 用于关闭流并释放有关的资源 |
java.lang.Thread
类代表线程,任何线程对象都是 Thread
类(子类)的实例。Thread
类是线程的模板,封装了复杂的线程开启等操作,封装了操作系统的差异性。Thread
类并重写 run
方法,然后创建该类的对象调用 start
方法。Runnable
接口并重写 run
方法,创建该类的对象作为实参来构造 Thread
类型的对象,然后使用 Thread
类型的对象调用 start
方法。方法声明 | 功能介绍 |
---|---|
Thread() | 使用无参的方式构造对象 |
Thread(String name) | 根据参数指定的名称来构造对象 |
Thread(Runnable target) | 根据参数指定的引用来构造对象,其中 Runnable 是个接口类型。 |
Thread(Runnable target, String name) | 根据参数指定引用和名称来构造对象 |
void run() | 若使用 Runnable 引用构造了线程对象,调用该方法时最终调用接口中的版本。若没有使用 Runnable 引用构造线程对象,调用该方法时则啥也不做。 |
void start() | 用于启动线程,Java 虚拟机会自动调用该线程的 run 方法。 |
main
方法的线程叫做主线程,执行 run
方法的线程叫做新线程/子线程。main
方法是程序的入口,对于 start
方法之前的代码来说,由主线程执行一次,当 start
方法调用成功后线程的个数由 1 个变成了 2 个,新启动的线程去执行 run
方法的代码,主线程继续向下执行,两个线程各自独立运行互不影响。run
方法执行完毕后子线程结束,当 main
方法执行完毕后主线程结束。Thread
类 和 实现 Runnable
接口继承 Thread
类的方式代码简单,但是若该类继承 Thread
类后则无法继承其它类,而实现 Runnable
接口的方式代码复杂,但不影响该类继承其它类以及实现其它接口,因此以后的开发中推荐使用第二种方式。
new Thread() {
@Override
public void run() {
...
}
}.start();
new Thread(new Runnable() {
@Override
public void run() {
...
}
}).start();
// Lambda 表达式
new Thread(()-> System.out.println(“hello”)).start();
new
关键字创建之后进入的状态,此时线程并没有开始执行。start
方法后进入的状态,此时线程还是没有开始执行。sleep
方法。阻塞状态解除后进入就绪状态。方法声明 | 功能介绍 |
---|---|
long getId() | 获取调用对象所表示线程的编号 |
String getName() | 获取调用对象所表示线程的名称 |
void setName(String name) | 设置/修改线程的名称为参数指定的数值 |
static Thread currentThread() | 获取当前正在执行线程的引用 |
方法声明 | 功能介绍 |
---|---|
static void yield() | 当前线程让出处理器(离开 Running 状态),使当前线程进入 Runnable 状态等待。 |
static void sleep(times) | 使当前线程从 Running 放弃处理器进入 Block 状态,休眠 times 毫秒,再返回到 Runnable。如果其他线程打断当前线程的Block (sleep),就会发生 InterruptedException。 |
int getPriority() | 获取线程的优先级。 |
void setPriority(int newPriority) | 修改线程的优先级。优先级越高的线程不一定先执行,但该线程获取到时间片的机会会更多一些。 |
void join() | 等待该线程终止。 |
void join(long millis) | 等待参数指定的毫秒数。 |
boolean isDaemon() | 用于判断是否为守护线程。当子线程是守护线程,当主线程结束后,则子线程随之结束。 |
void setDaemon(boolean on) | 用于设置线程为守护线程。 |
synchronized
关键字来实现同步/对象锁机制从而保证线程执行的原子性。synchronized(object)
的 object
不是同一个对象,则锁不住。synchronized(类类型的引用) {
编写所有需要锁定的代码;
}
synchronized(this) {
整个方法体的代码;
}
类名.class
。synchronized
后它们之间是非互斥关系的。使用 synchronized
保证线程同步应当注意
StringBuffer
类是线程安全的类,但 StringBuilder
类不是线程安全的类。Vector
类和 Hashtable
类是线程安全的类,但 ArrayList
类和 HashMap
类不是线程安全的类。Collections.synchronizedList()
和 Collections.synchronizedMap()
等方法实现安全。public void run(){
synchronized(a){ // 持有对象锁a,等待对象锁b
synchronized(b){
编写锁定的代码;
}
}
}
public void run(){
synchronized(b){ // 持有对象锁b,等待对象锁a
synchronized(a){
编写锁定的代码;
}
}
}
Lock
(锁)实现线程同步java.util.concurrent.locks.Lock
接口是控制多个线程对共享资源进行访问的工具。ReentrantLock
类,该类拥有与 synchronized
相同的并发性,在以后的线程安全控制中,经常使用 ReentrantLock
类显式加锁和释放锁。方法声明 | 功能介绍 |
---|---|
ReentrantLock() | 使用无参方式构造对象 |
void lock() | 获取锁 |
void unlock() | 释放锁 |
synchronized
方式的比较Lock
是显式锁,需要手动实现开启和关闭操作,而 synchronized
是隐式锁,执行锁定代码后自动释放。Lock
只有同步代码块方式的锁,而 synchronized
有同步代码块方式和同步方法两种锁。Lock
锁方式时,Java 虚拟机将花费较少的时间来调度线程,因此性能更好。Object
类常用的方法方法声明 | 功能介绍 |
---|---|
void wait() | 用于使得线程进入等待状态,直到其它线程调用 notify() 或 notifyAll() 方法 |
void wait(long timeout) | 用于进入等待状态,直到其它线程调用方法或参数指定的毫秒数已经过去为止 |
void notify() | 用于唤醒等待的单个线程 |
void notifyAll() | 用于唤醒等待的所有线程 |
合成复用原则 -- Composite Reuse Principle,CRP。它要求在软件复用时,要尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现。
public class ProducerThread ... {
private Warehouse warehouse; // 仓库类型的引用
public ProduceThread(Warehouse warehouse) {
this.warehouse = warehouse;
}
... // Override run() to produce product
}
public class ConsumerThread ... {
private Warehouse warehouse; // 仓库类型的引用
public ConsumerThread(Warehouse warehouse) {
this.warehouse = warehouse;
}
... // Override run() to consume product
}
public class Warehouse {
// 生产方法
public synchronized void produceProduct() {
...
}
// 消费方法
public synchronized void consumeProduct() {
...
}
}
java.util.concurrent.Callable
接口。V call()
计算结果并返回java.util.concurrent.FutureTask
类用于描述可取消的异步计算,该类提供了 Future
接口的基本实现,包括启动和取消计算、查询计算是否完成以及检索计算结果的方法,也可以用于获取方法调用后的返回结果。public class MyCallable implements Callable {
@Override
public Object call() throws Exception {
int sum = 0;
for (int i = 1; i <= 10; i++) {
sum +=i;
}
System.out.println("sum: " + sum);
return sum;
}
public static void main(String[] args) {
MyCallable mc = new MyCallable();
FutureTask ft = new FutureTask(mc);
Thread t1 = new Thread(ft);
t1.start();
Object obj = null;
try {
obj = ft.get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
System.out.println("Thread return value is: " + obj);
}
}
java.util.concurrent.Executors
类和 java.util.concurrent.ExecutorService
接口。Executors
是个工具类和线程池的工厂类,可以创建并返回不同类型的线程池,常用方法如下:
方法声明功能介绍static ExecutorService newCachedThreadPool()
创建一个可根据需要创建新线程的线程池static ExecutorService newFixedThreadPool(int nThreads)
创建一个可重用固定线程数的线程池static ExecutorService newSingleThreadExecutor()
创建一个只有一个线程的线程池ExecutorService
接口是真正的线程池接口,主要实现类是 ThreadPoolExecutor
,常用方法如下:
执行任务和命令,通常用于执行 RunnableExecutorService executorService = Executors.newFixedThreadPool(10);
Future future = executorService.submit(new MyCallable());
executorService.shutdown();
Object returnValue = future.get();
计算机在网络中实现通信就必须有一些约定或者规则,这种约定和规则就叫做通信协议,通信协议可以对速率、传输代码、代码结构、传输控制步骤、出错控制等制定统一的标准。
传输控制协议 (Transmission Control Protocol),是一种面向连接的协议,类似于打电话。
用户数据报协议 (User Datagram Protocol),是一种非面向连接的协议,类似于写信。
192.168.1.1
- 是绝大多数路由器的登录地址,主要配置用户名和密码以及 MAC 过滤。0x0102030a => 1.2.3.10
ipconfig
或 ipconfig/all
命令即可
Unix/linux 系统:在终端窗口中使用 ifconfig
或 /sbin/ifconfig
命令即可127.0.0.1
主机名(hostName):localhost
0 ~ 65535
,其中 0 ~ 1024
之间的端口号通1025
开始使用。HTTP:80
FTP:21
Oracle:1521
MySQL:3306
Tomcat:8080
ServerSocket
类型的对象并提供端口号;
(2)等待客户端的连接请求,调用 accept()
方法;
(3)使用输入输出流进行通信;
(4)关闭 Socket
;Socket
类型的对象并提供服务器的 IP 地址和端口号;
(2)使用输入输出流进行通信;
(3)关闭 Socket
;java.net.ServerSocket
类主要用于描述服务器套接字信息(大插排)。ServerSocket(int port)
根据参数指定的端口号来构造对象Socket accept()
侦听并接收到此套接字的连接请求void close()
用于关闭套接字java.net.Socket
类主要用于描述客户端套接字,是两台机器间通信的端点(小插排)。Socket(String host, int port)
根据指定主机名和端口来构造对象InputStream getInputStream()
用于获取当前套接字的输入流OutputStream getOutputStream()
用于获取当前套接字的输出流void close()
用于关闭套接字Socket
与服务器端 Socket
对应, 都包含输入和输出流。socket.getInputStream()
连接于服务器 socket.getOutputStream()
。socket.getOutputStream()
连接于服务器 socket.getInputStream()
。DatagramSocket
类型的对象并提供端口号;
(2)创建 DatagramPacket
类型的对象并提供缓冲区;
(3)通过 Socket
接收数据内容存放到 Packet
中,调用 receive
方法;
(4)关闭 Socket
;DatagramSocket
类型的对象;
(2)创建 DatagramPacket
类型的对象并提供接收方的通信地址;
(3)通过 Socket
将 Packet
中的数据内容发送出去,调用 send
方法;
(4)关闭 Socket
;java.net.DatagramSocket
类主要用于描述发送和接收数据报的套接字(邮局)。换句话说,该类就是包裹投递服务的发送或接收点。java.net.DatagramPacket
类主要用于描述数据报,数据报用来实现无连接包裹投递服务。java.net.InetAddress
类主要用于描述互联网通信地址信息。static InetAddress getLocalHost()
用于获取当前主机的通信地址static InetAddress getByName(String host)
根据参数指定的主机名获取通信地址java.net.URL
(Uniform Resource Identifier)类主要用于表示统一的资源定位器,也就是指向万维网上“资源”的指针。这个资源可以是简单的文件或目录,也可以是对复杂对象的引用,例如对数据库或搜索引擎的查询等。<传输协议>://<主机名>:<端口号>/<资源地址>
方法声明 | 功能介绍 |
---|---|
URL(String spec) | 根据参数指定的字符串信息构造对象 |
String getProtocol() | 获取协议名称 |
String getHost() | 获取主机名称s |
int getPort() | 获取端口号 |
String getPath() | 获取路径信息 |
String getFile() | 获取文件名 |
URLConnection openConnection() | 获取 URLConnection 类的实例 |
java.net.URLConnection
类是个抽象类,该类表示应用程序和 URL 之间的通信链接的所有类的超类,主要实现类有支持 HTTP 特有功能的 HttpURLConnection
类。
方法声明 | 功能介绍 |
---|---|
InputStream getInputStream() | 获取输入流 |
void disconnect() | 断开连接 |
Person p = new Person(); // 表示声明 Person 类型的引用指向 Person 类型的对象
p.show(); // 表示调用 Person 类中的成员方法 show
java.lang.Class
类的实例可以用于描述 Java 应用程序中的类和接口,是一种数据类型。数据类型.class
的方式可以获取对应类型的 Class
对象(掌握)。Class c1 = String.class;
System.out.println("c1 = " + c1); // class java.lang.String
c1 = Integer.class;
System.out.println("c1 = " + c1); // class java.lang.Integer
c1 = int.class;
System.out.println("c1 = " + c1); // int
c1 = void.class;
System.out.println("c1 = " + c1); // void
引用/对象.getClass()
的方式可以获取对应类型的 Class
对象。基本数据类型不能调用该方法。String str1 = new String("hello");
c1 = str1.getClass();
System.out.println("c1 = " + c1); // class java.lang.String
Integer it1 = 20;
c1 = it1.getClass();
System.out.println("c1 = " + c1); // class java.lang.Integer
包装类.TYPE
的方式可以获取对应基本数据类型的 Class
对象。c1 = Integer.TYPE;
System.out.println("c1 = " + c1); // int
Class.forName()
的方式来获取参数指定类型的 Class
对象(掌握)。c1 = Class.forName("java.lang.String");
System.out.println("c1 = " + c1); // class java.lang.String
c1 = Class.forName("java.util.Date");
System.out.println("c1 = " + c1); // class java.util.Date
ClassLoader
的方式获取指定类型的 Class
对象。ClassLoader classLoader = ClassTest.class.getClassLoader();
System.out.println("classLoader = " + classLoader); // null
c1 = classLoader.loadClass("java.lang.String");
System.out.println("c1 = " + c1); // class java.lang.String
方法声明 | 功能介绍 |
---|---|
static Class<?> forName(String className) | 用于获取参数指定类型对应的 Class 对象并返回 |
T newInstance() | 用于创建该 Class 对象所表示类的新实例 |
java.lang.reflect.Constructor
类主要用于描述获取到的构造方法信息
方法声明 | 功能介绍 |
---|---|
Constructor getConstructor(Class<?>... parameterTypes) | 用于获取此 Class 对象所表示类型中参数指定的公共构造方法 |
Constructor<?>[] getConstructors() | 用于获取此 Class 对象所表示类型中所有的公共构造方法 |
方法声明 | 功能介绍 |
---|---|
T newInstance(Object... initargs) | 使用此 Constructor 对象描述的构造方法来构造 Class 对象代表类型的新实例 |
int getModifiers() | 获取方法的访问修饰符 |
String getName() | 获取方法的名称 |
Class<?>[] getParameterTypes() | 获取方法所有参数的类型 |
java.lang.reflect.Field
类主要用于描述获取到的单个成员变量信息。
方法声明 | 功能介绍 |
---|---|
Field getDeclaredField(String name) | 用于获取此 Class 对象所表示类中参数指定的单个成员变量信息 |
Field[] getDeclaredFields() | 用于获取此 Class 对象所表示类中所有成员变量信息 |
方法声明 | 功能介绍 |
---|---|
Object get(Object obj) | 获取参数对象 obj 中此 Field 对象所表示成员变量的数值 |
void set(Object obj, Object value) | 将参数对象 obj 中此 Field 对象表示成员变量的数值修改为参数 value 的数值 |
void setAccessible(boolean flag) | 当实参传递 true 时,则反射对象在使用时应该取消 Java 语言访问检查 |
int getModifiers() | 获取成员变量的访问修饰符 |
Class<?> getType() | 获取成员变量的数据类型 |
String getName() | 获取成员变量的名称 |
java.lang.reflect.Method
类主要用于描述获取到的单个成员方法信息。
方法声明 | 功能介绍 |
---|---|
Method getMethod(String name, Class<?>... parameterTypes) | 用于获取该 Class 对象表示类中名字为 name 参数为 parameterTypes 的指定公共成员方法 |
Method[] getMethods() | 用于获取该 Class 对象表示类中所有公共成员方法 |
方法声明 | 功能介绍 |
---|---|
Object invoke(Object obj, Object... args) | 使用对象 obj 来调用此 Method 对象所表示的成员方法,实参传递 args |
int getModifiers() | 获取方法的访问修饰符 |
Class<?> getReturnType() | 获取方法的返回值类型 |
String getName() | 获取方法的名称 |
Class<?>[] getParameterTypes() | 获取方法所有参数的类型 |
Class<?>[] getExceptionTypes() | 获取方法的异常信息 |
方法声明 | 功能介绍 |
---|---|
Package getPackage() | 获取所在的包信息 |
Class<? super T> getSuperclass() | 获取继承的父类信息 |
Class<?>[] getInterfaces() | 获取实现的所有接口 |
Annotation[] getAnnotations() | 获取注解信息 |
Type[] getGenericInterfaces() | 获取泛型信息 |