
Java
文章平均质量分 93
奥耶可乐冰
这个作者很懒,什么都没留下…
展开
-
【开发框架和中间件】
Spring是一种轻量级框架,旨在提高开发人员的开发效率以及系统的可维护性。我们一般说的Spring框架就是Spring Framework,它是很多模块的集合,使用这些模块可以很方便地协助我们进行开发。这些模块是核心容器、数据访问/集成、Web、AOP(面向切面编程)、工具、消息和测试模块。比如Core Container中的Core组件是Spring所有组件的核心,Beans组件和Context组件是实现IOC和DI的基础,AOP组件用来实现面向切面编程。原创 2023-12-29 12:00:00 · 1055 阅读 · 0 评论 -
[JVM 基础 - Java 类加载机制]
通常情况下,我们都是直接使用系统类加载器。但是,有的时候,我们也需要自定义类加载器。比如应用是通过网络来传输 Java 类的字节码,为保证安全性,这些字节码经过了加密处理,这时系统类加载器就无法对其进行加载,这样则需要自定义类加载器来实现。自定义类加载器一般都是继承自 ClassLoader 类,从上面对 loadClass 方法来分析来看,我们只需要重写 findClass 方法即可。try {原创 2023-12-09 22:17:08 · 1185 阅读 · 0 评论 -
【Collection - PriorityQueue源码解析】
优先队列的作用是能保证每次取出的元素都是队列中权值最小的(Java的优先队列每次取最小元素,C++的优先队列每次取最大元素)。这里牵涉到了大小关系,元素大小的评判可以通过元素本身的自然顺序(),也可以通过构造时传入的比较器Comparator,类似于C++的仿函数)。Java中实现了Queue接口,不允许放入null元素;其通过堆实现,具体说是通过完全二叉树()实现的小顶堆。原创 2023-12-05 13:18:40 · 1079 阅读 · 0 评论 -
【Collection - Stack & Queue 源码解析】
Deque是"double ended queue", 表示双向的队列,英文读作"deck". Deque 继承自 Queue接口,除了支持Queue的方法之外,还支持insert, remove和examine操作,由于Deque是双向的,所以可以对队列的头和尾都进行操作,它同时也支持两组格式,一组是抛出异常的实现;另外一组是返回值的实现(没有则返回null)。原创 2023-12-04 16:41:04 · 1052 阅读 · 0 评论 -
【Collection - LinkedList源码解析】
LinkedList同时实现了List接口和Deque接口,也就是说它既可以看作一个顺序容器,又可以看作一个队列(Queue),同时又可以看作一个栈(Stack这样看来,LinkedList简直就是个全能冠军。当你需要使用栈或者队列时,可以考虑使用LinkedList,一方面是因为Java官方已经声明不建议使用Stack类,更遗憾的是,Java里根本没有一个叫做Queue的类(它是个接口名字)。关于栈或队列,现在的首选是ArrayDeque,它有着比。转载 2023-12-03 13:38:39 · 980 阅读 · 1 评论 -
【Collection - ArrayList 源码解析】
ArrayList实现了List接口,是顺序容器,即元素存放的数据与放进去的顺序相同,允许放入null元素,底层通过数组实现。除该类未实现同步外,其余跟Vector大致相同。每个ArrayList都有一个容量(capacity),表示底层数组的实际大小,容器内存储元素的个数不能多于当前容量。当向容器中添加元素时,如果容量不足,容器会自动增大底层数组的大小。前面已经提过,Java泛型只是编译器提供的语法糖,所以这里的数组是一个Object数组,以便能够容纳任何类型的对象。原创 2023-12-02 11:08:45 · 976 阅读 · 0 评论 -
【Java——SPI机制详解】
SPI(Service Provider Interface),是JDK内置的一种服务提供发现机制,可以用来启用框架扩展和替换组件,主要是被框架的开发人员使用,比如java.sql.Driver接口,其他不同厂商可以针对同一接口做出不同的实现,MySQL和PostgreSQL都有不同的实现提供给用户,而Java的SPI机制可以为某个接口寻找服务实现。Java中SPI机制主要思想是将装配的控制权移到程序之外,在模块化设计中这个机制尤其重要,其核心思想就是解耦。原创 2023-12-01 16:52:09 · 1031 阅读 · 1 评论 -
【Java——反射机制详解】
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。Java反射机制在框架设计中极为广泛,需要深入理解。原创 2023-11-30 16:43:59 · 1077 阅读 · 0 评论 -
【Java ——异常机制详解】
super(msg);// ...try、catch和finally都不能单独使用,只能是try-catch、try-finally或者try-catch-finally。try语句块监控代码,出现异常就停止执行下面的代码,然后将异常移交给catch语句块来处理。finally语句块中的代码一定会被执行,常用于回收资源。throws:声明一个异常,告知方法调用者。throw :抛出一个异常,至于该异常被捕获还是继续抛出都与它无关。Java编程思想一书中,对异常的总结。原创 2023-11-30 16:22:25 · 910 阅读 · 0 评论 -
【Java 基础 - 注解机制详细解释】
定义自己的注解使用注解@Override用反射接口获取注解信息try {// 获取所有methods// 遍历// 方法上是否有MyMethodAnnotation注解try {// 获取并遍历方法上的所有注解// 获取MyMethodAnnotation对象信息测试的输出最为常见的就是使用Spring AOP切面实现统一的操作日志管理,我这里找了一个开源项目中的例子(只展示主要代码),给你展示下如何通过注解实现解耦的。原创 2023-11-29 14:25:12 · 868 阅读 · 0 评论 -
【Java 基础 - 泛型机制详细解释】
因为类型检查就是编译时完成的,new ArrayList()只是在内存中开辟了一个存储空间,可以存储任何类型对象,而真正涉及类型检查的是它的引用,因为我们是使用它引用list1来调用它的方法,比如说调用add方法,所以list1引用能完成泛型类型的检查。在上面的程序中,使用add方法添加一个整型,在IDE中,直接会报错,说明这就是在编译之前的检查,因为如果是在编译之后检查,类型擦除后,原始类型为Object,是应该允许任意引用类型添加的。我们使用了泛型,到头来,还是要自己强转,违背了泛型设计的初衷。原创 2023-11-29 14:09:21 · 1112 阅读 · 0 评论 -
[Java 基础 - 知识点]
只在集合中添加一个对象,但是因为 EqualExample 没有实现 hasCode() 方法,因此这两个对象的散列值是不同的,最终导致集合添加了两个等价的对象。因此在方法中改变指针引用的对象,那么这两个指针此时指向的是完全不同的对象,一方改变其所指向对象的内容对另一方没有影响。例如在作为网络连接参数的情况下如果 String 是可变的,那么在网络连接过程中,String 被改变,改变 String 对象的那一方以为现在连接的是其它主机,而实际情况却不一定是。原创 2023-11-28 18:03:11 · 1279 阅读 · 0 评论 -
【Java基础 - 面向对象】
下面的代码中,乐器类(Instrument)有两个子类: Wind 和 Percussion,它们都覆盖了父类的 play() 方法,并且在 main() 方法中使用父类 Instrument 来引用 Wind 和 Percussion 对象。表示不同类对象之间有关联,这是一种静态关系,与运行过程的状态无关,在最开始就可以确定。比如学生和学校就是一种关联关系,一个学校可以有很多学生,但是一个学生只属于一个学校,因此这是一种多对一的关系,在运行开始之前就可以确定。比如公司和部门,公司没了部门就不存在了。原创 2023-11-28 17:44:34 · 971 阅读 · 0 评论