1.java语言基础
1)数据类型
字符形转义字符整数型浮点型布尔型
2)运算符
算数运算符:+,-,*,/,++,–,%关系运算符:<,>,==,!=,>=,<=布尔运算符:&&,||,!
3)流程控制
(1)选择结构
if()if() elseswitch()
(2)循环结构
forwhiledo…while
(3)控制语句
breakcontinue
4)面向对象
(1)特点
封装继承多态
(2)类
类名称 对象名 = new 类名称();
5)抽象
抽象方法:加上abstract关键字,然后去掉大括号,直接分号结束抽象类:抽象方法所在的类,必须是抽象类才行。在class之前写上abstract即可
6)多态
代码中体现多态性:父类引用指向子类对象访问成员变量的两种方式:直接通过对象名称访问成员变量间接通过成员方法访问成员变量
7)final关键字
final关键字代表最终,不可改变的可以用来修饰一个类可以用来修饰一个方法还可以用来修饰一个局部变量还可以用来修饰一个成员变量
8)接口
接口是一种引用数据类型,最重要的内容就是其中的:抽象方法接口的定义接口中抽象方法的定义接口使用步骤接口的默认方法定义接口的静态方法定义接口静态方法的使用接口的私有方法定义接口的常量的定义和使用
9)四种权限修饰符
publicpratecteddefaultprivate
2.日期时间类
1)Date类
Date类:表示日期和时间的类;表示特定的瞬间,精确到毫秒DateFormat类:是日期/时间格式化子类的抽象类
2)Calendar类
Calenda类是一个抽象类,里面提供了很多操作日历字段的方法(YEAR,MONTH.DAY.HOUE)Calenda类无法直接创建对象使用,里面有一个静态方法叫getInstance(),该方法返回了Calendar类的子类对象static Calenda getInstance()使用默认时区和语言环境获得一个日历
3)System类
System类中提供了大量的静态方法,可以获取与系统相关的信息或系统级操作。
4)StringBuilder类
String类:字符串是常量:它们的值在创建之后不能更改。字符串的底层是一个被final修饰得数组,不能改变,是一个常量StringBuilding类:字符串缓冲区,可以提高字符串的操作效率(看成一个长度可以改变的字符串),底层是一个数组,但是没有被final修饰,可以改变长度
3.集合
1)集合框架
Cellection接口:定义的是所有单列集合中共性的方法,所有的单列集合都可以使用共性的方法,没有共性方法List接口: a.有序的集合(存储和取出元素顺序相同)。 b.允许存储重复的元素。 c.有索引,可以使用普通的for循环遍历Set接口: a.不允许存储重复元素。2.没有索引(不能使用普通的for循环遍历)
2)Collection集合:
(1)共性方法
public boolean add(E e): 把给定的对象添加到当前集合中public boolean contains(E e): 判断当前集合中是否包含给定的对象public boolean remove(E e): 把给定的对象在当前集合中删除public boolean isEmpty(): 判断当前集合是否为空public int size(): 返回集合中元素的个数public Object[] toArray(): 把集合中的元素,储存到数组中public void clear(): 清空集合中所有的元素
3)List接口
(1)特有方法
public void add(int index, E element):将指定的元素,添加到该集合的指定位置上public E get(int index):返回集合中指定的位置的元素public E remove(int index):移除列表中指定位置的元素,返回的是该被移除的元素public E set(int index, E element):用指定元素替换集合中指定的位置的元素,返回值的跟新前的元素
4)Set集合
(1)HashSet集合
不允许存储重复的元素没有索引,没有带索引的方法,也不能使用普通的for循环是一个无序的集合,存储元素和取出元素的顺序有可能不一致底层是一个哈希表结构(查询的速度非常的快)
(2)LinkedHashSet集合
底层是一个哈希表(数组+链表/红黑树)+链表:多了一条链表(记录元素的储存顺序),保证元素有序,不允许重复
5)Map集合
(1)特点
Map集合是一个双列集合,一个元素包含两个值(一个key,一个value)Map集合中的元素,key和value的数据类型可以相同,也可以不同Map集合中的元素,key是不允许重复的,value是可以重复的Map集合中的元素,Key和value是一一对应
(2)常用方法
public V put(K key,V value):把指定的键与指定的值添加到Map集合中public V remove(Object key):把指定的键 所对应的键值对元素 在Map集合中删除,返回被删除元素的值public V get(Object key)根据指定的键,在Map集合中获取对应的值boolean containKey(Object key)判断集合中是否包含指定的键
4.异常
1)概述:
指的是程序在执行过程中,出现的非正常的情况,最终会导致JVM的非正常停止
2)异常的处理
(1)throw关键字
作用:可以使用throw关键字在指定的方法中抛出指定的异常使用格式:throw new xxxException(“产生异常的原因”);
(2)Objects非空判断
Objects类中的静态方法:public static T requireNonNull(T obj):查看指定引用对象是不是null
(3)throws关键字:异常处理的第一种方式,交给别人处理
作用:当方法内部抛出异常对象的时候,那么我们就必须处理这个异常对象,可以使用throws关键字处理异常对象,会把异常对象声明抛出给方法的调用者处理(自己不处理,交给别人处理),最终交给JVM处理–>中断处理使用格式:在方法声明时使用 修饰符 返回值类型 方法名(参数列表) throws{ throw new AAAException(“产生原因”); throw new BBBException(“产生原因”); … }
(4)try…catch:异常处理的第二种方式,自己处理异常
格式:try{ 可能产生异常的代码 }catch(定义一个异常的变量,用来接收try中抛出的异常对象){ 异常的处理逻辑,产生异常对象之后,怎么处理异常对象 一般在工作中,会把异常的信息记录到一个日志中 } … catch(异常类名 变量名){ }
(5)Throwanle类中的3个异常处理方法
String getMessage() 返回此throwable的简短描述String toString() 返回此throwable的详细消息字符串void printStackTrace() JVM打印异常对象,默认此方法,打印的异常信息是最全面的
5.多线程
1)多线程
(1)并发与并行
并发:指两个或多个事件在同一个时间段内发生(交替进行)并行:指两个或多个事件在同一时刻发生(同时进行)
(2)线程与进程
进程:是指一个内存中运行的应用程序,即进入到内存中的程序叫做进程线程:线程是进程中的一个执行单元,一个进程可以包含多个线程
(3)创建线程类
创建Thread类的子类
1.获取线程的名称:2.设置线程的名称3.Thread类的常用方法——sleep 实现Runnable接口
1.创建一个Runnable接口的实现类2.在实现类中重写Runnable接口的run方法,设置线程任务3.创建一个Runnable接口的实现类对象4.创建Thread类对象,构造方法中传递Runnable接口的实现对象5.调用Thread类中的start方法,开启新的线程执行run方法
2)线程安全问题
(1)解决线程安区问题的一种方案:使用同步代码块
(2)解决线程问题安区问题的第二种方案:使用同步方法
1)把访问了共享数据的代码抽取出来,放到一个方法中2)在方法上添加synchonized修饰符
(3).解决线程安全问题的第三种方案:使用Lock锁
1)在成员位置创建一个ReentrantLock对象2)在可能会出现安全问题的代码前调用Lock接口中的方法lock获取锁3)在可能会出现安全问题的代码后调用Lock接口中的方法unlock释放锁
3)线程状态
Timed Waiting(计时等待)Blocked(锁阻塞)Waiting(无限等待)
6.网络编程
1)软件结构
1, C/S结构:全称为Client/Server结构,是指客户端和服务器结构。常见程序有QQ,迅雷等软件。2,B/S结构:全程为Browser/Server结构,是指浏览器和服务器结构。常见浏览器有谷歌,火狐等。
2)网络通讯协议
1.网络通讯协议:通过计算机网络可以使多台计算机实现连接,位于同一个网络中的计算机在进行连接和通信时需要遵守一定的规则。在计算机网络中,这些连接和通信的规则被称为网络通信协议,它对数据的传输格式,传输速率,传输步骤等做了统一规定,通信双方必须同时遵守才能完成数据交换。2.TCP/IP协议:传输控制协议/因特网互联协议,是internet最基本,最广泛的协议,它定义了计算机如何来连入因特网,以及数据如何在他们之间传输的标准。它的内部包含一系列的用于处理数据通信的协议,并采集了4层的分层模型,每一次都呼叫他的下一层所提供的协议来完成自己的需求。
3)协议分类
1.UDP:用户数据协议,UDP是无连接通信协议,即在数据传输时,数据的发送端和接收端不建立逻辑连接。简单来说,当一台计算机向另外一台计算机发送数据时,发送端不会确认接收端是否存在,就会发出数据,同样接收端在收到数据时,也不会向发送端反馈是否收到数据。TCP:传输控制协议。TCP协议是面向连接的通信协议。即传输数据前,在发送端和接收端建立逻辑连接,然后再传输数据。
三次握手:
第一次:客户端向服务器端发出连接请求,等待服务器确认第二次:服务器端向客户端回发一个响应,通知客户端接收了连接请求第三次:客户端再次向服务器端发送确认性息,确认连接
4)网络协议的三要素
IP地址:互联网协议地址,俗称IP。IP地址用来给一个网络中的计算机设备做唯一的编号。IP地址分类:
IPv4:是一个32位的二进制数,通常被分为4个字节,表示成a.b.c.d的形式,例如192.168.65.100.其中a,b,c,d都是0~255之间的十进制整数,那么最多可以表示42亿个
IPv6:由于互联网的蓬勃发展,IP地址的需求量愈来愈大,但是网络地址资源有限,是的IP的分配越发紧张。为了扩大地址空间,拟通过IPv6重新定义地址空间,采用128位地址长度,每16个字节一组,分成8组十六进制数,表示成ABCD:EF01:2345:6789:ABCD:EF01:2345:6789,号称可以为全世界的每一粒沙子编上一个网址 端口号:是一个逻辑端口,我们无法直接看到,可以使用一些软件查看端口号。 当我们使用网络软件一打开,那么操作系统就会为网络软件分配一个随机的端口号,或者网络软件在打开的时候和系统要指定的端口号,端口号是由两个字节组成,取值范围在0~65535之间
5)TCP通信协议
Socket类:该类实现客户端套接字,套接字指的是两台设备之间通讯的端点。
实现步骤:
1.创建一个客户端对象Socket,构造方法绑定服务器的IP地址和端口号2.使用Socket对象中的方法getOutputStream()获取网络字节输出流OutputStream对象3.使用网络字节输出流OutputStream对象中的方法write,给服务器发送数据4.使用Socket对象中的方法getInputStream()获取网络字节输入流InputStream对象5.使用网络字节输入流InputStream对象中的方法read,读取服务器回写的数据6.释放资源(Socket)
ServerSocket:此类实现服务器套接字
服务器的实现步骤:
1.创建服务器ServerSocket对象和系统要指定的端口号2.使用ServerSocket对象中的方法accept,获取到请求的客户端对象Socket3.使用Socket对象中的方法getInputStream()获取网络字节输入流InputStream对象4.使用网络字节输入流InputStream对象中的方法read,读取客户端发送的数据5.使用Socket对象中的方法getOutputStream()获取网络字节输入流OutputStream对象6.使用网络字节输出流OutputStream对象中的方法write,给客户端回写数据7.释放资源(Socket,ServerSocket)
7.IO
1)字节输出流
概念:OutputStream:此抽象类是表示输出字节流的所有类的超类子类共性的成员方法:
public void close():关闭此输入流并释放此流相关联的任何系统资源public void flush():刷新此输入流并强制任何缓冲的输出字节被写出public void write(byte[] b):将b.length字节从指定的字节数组写入此输出流public void write(byte[] b,int off,int len):从指定的字节数组写入len字节,从偏移量off开始输出到此输出流public abstract void write(int b):将指定的字节输出流 FileOutputStream(文件字节输出流):把内存中的数据写入到硬盘的文件中
构造方法:
FileOutputStream(String name)创建一个向具有指定名称的文件中写入数据的输出文件流FileOutputStream(File file)创建一个向指定FIle对象表示的文件中写入数据的文件输出流 构造方法的作用:
创建一个FileOutputStream对象会根据构造方法中传递的文件/文件路径,创建一个空的文件会把FileOutputStream对象指向创建好的文件 字节输出流写入数据到文件
字节输出流的使用步骤:
创建一个FileOutputStream对象,构造方法中传递写入数据的目的地调用FileOutputStream对象中的方法write,把数据写入到文件中释放资源
2)字节输入流
子类共性的方法:
int read()从输入流中读取数据的下一个字节int read(byte[] b)从输入流中读取一定数量的字节,并将其储存在缓冲区数组b中void close()关闭此输入流并释放与该流关联的所有系统资源 FileInputStream:文件字节输入流
作用:把硬盘文件中的数据,读取到内存中使用构造方法:
FileInputStream(String name)FileInputStream(File file) 构造方法的作用
会创建一个FileInputStream对象会把FileInputStream对象指定构造方法中要读取的文件 读取字节数据
原理:
Java程序——>JVM——>OS(操作系统)——>OS读取数据的方法——>读取文件 字节输入流的使用步骤:
创建FileInputStream对象,构造方法中绑定要读取的数据源使用FileInputStream对象中的方法read,读取文件释放资源 字节输入流一次读入多个字节的方法:
int read(byte[] b)从输入流中读取一定数量的字节,并将其存储在缓冲区数组b中
String类的构造方法:
String(byte[] bytes):把字节数组转换为字符串String(byte[] bytes,int offset,int length)把字节数组的一部分转换为字符串 offset:数组的开始索引 length:转换的字节个数
3)字符输入流
Reader:字符输入流,是字符输入流的最顶层父类,定义了一些共性的成员方法,是一个抽象共性的成员方法:
int read() 读取单个字符并返回int read(char[] cbuf) 一次读取多个字符,将字符读入数组void close() 关闭该流并释放与之关联的所有资源 FileReader(文件字符输入流):把硬盘文件中的数据以字符的方式读取到内存中
构造方法:
FileReader(String fileName):文件的路径File file:一个文件 FileReader构造方法的作用:
创建一个FileReader对象会把FileReader对象指向要读取的文件 字符输入流的使用步骤:
创建FileReader对象,构造方法中绑定要读取的数据源使用FileReader对象中的方法read读取文件释放资源
4)字符输出流
共性的成员方法:
void write(int c) 写入单个字符void write(char[] cbuf) 写入字符数组abstract void write(char[] cbuf,int off,int len) 写入字符数组的某一部分,off数组的开始索引,len写的字符个数void write(String str)写入字符串void write(String str,int off,int len) 写入字符串的某一部分,off字符串的开始索引,len写的字符个数void flush() 刷新该流的缓冲void close() 关闭该流,但要先刷新它 FileWriter:文件字符输出流
作用:把内存中字符数据写入到文件中构造方法:
FileWriter(File file) 根据给定的FIle对象构造一个FileWriter对象FileWriter(String fileName) 根据给定的文件名构造一个FIleWriter对象 构造方法的作用:
会创建一个FIleWriter对象会根据构造方法中传递的文件/文件的路径,创建文件会把FileWriter对象指向创建好的文件 字符输出流的使用步骤:
创建FileWriter对象,构造方法中绑定要写入数据的目的地使用FileWriter中的方法write,把数据写入到内存缓冲区(字符转换为字节的过程)使用FileWriter中的方法flush,把内存缓冲区中的数据,刷新到文件中释放资源(会先把内存缓冲区中的数据刷新到文件中) 续写和换行
续写/追加写:使用两个参数的构造方法
FileWriter(String fileName,boolean append)FileWriter(File file,boolean append)
5)字节缓冲输出流
继承自父类的共性成员方法:
public void close():关闭此输出流并释放于此流相关联的任何系统文件public void flush():刷新此输出流并强制任何缓冲的输出字节被写出public viod write(byte[] b):将b.length字节从指定的字节数组写入此输出流public void write(byte[] b,int off,int len):从指定的字节数组写入len字节,从偏移量off开始输出到此输出流public abstract void write(int b):将指定的字节输出流 构造方法:
BufferedOutStream(OutputStream out) 创建一个新的缓冲输出流,以将数据写入指定的底层输出流BufferedOutStream(OutputStream out,int size) 创建一个新的缓冲输出流,以将具有指定缓冲区大小的数据写入指定的底层输出流 使用步骤:
创建FileOutputStream对象,构造方法中绑定要输出的目的地创建BufferedOutputStream对象,构造方法中传递FileOutputStream对象,提高FileOutputStream对象效率使用BufferedOutputStream对象中的方法write,把数据写入到内部缓冲区中使用BufferedOutputStream对象中的方法flush,把内部缓冲区中的数据,刷新到文件中释放资源(会优先调用flush方法刷新数据,第四步可以省略)
6)字节缓冲输入流
继承自父类的成员方法:
int read() 从输入流中读取数据的下一个字节int read(byte[] b) 从输入流中读取一定数量的字节,并将其存储在缓冲区数组b中void close() 关闭此输入流并释放与该流关联的所以系统资源 构造方法:
BufferedInputStream(InputStream in)创建一个BuffereInputStream并保存其参数,即输入流in,以便将来使用BufferedInputStream(InputStream in,int size)创建具有指定缓冲区大小的BufferedInputStream并保存其参数,即输入流 使用步骤:
创建FileInputStream对象,构造方法在绑定要读取的数据源创建BufferedInputStream对象,构造方法中传递FileInputStream对象,提高FileInputStream对象的读取效率使用BufferedInputStream对象中的方法read,读取文件释放资源
7)字符缓冲输出流
继承自父类的共性成员方法:
void write(int c) 写入单个字符void write(char[] cbuf) 写入字符数组abstract void write(char[] cbuf,int off,int len) 写入字符数组的莫一部分,off数组的开始索引,len写的字符个数void write(String str) 写入字符串void write(String str,int off,int len) 写入字符串的某一部分,off字符串的开始索引,len写的字符个数void flush 刷新该流的缓冲void close() 关闭此流,但要先刷新它 构造方法:
BufferedWriter(writer out) 创建一个使用默认大小输出缓冲区的缓冲字符输出流BufferedWriter(writer out,int sz) 创建一个使用给定大小输出缓冲区的新缓冲字符输出流 特有的成员方法:void newLine() 写入一个行分隔符,会根据不同的操作系统,获取不同的行分隔符使用步骤:
创建字符缓冲输出流对象,构造方法中传递字符输出流调用字符缓冲输出流中的方法write,把数据写入到内存缓冲区调用字符缓冲输出流中的方法flush,把内存缓冲区中的数据刷新到文件中
8)字符缓冲输入流
继承自父类的共性成员方法:
int read() 读取单个字符并返回int read(char[] cbuf) 一次读取多个字符,将字符读入数据void close() 关闭该流并释放与之关联的所有资源 构造方法:
BufferedReader(Reader in) 创建一个使用默认大小输入缓冲区的缓冲字符输入流BufferedReader(Reader in,int sz) 创建一个使用指定大小输入缓冲区的缓冲字符输入流 特有方法:String readLine() 读取一个文本行,读取一行数据使用步骤:
创建字符缓冲输入流对象,构造方法中传递字符输入流使用字符缓冲输入流对象中的方法read/readline读取文本释放资源
8.反射与注解
1)概述:将类的各个组成部分封装为其他对象,这就是反射机制
2)好处:
可以在程序运行过程中,操作这些对象。可以解耦,提高程序的可扩展性。
3)获取Class对象的方式:
Class.forName(“全类名”):将字节码文件加载进内存,返回class对象类名.class:通过类名的属性class获取对象.getClass():getClass()方法在Object类中定义着
4)Class对象功能:
获取功能:
获取成员变量们
Field[] getFields()Field getField(String name)Field[] getDeclaredFields()Field getDeclaredField(String name) 获取构造方法们
Constructor<?>[] getConstructors()Constructor getConstructor(类<?>… parameterTypes)Constructor getDeclaredConstructor(类<?>… parameterTypes)Constructor<?>[] getDeclaredConstructors() 获取成员方法们
Method[] getMethods()Method getMethod(String name,类<?>… parameterTypes)Method[] getDeclaredMethods()Method getDeclaredMethod(String name,类<?>… parameterTypes) 获取类名
String getName()
Field:成员变量
设置值
void set(Object obj,Object value) 获取值
get(Object obj) 忽略访问权限修饰符的安全检测
setAccessible(true):暴力反射
Constructor:构造方法
创建对象:
T newInstance(Object…initargs)如果使用空参构造方法创建对象,操作可以简化:Class对象的newInstance方法
Method:方法对象
执行方法:
Object invoke(Object obj,Object… args) 获取方法名称:
String getname:获取方法名