- 博客(57)
- 收藏
- 关注
原创 Filter 过滤器
这里我们讲解Filter的执行流程,从下图可以大致了解到,当客户端发送请求的时候,会经过过滤器,然后才能到我们的servlet,当我们的servlet处理完请求之后,我们的response还是先经过过滤器才能到达我们的客户端,这里我们进行一个代码的演示,看看具体执行流程。首先给出一个图。这里我们通过实现Filter接口,来进行定义过滤器类,通过注解来配置该过滤器拦截的路径。// 对request对象的请求进行处理System.out.println("处理了request请求");
2023-05-02 14:04:58
732
原创 反射课后练习
File构造器:public java.io.File(java.lang.String,java.lang.String)File构造器:private java.io.File(java.lang.String,java.io.File)File构造器:public java.io.File(java.io.File,java.lang.String)File构造器:private java.io.File(java.lang.String,int)* 2.在控制台打印 File类的所有构造器。
2023-04-24 23:10:55
465
原创 类加载过程
JVM在该阶段的主要目的是将字节码从不同的数据源(可能是 class文件、也可能是 jar包,甚至网络)转化为二进制字节流加载到内存中,并将这些静态数据转换成方法区的运行时数据结构,然后生成一个代表这个类的java.lang.Class对象。反射机制是Java实现动态语言的关键,也就是通过反射实现类动态加载。
2023-04-23 17:39:29
534
原创 反射-Class类分析
Class也是类,,因此也继承Object类Class类对象不是new出来的,而是系统创建的对于某个类的Class类对象,在内存中只有一份,因为类只加载一每个类的实例都会记得自己是由哪个Class 实例所生成通过Class可以完整地得到一个类的完整结构,通过一系列APIClass对象是存放在堆的类的字节码二进制数据,是放在方法区的,有的地方称为类的元数据 (包括方法代码,变量名,方法名,访问权限等等)
2023-04-23 11:00:47
454
原创 ExecutorService 线程池详解
经常创建和销毁、使用量特别大的资源,比如并发情况下的线程,对性能影响很大。:提前创建好多个线程,放入线程池中,使用时直接获取,使用完放回池中。可以避免频繁创 建销毁、实现重复利用。类似生活中的公共交通工具。提高响应速度(减少了创建新线程的时间)降低资源消耗(重复利用线程池中线程,不需要每次都创建)便于线程管理(....)
2023-04-21 22:26:15
879
原创 多线程练习
Thread-0取出1000,当前余额:9000。Thread-0取出1000,当前余额:8000。Thread-1取出1000,当前余额:7000。Thread-1取出1000,当前余额:6000。Thread-1取出1000,当前余额:5000。Thread-1取出1000,当前余额:4000。Thread-1取出1000,当前余额:3000。Thread-1取出1000,当前余额:2000。Thread-1取出1000,当前余额:1000。Thread-1取出1000,当前余额:0。
2023-04-21 21:42:19
451
原创 线程同步机制与互斥锁
synchronized(对象) { //得到对象的锁,才能操作同步代码。2、synchronized 还可以放在方法声明中,表示整个方法—为同步方法。//需要被同步代码;//需要被同步的代码。
2023-04-21 16:56:35
673
原创 线程七大状态
线程在Ready状态下等待的时间取决于操作系统的调度算法,一旦被分配到CPU资源,线程就会进入Running状态,并开始执行线程的run()方法。在这个状态下,线程等待一定的时间,或等待其他线程调用notify()或notifyAll()方法,或等待一定条件的发生。等待状态(Waiting):当Java线程需要等待其他线程执行某些操作时,它会进入等待状态。在这个状态下,线程等待某些条件的发生,例如等待其他线程调用notify()或notifyAll()方法,或等待一定时间。
2023-04-21 13:52:49
898
原创 线程基础知识
并发:同一个时刻,多个任务交替执行,造成一种“貌似同时”的错觉,简单的说,单核cpu实现的多任务就是并发。当启动一个进程,进程会启动一个主线程,主线程里面会开启若干子线程,当主线程和所有子线程都结束时,进程结束。并行:同一个时刻,多个任务同时执行。多核cpu可以实现并行。并发和并行可以同时存在。是为完成特定任务、用某种语言编写的一组指令的集合。简单的说:就是我们写的代码。
2023-04-17 23:08:16
453
原创 自定义泛型
基本语法class 类名 <T, R...> { //...表示可以有多个泛型成员注意细节普通成员可以使用泛型(属性、方法)使用泛型的数组,不能初始化静态方法中不能使用类的泛型泛型类的类型,是在创建对象时确定的(因为创建对象时,需要指定确定类型)如果在创建对象时,没有指定类型,默认为Object举例说明//1、Tiger后面泛型,所以我们把Tiger就称为自定义泛型类//2、T,R,M 泛型的标识符,一般是单个大写字母//3、泛型标识符可以有多个·
2023-04-14 11:43:10
193
原创 泛型练习题
1)该类包含:private成员变量 name,sal,birthday,其中 birthday为 MyDate类的对象;* 排序方式:调用ArrayList的sort方法,传入 Comparator对象[使用泛型],先按照name排序,* 5)创建该类的3个对象,并把这些对象放入ArrayList 集合中(ArrayList 需使用泛型来定义),* 3)重写toString方法输出name, sal, birthday。* 有一定难度,比较经典泛型使用案例。====对雇员进行排序====
2023-04-13 22:13:20
148
原创 Java—泛型
泛型又称参数化类型,是Jdk5.0出现的新特性,解决数据类型的安全性问题2)在类声明或实例化时只要指定好需要的具体的类型即可。Java泛型可以保证如果程序在编译时没有发出警告,运行时就不会产生ClassCastException异常。同时,代码更加简洁、健壮泛型的作用是:可以在类声明时通过一个标识表示类中某个属性的类型,或者是某个方法的返回值的类型,或者是参数类型。举例说明/*可以这样理解,上面的 ss 类,相当于class ss{String s;
2023-04-13 17:45:15
474
原创 集合 练习3
(1) HashSet的去重机制: hashCode() + equals(),底层先通过存入对象,进行运算得到一个hash值,通过hash值得到对应的索引,如果发现table索引所在的位置,没有数据,就直接存放,如果有数据,就进行equals比较[遍历比较],如果比较后,不相同,就加入,否则就不加入.解决方法:将 Person 类实现 Comparable 接口,加一个方法就行。
2023-04-12 16:33:34
44
原创 集合 练习2
1) 使用HashMap类实例化一个Map类型的对象m,键(String)和值(int)分别用于存储员工的姓名和工资,存入数据如下:jack—650元;tom—1200元;smith——2900元;3) 为所有员工工资加薪100元;4遍历集合中所有的员工。2) 将jack的工资更改为2600元。5) 遍历集合中所有的工资。
2023-04-12 16:15:03
47
原创 集合 练习1
Car{name='宾利', price=3000000.0}, Car{name='宾利', price=3000000.0}][Car{name='宝马', price=400000.0}, Car{name='宾利', price=3000000.0}](1)封装一个新闻类,包含标题和内容属性,提供get、set方法,重写toString方法,打印对象时只打印标题;(4)在遍历集合过程中,对新闻标题进行处理,超过15字的只保留前15个,然后在后边加“…3.contains:查找元素是否存在。
2023-04-12 15:28:13
523
原创 TreeMap 详解
TreeMap 是 Java 中的一种集合类,它实现了 SortedMap 接口,可以根据键的自然顺序或者自定义顺序对元素进行排序,底层实现采用了红黑树(Red-Black Tree)的数据结构。TreeMap 中的元素是按照键的排序顺序存储的,可以高效地进行查找、插入和删除操作。
2023-04-11 11:43:00
5222
原创 TreeSet源码解读
集合中的元素没有重复集合中的元素不保证插入顺序,而是默认使用元素的自然排序,不过可以自定义排序器jdk8以后,集合中的元素不可以是null集合不是线程安全相对于HashSet, 性能更差TreeSet底层就是TreeMap,维护了一个红黑树底层是在TreeMap的基础上进行封装,所以结构是红黑树;因为是红黑树结构,所以不需要重写hashCode()和equals()方法来保证唯一性;TreeMap有的特性TreeSet都有,还在这个基础上增加了保证元素唯一性的特点。
2023-04-10 17:53:18
55
原创 集合选型规则
先判断存储的类型 (一组对象[单列]或一组键值对[双列])一组对象[单列]:Collection接口允许重复:List增删多:LinkedList [底层维护了一个双向链表]改查多: ArrayList [底层维护Object类型的可变数组]不允许重复:Set。
2023-04-10 15:51:14
488
原创 Map接口实现类——Properties
Properties 类继承自 Hashtable 类并且实现了 Map 接口,也是使用一种键值对的形式来保存数据。他的使用特点和Hashtable类似。Properties 还可以用于从xxx.properties 文件中,加载数据到Properties类对象,并进行读取和修改。说明:工作后 xxx.properties文件通常作为配置文件,这个知识点在IO流举例。
2023-04-10 15:10:38
446
原创 Map 课堂练习
02——Emp{name='华为', sal=19000.0, id=2}04——Emp{name='三星', sal=20000.0, id=4}02——Emp{name='华为', sal=19000.0, id=2}04——Emp{name='三星', sal=20000.0, id=4}
2023-04-10 12:25:13
65
原创 Map 接口实现类——HashTable
存放的元素是键值对:即 K-V。HashTable 的键和值都不能为null,否则会抛出NullPointerException。HashTable 使用方法基本上和HashMap 一样。HashTable 是线程安全的(synchronized),HashMap是线程不安全的。
2023-04-09 14:34:09
355
原创 Map 的六大遍历方式
======第一组:先取出所有的Key,通过Key 取出对应的Value===============第三组:通过EntrySet 来获取 k-v ===============第二组:把所有的values取出===========
2023-04-02 20:51:37
49
原创 Map 接口
{null=abc, 01=华为, 1=小米, 02=苹果, 03=华为, 04=null, 05=null, java.lang.Object@1b6d3586=三星}{null=abc, 01=华为, 1=小米, 02=苹果, 03=华为, 04=null, 05=null}{null=abc, 01=华为, 02=苹果, 03=华为, 04=null, 05=null}注意:不是只用 String类,只要是Object 的子类就行。进程已结束,退出代码0。
2023-04-02 17:41:41
51
原创 Set接口实现类—LinkedHashSet
LinkedHashSet 是HashSet 的子类。LinkedHashSet 底层是一个 LinkedHashMap,内部实现基于哈希表,底层维护了一个 数组 + 双向链表。LinkedHashSet 根据元素的 hashCode 值来决定元素的存储位置,同时使用链表维护元素的次序,这使元素看起来是以插入顺序保存的。LinkedHashSet 不允许添加重复元素。
2023-04-01 19:17:34
138
原创 Set接口实现类—HashSet
Hashset实现了Set接口Hashset实际上是HashMap,看源码可以存放 null 值,但只能有一个Hashset不保证元素是有序的,取决于hash后,再确定索引的结构。(即,不保证存放元素的顺序和取出一致)不能有重复元素/对象。
2023-03-31 20:31:48
63
原创 Set接口和常用方法
和List接口一样,Set接口也是Collection的子接口,因此,常用方法和Collection接口一样。同Collection接口的遍历方式一样,因为Set接口是Collection接口的子接口。
2023-03-26 14:45:52
67
原创 ArrayList和LinkList的比较
以上就是二者分别的特点,二者底层数据结构数组和双向链表相信大家应该清楚其中的区别,那么接下来我们从随机访问开始进行描述,连续内存也会在下面提到。可具体情况真的是这样吗,或者换句话说这样子描述真的准确么,其实不然,本篇文章将会带你仔细探讨二者的区别。3.尾部插入和删除性能可以,其他的头部中间插入删除慢(数组扩容的问题因为次数不多影响不大所以不考虑)LinkedList底层是双向链表,增删快,查找慢。rrayList底层是数组,增删慢,查找快。3.头尾插入删除性能高,中间插入删除性能慢,
2023-03-26 14:03:43
182
原创 ArrayList和LinkList的比较
以上就是二者分别的特点,二者底层数据结构数组和双向链表相信大家应该清楚其中的区别,那么接下来我们从随机访问开始进行描述,连续内存也会在下面提到。可具体情况真的是这样吗,或者换句话说这样子描述真的准确么,其实不然,本篇文章将会带你仔细探讨二者的区别。3.尾部插入和删除性能可以,其他的头部中间插入删除慢(数组扩容的问题因为次数不多影响不大所以不考虑)LinkedList底层是双向链表,增删快,查找慢。rrayList底层是数组,增删慢,查找快。3.头尾插入删除性能高,中间插入删除性能慢,
2023-03-26 14:00:13
162
原创 Vector
Vector底层也是一个对象数组,protected Object[] elementDataVector是线程同步的,即线程安全,因为Vector 类的操作方法带有 synchronized,但效率不高。在开发中,需要线程同步安全时,考虑使用Vector;如果不需要线程安全,推荐使用ArrayList代替Vector。Vector是动态数组实现的List,跟ArrayList一样,其容量能自动增长。Vector适用于快速访问和修改,不适用随机插入和删除。
2023-03-26 10:40:51
41
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人