所有有必要写下来的java基础的知识点都会在这篇文章记录下来…并且后续会逐渐完善
以下是知识点总结:
1. 二叉树:
先序:根左右
中序:左根右
后序:左右根
2. 给循环添加标记:
out for…
inter for…
用于决定判断结束语句执行谁,比如:
out for(){
inter for(){
continue out;(直接作用在out后面的语句上)
}
}
3. 排序算法:
快速:
1.选取第一个为标记点,其余数与其比较,小的在左,大的在右
2.针对标记点左右,分别重复以上操作,知道不能继续为止。
冒泡:
1.利用2层for循环,对应循环层数和次数,依次咕噜咕噜把最大值冒泡到最右边
插入:
1.将原数组看作左右两段已经排序和未排序,设第一个为标记点,遍历数组,如果比标记点小则交换位置,然后标记点下标加一
2.重复以上操作
选择:
1.遍历数组,找出最小值,和最左边交换,最左边角标+1;
2.重复以上;
4. 数组是引用数据类型;
5. 方法:
方法是完成特定的功能的,是相对独立的程序段,与其他编程语言的子程序,函数等概念相当。
6. override和overload:
override重写:
1.子方法的方法名和参数类型,和参数顺序必须一致;
2.返回数据类型必须一致;
3.访问修饰符权限要一定要大于被重写的方法(当被重写的方法是privete,或者final时,无法被重写);
overload重载:
1.子方法的方法名必须一致,但是参数类型或者参数顺序,或者参数个数必须不同;
注意:重载的返回数据类型没有关系,但是重写必须相同;
7. 成员变量和局部变量:
成员变量在方法外面,局部变量在方法里面
8. 多态的优势:
1.可替换性:多态对已存在的代码具有可代替性(比如重写和重载);
2.可扩充性:多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性,继承性,以及其他特性的运行和操作。实际上新加子类更容易获得多态。
3.接口性:多态是父类向子类提供了一个共同接口,由子类来具体实现。
4.灵活性:多态在应用中体现了灵活多样的操作,提高了使用效率。
5.简化性:多态简化了应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要。
9. 抽象类:
1.abstract修饰的抽象方法没有方法体。
2.private关键字不能用来修饰抽象方法,否则由于封装导致子类无法重写抽象方法。
3.抽象类不能被实例化,因为抽象类中的抽象方法是没有方法体的,导致抽象类不是完整的类,因此不允许实例化。
4.子类如果不是抽象类,则子类必须重写抽象类中的全部抽象方法。
5.abstract修饰符不能和final修饰符一起使用。
10. 接口:
1.一个接口或类可以实现多个接口
11.抽象类和接口的区别:
1.接口只有定义,不能有方法是实现(jdk1.8以后可以定义default方法体),而抽象类可以有定义与实现,方法可在抽象类中实现。
2.实现接口的关键字为implement,继承抽象类的关键字为extends。一个类可以实现多个接口,但一个只能继承一个抽象类。
3.接口强调特定功能的实现,而抽象类强调所属关系。
4.接口成员变量默认为public static final
,必须赋初值,不能被修改;其所有的成员方法都是public
、abstract
的。抽象类中成员变量默认default
,可在子类中被重新定义,也可被重新赋值;抽象方法被abstract
修饰,不能被private
、static
、synchronized
和native
等修饰,必须以分号结尾,不带花括号。(不理解)
5.接口被用于常用的功能,便于修改和维护;抽象类更倾向于充当公共类的角色。
话不多说,直接上知识点~
以下是知识点的总结:
Collection集合(Iterable接口下的)
11)关系导图:(待更新)
12.Set集合(唯一,无序)
------------------Set集合的功能和Collection是一致的。
1)HashSet:底层数据结构是哈希表。
HashSet是如何保证元素唯一性的呢?
是通过元素的两个方法,hashCode和equals来完成。
如果元素的HashCode值相同,才会判断equals是否为true。
如果元素的hashcode值不同,不会调用equals。
注意:对于判断元素是否存在,以及删除等操作,依赖的方法是元素的hashcode和equals方法。
- TreeSet:可以对Set集合中的元素进行排序。
13.List集合(不唯一,有序)
List特有方法
--------------------凡是可以操作角标的方法都是该体系特有的方法。
增 | add(index,element); addAll(index,Collection); |
---|---|
删 | remove(index); |
改 | set(index,element); |
查 | get(index); subList(from,to); listIterator(); |
List特有迭代器:ListIterator
LinkedList特有方法
addFirst();
addLast();
getFirst();
getLast();
获取元素,但不删除元素。如果集合中没有元素,会报异常
removeFirst();
removeLast();
获取元素,但是元素被删除。如果集合中没有元素,会报异常
jdk1.6之后的替代方法:
addFirst();
addLast();
getFirst();
getLast();
获取元素,但不删除元素。如果集合中没有元素,返回null;
removeFirst();
removeLast();
获取元素,但是元素被删除。如果集合中没有元素,返回null;
14.Map集合
--------------该集合存储键值对。一对一对往里存。而且要保证键的唯一性。
map的常用方法
1.添加
put(K key,V value)
putAll(Map<? extends K,? extends V>m)
2.删除
clear()
remove(Object key)
3.判断
containsValue(Object value)
containsKey(Object key)
isEmpty()
4.获取
get(Object key)
size()
values()
entrySet()
keySet()
Date类
15.日期格式转换:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iobOPIZx-1599287508497)(file:///C:/Users/dragon/AppData/Local/Temp/msohtmlclip1/01/clip_image001.png)]
IO流
16.File类
1).File类中的常见方法
mkdirs:创建全部目录
mkdir:只能创建当前目录
createNewFile:
exists:
getParentFile:得到父目录
canWrite:
canRead:
isDirectory:
lastModified:
listFiles:将文件列表返回
instanceof :判断所属关系
renameTo:将文件名重命名为
separator:跨平台的分隔符。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kvq6gOGj-1599287508502)(file:///C:/Users/dragon/AppData/Local/Temp/msohtmlclip1/01/clip_image001.png)]
1.创建
boolean createNewFile();
boolean mkdir():创建文件夹。
boolean mkdirs():创建多级文件夹。
2.删除
boolean delete():删除失败返回false。如果文件正在被使用,则 删除不了返回false。
vold deleteOnExit():在程序退出时删除指定文件。
3.判断
boolean exists(): 文件是否存在。
isFile():
isDirectory():
isHiddeen():
isAbsolute():
4.获取信息
getName():
getPath():
getParent():
getAbsolutePath():
lastModified():
17.字节流
InputStream OutputStream
read:读取多少 write:写入多少
常用方法:read()
writer()
18.字符流
Reader Writer
BufferedReader BufferedWriter
常用方法:read()
writer()
BufferedReader特有方法:
readLine():按行读
BufferedWriter特有方法:
newLine():换行
注意点
BufferedWriter下的writer在写入时一定要调用以下writer.flush(),不然不会写入
总结:
流
Reader Writer
BufferedReader BufferedWriter
常用方法:read()
writer()
BufferedReader特有方法:
readLine():按行读
BufferedWriter特有方法:
newLine():换行
注意点
BufferedWriter下的writer在写入时一定要调用以下writer.flush(),不然不会写入
反射
19.如何获取类
1.getClass()方法
2.类.class
3.使用class类的forName()静态方法
20.从类对象中获取信息
1.访问类中的构造方法
-
Constractor getConstructor(Class[] params) 返回指定参数的类中的public构造方法
-
Constractor[] getConstructor() 返回所有public构造方法
-
Constractor getDeclaredConstructor(Class[] params) 返回指定参数的类中的构造方法,无视修饰权限的级别
-
Constractor[] getDeclaredConstructor() 返回所有构造方法,无视修饰权限的级别
2.访问类中的方法
- Method getMethod(String name , Class[] params) 返回指定方法名,指定参数的public方法
- Method[] getMethods 返回所有public方法
- Method getDeclaredMethod(String name , Class[] params)
- Method[] getDeclaredMethods
3.访问类中所包含的属性
1.Field getField(String name) 返回指定属性名,指定参数的public属性名
2.Field getField() 返回所有public属性名
3.Field getDeclaredField(String name)
2.Field getDeclaredField()
4.访问类所包含的注解
1.A getAnnotation(Class annotationClass) 获取指定类型的注解,如果不存在就返回null
2. Annotation getAnnotation() 返回此类上存在的所有注解
3. Annotation getDeclaredAnnotation() 返回直接存在在此类上的所有注解
5.访问类的其他信息
1. Class[] getDeclaredClasses() 返回类对应的所有内部类
-
Class[] getDeclaringClasses() 返回类对应的所有外部类
-
Class[] getInterfaces() 返回类所实现的全部接口
-
int getModifiers() 返回类或者接口的所有修饰符,返回的整数应使用Modifer工具类的方
法类解码,才能获取真正的修饰符。(不会解码)
-
Package getPackage() 获取此类的包
-
String getName() 以字符串形式返回此类的名称
-
String getSimpleName() 以字符串形式返回此类的简称
-
Class getSuperclass() 返回该类的父类
-
setAccessible 跳过权限验证,直接访问
3.创建对象
-
使用Class对象的 newInstance() 方法创建对象。
-
使用Constructor对象创建对象。
1). 获取该类的Class对象。
2). 利用Class对象的getConstructor()方法获取指定构造方法。
3). 调用Constructor的newInstance()方法来创建java对象
Thread(多线程)
------------创建-----启动------调度
21.进程和线程
进程:是指正在运行的程序,是系统中执行的最小单位。
线程:是进程中的最小单位
22.Thread类常用方法
1. void run() 执行任务操作的方法
2. void start() 使该线程开始执行
3. void sleep(long millis) 让该线程休眠
4. String getName() 返回该线程的名称
5. int getPriority() 返回该线程的优先级
6. void setPriority(int newPriority) 更改线程优先级
7. Thread.State getState() 返回该线程的状态
8. boolean isAlive() 测试线程是否处于活动状态
9. void join() 等该线程终止
10. void interrupt() 中断线程
11. void yield() 转让给优先级更高的线程执行,没有就不让步
网络编程
常用指定:
ping
telent
23.网络7层模型
1. 应用层 网络服务和最终用户的接口
2. 表示层 数据的表示,安全和压缩
3. 会话层 建立,管理和终止会话
4. 传输层 定义传输数据的协议端口号,流量控制和差错恢复
5. 网络层 进行逻辑地址寻址,实现不同网络之间的路径选择
6. 数据链路层 建立逻辑连接,进行硬件地址寻址,差错校验等功能
7. 物理层 建立,维护,断开物理连接
24.基于TCP协议的Socket编程
1.常用方法
1. InetAddress getInetAddress() 返回与Socket对象关联的InetAddress
2. int getPort() 返回此Socket对象所连接的远程端口
3. int getLocalPort() 返回此Socket对象所连接的本地端口
4. InputStream getInputStream() 返回与此套接字关联的InputStream
5. OutputStream getOutputstream() 返回与此套接字关联的OutputStream
6. void close() 关闭该Socket
2.ServerSocket
ServerSocket对象等待客户端建立连接,连接建立以后进行通信。
3.实现步骤
1. 建立连接。
2. 打开Socket关联的输入/输出流。
3. 从数据流中写入信息和读取信息 。
4. 关闭所有的数据流和Socket。
4.客户端实现步骤
1. 建立连接。连接指向服务器及端口。
2. 打开Socket关联的输入/输出流。
3. 向输出流中写入信息
4. 从输入流中读取响应信息
5. 关闭所有的数据流和Socket。
5.服务器实现步骤
1. 建立连接。监听端口。
2. 打开Socket关联的输入/输出流。
3. 向输出流中写入信息
4. 从输入流中读取响应信息
5. 关闭所有的数据流和Socket。
6.InetAddress类
--------------用于封住ip地址和DNS
1. static InetAddress getLocalHost() 返回表示本机主机的InetAddress对象
2. static InetAddress getByName(String hostname) 返回指定主机名为hostname的InetAddress对象
3. static InetAddress getAllByName(String hostname) 返回主机名为hostname的所有可能的 inetAddress 对象数组
3.基于UDP协议的Socket编程
1.DatagramPacket类
1. DatagramPacket(byte[] data , int size) 构造DatagramPacket对象, 封装长度为size的数据包
2. DatagramPacket(byte[] buf , int length , InetAddress address , int port) 构造DatagramPacket对象, 封装长度为 length的数据包 , 并发送到指定的主机,端口号
3. byte[] getData() 返回字节数组,该数组包含接收或要发送到数据报的数据
4. int getLength() 返回发送或接收到的数据的长度
5. InetAddress getAddress() 返回发送或接收此数据报的主机的IP地址
6. int getPort() 返回发送或接收此数据报的主机的端口号
2.DatagramSocket类
- DatagramSocket() 创建一个DatagramSocket对象, 并将其与本地主机上任何可用的端口绑定
- DatagramSocket(int port) 创建一个DatagramSocket对象, 并将其与本地主机上指定的端口绑定
- void connect(InetAddress address , int port) 将当前DatagramSocket对象连接到远程地址的指定端口
- void close() 关闭当前DatagramSocket对象
- void disconnect() 断开当前DatagramSocket对象的连接
- int getLocalPost() 返回当前DatagramSocket对象绑定的本机主机的端口号
- void send(DatagramPacket p) 发送指定的数据报
- void receive(DatagramPacket p) 接收数据报。收到数据以后,存放在指定的DatagramSocket对象中
3.使用Socket编程实现客户编程
-
利用DatagramPacket 对象封装数据包。
-
利用DatagramSocket 对象发送数据包。
-
利用DatagramSocket对象接收数据包。
- 利用DatagramSocket对象处理数据包。