类是对象的类型,对象是类的实例
类是对象的抽象化,对象是类的具象化
类是一个抽象的概念,不能表示出个体来;对象是个体存在的概念,可以指定到某一个上面
方法重载:在同一个类中,方法名相同,方法的参数个数不同,顺序不同,类型不同,和访问修饰符无关,和返回值类型无关的多个方法叫做方法重载
方法重写:在两个有继承关系的类中,子类和父类的方法名相同,方法参数项(个数,顺序,类型)相同,子类访问修饰符不小于父类访问修饰符,子类的返回值类型是父类的返回值类型或是其子类类型,这种关系就叫做方法重写。
Exception(异常):在程序运行中出现的不正常事件,遇到异常,会终止程序运行,为避免程序被终止,可以通过一些代码来规避这种问题,遇到异常后,处理这种异常,以达到程序正常运行的目的
Error(错误):在程序运行当中,遇到没办法处理的软件错误或硬件错误,虚拟机会选择终止运行程序。
Bug(漏洞):程序当中的不合理现象
ArrayList 是一个以数组实现的列表,是线程不安全的。在遍历数组时速度比较快
LinkedList是双重链表形式的,是线程不安全的。在遍历数组时比较慢,插入或删除时比较快
ArrayList扩容规则:(原始集合长度*3/2)+1
HashSet集合中存放的数据不可以重复,set中没有索引值,很可能每一次读取set中的元素的顺序不一样。
Map类型用来存储键值对类型的数据
HashMap类型是线程不安全的,HashTable是线程安全的、
List 元素有顺序,可以重复
|--ArrayList 一块连续的空间,线程不安全 如需要线程安全可使用Vector
|--LinkedList 元素分别在不同空间,每个元素通过内存地址链接
Set Set内元素没有顺序,不可以重复,每次读取的顺序可能不一样
|--HashSet
Map
|--HashMap 以键值对形式存在,key不可以重复,value可以重复,key和value可以是任意类型
Date代表日期或时间,精确到毫秒(1秒 = 1000毫秒)。
构造函数:
Date()://创建一个代表当前时间的Date对象; Date(long date)://指定毫秒数创建Date对象; getTime():获取Date对象的毫秒数; after(Date when):判断当前Date是否在when之后,如果是就返回true,否则返回false; before(Date when):判断当前Date是否在when之前,如果是就返回true,否则返回false; compareTo(Date anotherDate):比较两个日期的大小,如果当前Date等于指定Date,就返回0。如果当前Date小于指定Date,就返回负数;如果当前Date大于指定Date,就返回整数。
构造函数: SimpletDateFormat()//创建一个SimpletDateFormat对象,需要调用applePattern方法指定模式; SimpleDateFormat(String pattern)//创建一个指定模式的SimpleDateFormat对象; 常用方法: String format(Date d)://把一个Date对象格式化成指定模式的字符串; Date parse(String source)://把日期的文本解析成指定模式的Date对象;
常用方法
// 创建Calendar对象 Calendar c = Calendar.getInstance(); // 相当于 Calendar c = new GregorianCalendar(); 常用方法 void add(int field, int amount)://给指定日期字段添加或减去指定的时间量; boolean after(Object when)://判断是否在指定时间之后,返回结果; boolean before(Object when)://判断是否在指定时间之前,返回结果; Date getTime()://获取日历代表的Date对象; int get(int field)://获取Calendar日历字段的值; void set(int field, int value)://设置Calendar指定日历字段的值;
System类提供了一些有用的属性和方法(获取标准输入输出流、数组复制、访问环境变量等等)。System不需要实例化。
获取标准输入输出流的属性:
in:获取标准的输入流;
out:获取标准的输出流;
err:获取错误输出流;
常用方法:
void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) //从源数组src的srcPos位置开始,复制length个元素到目标数组dest的destPos位置。 long currentTimeMillis()://获取当前时间的毫秒数;相当于new Date().getTime() exit(int n)://退出jvm虚拟机。如果n非零,代表不正常关闭jvm虚拟机; gc()://通知运行垃圾回收器尽快回收没有用的资源; String getEnv(String name):获取环境变量(了解)
方式一:使用Pattern对象来实现。
// 创建Patther对象 Pattern p = Pattern.compile(规则); // 创建匹配器 Matcher m = p.matcher(匹配内容); // 调用matches方法执行匹配,如果匹配成功返回true,否则返回false。 m.matches();方式二:使用字符串的matches方法。
String regex = "规则"; String content = "匹配内容"; content.matches(regex); // 如果返回true,代表匹配成功,否则失败字符串提供提供了split方法,该方法用于把字符串按照指定规则进行切割,该方法会返回一个字符串的数组。
public class Demo954 { public static void main(String[] args) { String ip = "192.168.3.144"; String regex = "\\."; // 匹配. String[] ips = ip.split(regex); System.out.println(Arrays.toString(ips)); } }模式:
字符类:
. 匹配任意一个字符。如果要匹配. ,则需要进行转义。比如: \\.
[abc]或[a-c]或[a|b|c]: 匹配a或b或c中任意一个字符。
[^abc] :匹配除了a或b或c以外任意一个字符。
边界字符:
^ 以什么开头
$ 以什么结尾
\b 单词的边界 hello world \b[a-z]{5}\b
数量词:
+ :1个或多个
*: 0个或多个
?: 0个或1个
{n}: 至少出现n次
{n,}:
{n,m}
构造函数:
new File(String pathname)://按照给定的文件或目录路径创建File对象。常用方法:
//创建的方法: createNewFile()://创建一个新的文件; mkdir()://创建一个空目录; mkdirs()://创建多级目录; //删除的方法: delete()://删除一个文件或空目录。如果目录中有其他内容,必须要先清空目录,然后才能够删除该目录。 deleteOnExit()://执行该方法时候不会马上删除文件,只有虚拟机退出前才会删除该文件; //判断的方法: exists()://判断文件或目录是否存在; isDirectory()://判断是否是目录,如果是就返回true,否则返回false; isHidden()://判断该文件是否是隐藏文件; //查看的方法: getName()://获取文件名; getPath()://获取文件或目录的路径; getAbsolutePath()://获取文件或目录的绝对路径; length()://获取文件的长度,以字节为单位,如果文件为空,则返回0L。 lastModified()://获取文件的最后修改时间,以毫秒为单位; File[] listFiles()//:获取该目录下所有文件或目录的File对象; File[] listFiles(FileFilter filter)//指定过滤器把目录下文件或子目录获取出来;
InpuStream:所有输入字节流的父类
|- FileInputStream: 读文件的输入字节流
构造函数:
FileInputStream(File file)://使用File对象创建一个FileInputStream对象; FileInputStream(String name)://指定文件名创建一个FileInputStream对象相关方法:
close()://关闭流; read()://每次读取一个字节数据; read(byte[] buf)://每次可以读取多个数据,读取数据的长度取决于数组的大小; read(byte[] buf, int offset, int length)://指定从offset位置开始读取length个数据到数组中;
OutputStream:所有输出字节流的父类。
|- FileOutputStream:写文件的输出字节流。
构造函数:
FileOutputStream(File file): FileOutputStream(File file , boolean append)://如果append为true,那么每次把数据写入文件的末尾。 FileOutputStream(String name): FileOutputStream(String name , boolean append)://如果append为true,那么每次把数据写入文件的末尾。主要方法:
close()://关闭流 write(byte[] buf)://把一个字节数组的数据全部写入输出流中; write(byte[] buf, int offset, int length)://把字节数组指定offset位置开始的length个字节数据写入输出流中; write(int b)://每次写入一个字节数据;
构造函数:
BufferedInputStream(InputStream in)://创建BufferedInputStream对象的时候需要传入另外一个InputStream对象。BufferedInputStream需要借助传进来InputStream对象读取数据,它本身不具备读数据的能力。常用方法:
read()://每次从缓存中读取一个字节数据; read(byte[] buf, int offset, int length)://每次从缓存中的offset位置开始读取length个数据到buf数组中;
构造函数:
BufferedOutputStream(OutputStream out)://BufferedOutputStream本身并不具备写数据的能力。他需要借助传进来的OutputStream对象写数据。主要方法:
flush()://把缓存数组中的数据写入磁盘。 write(int b)://每次把一个字节数据写入缓存数组中; write(byte[] buf, int offset, int length)://每次从字节数组buf的offset位置开始写入length个字节到缓存数组中。
Reader:所有输入字符流的父类。
|- FileReader:读文件的输入字符流。
构造函数:
FileReader(File file)://创建一个FileReader对象; FileReader(String name):常用方法:
close()://关闭流 read()://每次读取一个字符; read(char[] buf)://每次读取一个数组长度的多个字符,并保存在数组中; read(char[] buf, int offset, int length)://每次从offset位置开始读取length个字符到数组buf中;
Writer:所有输出字符流的父类。
|- FileWriter:写文件的输出字符流。
构造函数:
FileWriter(File f): FileWriter(File f, boolean append)://如果append为true,就是在文件的末尾追加新的内容; FileWriter(String name): FileWriter(String name, boolean append)://如果append为true,就是在文件的末尾追加新的内容;主要方法:
write(String str)://把字符串写入字符输出流中; close()://关闭流; flush()://清空流中的缓冲;
InputStreamReader:把输入字节流转换成输入字符流;
OutputStreamWriter:把输出字节流转换成输出字符流;
作用:实现对象的序列化和反序列。
序列化:把一个对象保存在文件中的过程。
反序列化,把一个文件的对象的数据读取出来的过程。
ObjectInputStream:对象输入字节流,实现反序列化。
ObjectOutputStream:对象输出字节流,可以实现把一个对象输出到文件中(序列化)。
序列化的对象必须要实现Serializable接口。该接口的主要作用用来标识这个类是可序列化的。
主要方法:
load(InputStream in)://从输入流中加载配置文件; getProperty(String key)://根据key获取值。 setProperty(String key, String value)://向Properties中添加一个键值。 store(OutputStream out, String comment)://把Properties对象中的数据写入到配置文件中;
方式一: 继承Thread
方式二:使用new创建Thread对象,并传入Runnable对象
准备状态:创建线程的时候。
可运行状态:调用线程的start方法,线程并不会马上执行,只有获得cpu的执行权才会执行;
运行状态:线程获得cpu的执行权,线程开始执行。
阻塞状态:线程的执行权被其他线程抢去了,或者调用了线程wait或sleep方法(线程放弃它的cpu执行权)。
如果其他线程调用notify或notifyAll的时候,线程重新进入可运行状态;
消亡状态:线程执行完毕;
1)Lock手动获取锁和释放锁,而Synchronized自动获取锁和释放锁;
2)Lock的监听器可以看得见,而Synchronized的锁对象的监听器是看不见;
3)Lock使用await、signal、signAll方法实现线程的通讯,而synchronized使用Object类的wait、notify、notifyAll方法实现线程通讯;
interrupt方法
一个线程调用了wait、join、sleep方法进入阻塞状态后,如果调用了interrupt方法,该方法会把现成的阻塞状态清除,并抛出InterrupteException异常。
join方法
该方法用于实现线程让步。当前线程可以让其他线程先执行,然后让执行当前线程。
Timer:代表定时器;
TimerTask:代表定时任务;
UDP协议的特点:
1)不安全,可能会发生丢包;2)传输的数量限制在64kb以内;3)传输速度快,效率高;4)UDP是分为发送端和接收端,进行点对点的数据传输;
发送端:DatagramSocket对象
接收端:DatagramSocket,对外暴露一个端口;
UDP: 1)不安全,可能会发生丢包;2)传输的数量限制在64kb以内;3)传输速度快,效率高;4)UDP是分为发送端和接收端,进行点对点的数据传输;
TCP:1)安全的,不会发生丢包;2)传输数据大小没有限制,通过IO流进行数据传输;3)数据传输速度比UDP慢;4)TCP分客户端和服务端;
TCP协议传输之前要经过三次握手:
1)第一次握手:客户端发送一个数据给服务端,确认服务端是否在线;
2)第二次握手:服务端给客户端返回一个响应;
3)第三次握手:客户端再次发送一个确认给服务端,完成三次握手;
服务端:ServerSocket
客户端:Socket
Class对象:
方式一:使用Class.forName(“包名+类名”)来获取指定类的Class对象;
方式二:通过调用一个对象的getClass方法来获取该对象所在类的Class对象;
方式三:通过“类名.class”来获取一个类的Class对象;
Constructor对象
Constructor代表构造器。
Class对象提供的方法:
Constructor[] getConstructors():获取一个类的所有公共构造函数; Constructor getConstructors(Class... parameterType):根据参数获取指定公共的构造函数;Constructor对象提供的方法:
T newInstance(Object... args):创建实例,实例的类型就是Constructor的泛型类型;
Field对象
ield代表类的成员属性。
获取Field的方法:
Field[] getFields():获取一个类或接口中所有公共的字段; Field getField(String name):获取一个类或接口指定的公共字段; Field[] getDeclaredFields():获取一个类或接口所有声明所有字段; Field getDeclaredField(String name):获取一个类或接口所声明的指定字段;操作Field的方法:
void set(Object obj, Object value):设置Field的值。如果该Field是非静态的成员属性,那么第一个参数就是该成员属性所在对象。如果该Field是静态的,那么第一个参数为null;第二参数要设置字段的值。 void setAccessible(boolean flag):设置是否取消java的语法检查。true代表取消,false代表不取消;(暴力反射) Object get(Object obj):获取该Field对象所代表的值。如果该Field是非静态的,那么第一个参数就是该Field所在对象。如果是静态的,第一个参数可以为null;Method对象
Object invoke(Object obj, Object... parameterType):调用方法,如果该方法是非静态的,那么第一个参数就是该方法的调用者对象;如果该方法是静态的,那么第一个参数可以为null;
