java高级笔记汇总

发布时间 2023-12-11 15:53:01作者: "贼*.猫"贼*.帅`

一、理论知识背诵汇总篇

1、Java常用类

  1. System类
  2. Date类(日期类)
  3. DateFormat类(日期格式化类)
  4. SimpleDateFormat类
  5. Math类
  6. Random类
  7. BigInteger(大整数)类
  8. BigDecimal(大小数)类
  9. Timer定时器

2、枚举(将类的对象固定下来)

只能使用它的对象,而不能增加和修改枚举的属性

3、单例模式

一个类中只允许产生唯一的一个对象

3.1 实现步骤:

  1. 定义一个属性,保存当前类的静态对象(单例对象)
  2. 将构造方法私有
  3. 创建一个静态get()方法返回这个单例对象
    (1)懒汉模式:创建实例的过程在get()方法中
  • 优点:使用的时候才创建实例,避免内存浪费
  • 缺点:线程不安全,无法保证绝对的单例
    (2)饿汉模式:直接在属性中实例化,类加载的时候单例对象就准备好了
  • 优点:线程安全,执行效率高
  • 缺点:不需要的时候也会创建实例,会导致内存浪费
    image

4、字符串

4.1 包装类

装箱:将基本数据类型转换为包装类型
拆箱:包装类转基本数据类型
基本类型->包装类型:

  • byte -> Byte
  • short -> Short
  • int- > Integer
  • long -> Long
  • float -> Float
  • double -> Double
  • char -> Character
  • boolean -> Boolean

4.2 正则表达式

image
image
image

4.3 StringBuffered和StringBuilder

image
image

5、集合框架

1、集合和数组的区别:

  • 集合存放对象,数组存放基本类型数据
  • 集合数据可以是不同类,数组数据是同类型
  • 集合可修改,数组不可修改

2、List、Set、Map区别

(1)List集合:有序可重复

  • ArrayList:
    • 读取快,增删慢;
    • 线程不安全;
    • 初始大小是10,扩充时扩充50%
  • LinkedList
    • 读取慢,增删快;
    • 线程不安全;
    • 没有扩容机制,使用首尾添加操作addFirst()和addLast()
  • Vector

(2)Set集合:无序不重复

  • HashSet:散列存放,无序
  • TreeSet:有序存放,自然排序

hashCode:散列码是由对象导出的一个整型值。散列码是没有规律的。类的hashCode()方法继承自Object类,因此每个对象都有一个默认的散列码,他的值为对象的存储地址(由对象的物理存储地址通过散列转换来的)

HashSet原理
存对象时,首先取得hashCode值与hash表的值比较;如果不存在则可以存入集合并把hashCode存入hash表中;
否则通过“==”和equals()方法判断跟集合中的对象是否为同一对象,都为false才能添加成功。

TreeSet原理
存放时调用CompareTo()方法,根据返回值比较元素大小,然后进行“升序”排列。

(3)Map集合:以键值对形式存储数据

  1. HashMap、HashTable、TreeMap的区别:
  • HashMap:
    • 线程不安全;
    • 无序;
    • 允许Key出现一次null,Value允许null;
  • HashTable:
    • 线程安全;
    • 无序;
    • Key和Value都不允许null;
  • TreeMap:
    • 线程不安全;
    • 自然升序;
    • Key不允许null,Value允许null;

3、Iterator迭代器

迭代器:不管索引和类型都能够将类型遍历出

迭代器实现步骤:

  • 使用iterator()方法要求容器返回一个Iterator
  • 调用next()从第一个往后获取序列的元素
  • 使用hasNext()检查是否还有元素
  • 使用remove()方法将迭代器新返回的元素删除

泛型:定义那些还不明确的参数类型

6、IO流

image
image
image

7、数据库操作

1、查询:

select * from stu;

2、增加:

insert into stu(id,name,age,sex) Values(1003,”王五”,13,”女”);

3、删除:

delete from stu where name=”李四”;

4、更新/修改:

update stu set name=”张三” where id=1001;

5、模糊查询:

select * from stu where name like ‘%李%’

6、分组查询:

select * from stu group by age;(按年龄分组)

7、集合函数:常与group by一起使用

  • count():统计记录数
  • sum():求和
  • avg():平均值
  • max():最大值
  • min():最小值

8、连接查询

  • 内连接:inner join
    Select * from stu inner join class On stu.class.id=class.id;
  • 左外连接:left join
    Select * from stu Left join class On stu.class.id=class.id;
  • 右外连接:right join
    Select * from stu Right join class On stu.class.id=class.id;

8、JDBC连接数据库

连接数据库

  • 加载JDBC驱动
  • 连接数据库,传入连接地址、用户名、密码
  • 关闭连接资源

9、Web开发和服务器(Tomcat服务器)

1、Tomcat服务器:

将项目部署到Tomcat中,启动项目,用户就可以访问了。

2、部署项目:

要将java项目装成war包拷贝到webapps中即可

10、Servlet技术

1、作用:

使用Servlet,可以收集来自网页的用户输入,呈现来自数据库或者其他源的纪录,还可以动态创建网页。

2、一个类继承HttpServlet就成了一个Servlet

3、Servlet主要任务:

  • 读取客户端发送到后台的数据
  • 处理数据并生成结果。这个过程可能访问数据库,也可以直接计算得出对应的响应
  • 发送响应数据到客户端

4、Cookie:

定义:由服务端产生,再发送给客户端保存的一组数据
作用:客户端访问服务端,第一次访问结束后,就会产生一个Cookie,把这个Cookie保留到客户端,下次可以直接访问

5、Session:

定义:由服务端产生的一组数据用于会话跟踪,保存在服务端

6、Cookie和Session比较

  1. 存储位置不同:
  • Cookie的数据信息存放在客户端浏览器上;
  • Session的数据信息存放在服务器上。
  1. 存储容量不同:
  • 单个Cookie保存数据<=4KB;
  • Session没有上限。
  1. 存储方式不同:
  • Cookie只能保管ASCII字符串;
  • Session可存储任何数据。
  1. 隐私策略不同:
  • Cookie对客户端可见,不安全;
  • Session存储在服务器上,不存在敏感信息泄露风险。
  1. 生命周期不同:
  • Cookie在设置的有效期内,无论是否关闭窗口都依然存在;
  • Session关闭窗口就会失效。

7、请求转发和重定向:

定义

请求转发: servlet将客户端请求直接交给另一个servlet或某个页面
重定向: servlet设置客户端重新发送一个新请求到另一个servlet或某个页面

请求转发和重定向的区别

  • 请求转发是一次请求,重定向是两次请求
  • 请求转发可以共享请求参数,重定向之后就获取不了共享参数了

11、JSP技术(动态网页开发技术)

1、jsp通过网页表单获取用户输入数据、访问数据库或其他数据源,然后动态地创建网页

2、Servlet与Jsp的区别:

  • Servlet:在java代码中嵌套html
  • Jsp:在html中嵌套java代码(本质上是servlet)

3、JSP语法结构:

三种形式结构:

  • JSP脚本:<%java 代码%>
    编写具体业务逻辑,也可以定义局部变量或调用方法,但不能定义方法
  • JSP声明:<!java 代码>
    声明全局变量或方法
  • JSP表达式:<%=java 变量或表达式%>
    将已经声明的变量或表达式输出到网页上

4、JSP指令:设置与整个JSP页面相关的属性

  • <%@page...%>:定义页面的依赖属性(引入java类...),写在jsp开头
  • <%@include... %>:包含其他文件,一般是其他前端页面
  • <%@taglib...%>:引入标签库的定义,可以使自定义标签

5、JSP四大作用域

  • Page(页面作用域):代表当前网页,只在当前页面有效
  • request(请求作用域):在当前请求中有效
  • session(会话作用域):在当前会话中有效,浏览器关闭则失效
  • application(应用程序作用域):在服务器开启期间都有效
    除page外,其他对象都可以通过setAttribute赋值和getAttribute取值。

6、EL表达式:获取作用域中的数据(取值)

语法:${作用域名+Scope.数据的属性名}

例:${requestScope.name}——request中的数据

7、JSTL标准标签库:对集合进行遍历

核心标签库:

  1. <c:if>:和if语句一样
  2. <c:forEach>:基础迭代标签
  3. <c:choose>:相当于if
  4. <c:when>:条件
  5. <c:otherwise>:相当于else

12、多线程

1、并发执行和并行执行:

  • 并发执行:多个进程使用同一个CPU,每个进程独占CPU一会,然后让出CPU资源,给其他进程使用
  • 并行执行:多个进程,在同一时刻,每个进程都有一个CPU进行运算

2、进程和线程

  • 进程:程序的一次动态执行过程
  • 线程:是CPU调度和分派的基本单位,可与同一个进程的其他线程共享资源

进程和线程的关系:

  1. 进程的产生,肯定会产生至少一个线程
  2. 进程关闭,该进程内所有线程全部销毁
  3. 线程销毁,进程未必会关闭

3、多线程:一个进程内的多个任务并发执行

多线程的实现

  1. 继承Thread类,重写run()方法
  2. 实现Runnable接口,实现run()方法

4、线程同步(同步指协同、协助、互相配合):

定义:当有一个线程对内存进行操作时,其他线程都不可以对这个内存地址进行操作,直到该线程完成操作

5、用synchronize给对象加互斥锁的两种实现方式:

  1. 给代码块加锁(锁定对象)
  2. 给方法加锁(锁定方法实现的过程)

6、线程死锁:不同的线程都在等待那些根本不可能被释放的锁

避免死锁技巧:保证每个线程都按照同样的顺序去访问资源

13、网络编程

1、socket(套接字)使用TCP提供了两台计算机的通信机制。

当连接建立时,服务器会创建一个socket对象。客户端和服务器可以通过socket对象的写入和读取进行通信

2、socket通信三种模式:

  1. 流式套接字:提供一个面向连接,可靠的数据传输服务,数据无差错,无重复发送,且按发送顺序接收(TCP:传输数据前要先建立连接)
  2. 数据报式套接字:面向无连接,数据报以独立形式发送,不提供无差错保证,数据可能丢失或重复,接受顺序无序(UDP:不用建立连接)
  3. 原始式套接字:允许对较低层次协议,如IP直接访问

3、IP地址:计算机的唯一标识号

端口号:不同的应用程序通过端口号区分

4、TCP协议(客户端、服务端)的三次握手过程:

  1. 客户端向服务端发出连接请求,等待服务器确认

  2. 服务器向客户端回送一个响应,通知客户端收到了连接请求

  3. 客户端再次向服务器发送连接确认信息,确认连接

5、UDP通信和TCP通信

  1. UDP通信(发送端、接收端)
    DatagramPacket:封装UDP通信中的数据
  2. TCP通信(客户端、服务端)
    ServerSocket类:表示服务器端
    Socket类:表示客户端

6、TCP和UDP的一个主要区别:

UDP只有发送端和接收端,不区分客户端和服务器端,计算机之间可以任意发送数据;
TCP严格区分客户端和服务器端,在通信时,必须先由客户端去连接服务器端才能实现通信,服务器不可以主动连接客户端

14、反射

1、反射:

定义:对于任意一个类,都能够通过对象等信息知道这个类的所有属性和方法

2、相关实现类:

  • Class类:反射的核心类,获取类的属性方法等成员信息
  • Field类:获取和设置类中属性
  • Method类:调用类的方法
  • Constructor类:调用类的构造方法

3、获取类信息的三种方法

  1. 通过对象名获取类信息
  2. 通过类名获取类信息
  3. 通过路径获取类信息
    image

15、垃圾回收机制(回收垃圾对象所占用的内存空间):

  • 调用System类的gc()静态方法:System.gc()
  • 调用Runtime对象的gc()实例方法:Runtime.getRuntime.gc()

二、总体重要笔记汇总篇