
Java
文章平均质量分 87
晚安丶
无远弗届,功不唐捐。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Java动态代理
代理模式是设计模式中非常重要的一种类型,而设计模式又是编程中非常重要的知识点,特别是在业务系统的重构中,更是有举足轻重的地位。代理模式从类型上来说,可以分为静态代理和动态代理两种类型。在开始之前,我们先假设这样一个场景:有一个蛋糕店,它们卖的蛋糕都是用蛋糕机做的,而且不同种类的蛋糕由不同的蛋糕机来做,这样就有:水果蛋糕机、巧克力蛋糕机等。它们卖的面包片也是用面包机做的,同样不同种类的面包片也是由不同的面包机来做,这样就有:葡萄干面包机、红豆面包机等。这个场景用 Java 语言描述就是下面这样://转载 2021-04-02 15:29:00 · 170 阅读 · 0 评论 -
Comparator 与Comparable排序
一、Comparable简介 Comparable是排序接口。若一个类实现了Comparable接口,就意味着该类支持排序。实现了Comparable接口的类的对象的列表或数组可以通过Collections.sort或Arrays.sort进行自动排序。 此外,实现此接口的对象可以用作有序映射中的键或有序集合中的集合,无需指定比较器。该接口定义如下:package java.lang;import java.util.*;public interface Comparable<T原创 2021-04-01 16:33:19 · 224 阅读 · 0 评论 -
HashMap 的实现原理
一、初窥HashMapHashMap是应用更广泛的哈希表实现,而且大部分情况下,都能在常数时间性能的情况下进行put和get操作。要掌握HashMap,主要从如下几点来把握:jdk1.7中底层是由数组(也有叫做“位桶”的)+链表实现;jdk1.8中底层是由数组+链表/红黑树实现 可以存储null键和null值,线程不安全。在HashMap中,null可以作为键,这样的键只有一个,但可以有一个或多个键所对应的值为null。当get()方法返回null值时,即可以表示HashMap中没有该key,也可转载 2021-04-01 16:11:49 · 869 阅读 · 0 评论 -
hashCode与equals
最近去面试了几家公司,被问到hashCode的作用,虽然回答出来了,但是自己还是对hashCode和equals的作用一知半解的,所以决定把它们研究一下。以前写程序一直没有注意hashCode的作用,一般都是覆盖了equals,缺没有覆盖hashCode,现在发现这是埋下了很多潜在的Bug!今天就来说一说hashCode和equals的作用。 先来试想一个场景,如果你想查找一个集合中是否包含某个对象,那么程序应该怎么写呢?通常的做法是逐一取出每个元素与要查找的对象一一比较,当发现两者进...转载 2021-04-01 14:45:55 · 151 阅读 · 0 评论 -
== 和 equals 的区别是什么
== 解读对于基本类型和引用类型 == 的作用效果是不同的,如下所示:基本类型:比较的是值是否相同; 引用类型:比较的是引用是否相同;equals 解读equals 本质上就是 ==,只不过 String 和 Integer 等重写了 equals 方法,把它变成了值比较。看下面的代码就明白了。首先来看默认情况下 equals 比较一个有相同值的对象,代码如下:class Cat { public Cat(String name) { this.name =原创 2021-04-01 14:19:37 · 1785 阅读 · 0 评论 -
字符串常量池和String类的intern()方法
字符串常量池在Java的内存分配中,总共3种常量池,分别是Class常量池、运行时常量池、字符串常量池。字符串的分配和其他对象分配一样,是需要消耗高昂的时间和空间的,而且字符串使用的非常多。JVM为了提高性能和减少内存的开销,在实例化字符串的时候进行了一些优化:使用字符串常量池。每当创建字符串常量时,JVM会首先检查字符串常量池,如果该字符串已经存在常量池中,那么就直接返回常量池中的实例引用。如果字符串不存在常量池中,就会实例化该字符串并且将其放到常量池中。由于String字符串的不可变性,常量池中原创 2021-04-01 13:53:31 · 191 阅读 · 0 评论 -
泛化,实现,依赖,关联(聚合,组合)
UML 中类与类, 类与接口, 接口与接口这间的关系有: 泛化(generalization) 关系, 关联(association)关系( 关联, 聚合, 合成), 依赖(dependency)关系,实现(realization)关系.泛化(generalization)关系是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力,继承是类与类或者接口与接口之间最常见的关系;在Java中此类关系通过关键字extends明确标识,在设计时一般没有争议.转载 2021-04-01 10:54:51 · 1881 阅读 · 0 评论 -
String、StringBuffer和StringBuilder的区别
1 StringString:字符串常量,字符串长度不可变。Java中String是immutable(不可变)的。String类的包含如下定义:/** The value is used for character storage. */private final char value[];/** The offset is the first index of the storage that is used. */private final int offset;/*转载 2021-04-01 10:31:50 · 133 阅读 · 0 评论 -
自动装箱与缓存
目录发现问题看看源码扩展发现问题这个几乎是Java 5引入自动装箱和自动拆箱后,很多人都会遇到来个简单点的例子public static void main(String[] args) { for (int i = 0; i < 150; i++) { Integer a = i; Integer b = i; System.out.println(i + " " + (a == b)); }}i取转载 2021-04-01 10:04:14 · 188 阅读 · 0 评论 -
Java中的自动拆装箱
目录1、基本数据类型基本数据类型有什么好处整型的取值范围超出范围怎么办2、包装类型为什么需要包装类3、拆箱与装箱4、自动拆箱与自动装箱5、自动装箱与自动拆箱的实现原理6、哪些地方会自动拆装箱场景一、将基本数据类型放入集合类场景二、包装类型和基本类型的大小比较场景三、包装类型的运算场景四、三目运算符的使用场景五、函数参数与返回值7、自动拆装箱与缓存8、自动拆装箱带来的问题1、基本数据类型基本类型,或者叫做内置类型,是Java中不同于类转载 2021-04-01 10:05:07 · 612 阅读 · 0 评论 -
IDEA使用笔记——自动生成 serialVersionUID 的设置
设置的时候的注意细节(添加serialVersionUID 的时候,先选中对应的类名,然后按 alt+enter 快捷键)没有强调到位。1:没有设置之前,选中对应的类名,然后按 alt+enter 快捷键的情况如下所示2:设置自动生成serialVersionUID的方式如下图所示,关键点已逐个标识3:设置之后,选中对应的类名,然后按 alt+enter 快捷键的情况如下所...转载 2020-01-20 20:33:06 · 530 阅读 · 0 评论 -
Hibernate JPA注解 @Temporal(TemporalType.DATE) 日期注解
@Temporal标签的作用1、如果在某类中有Date类型的属性,数据库中存储可能是'yyyy-MM-dd hh:MM:ss'要在查询时获得年月日,在该属性上标注@Temporal(TemporalType.DATE) 会得到形如'yyyy-MM-dd' 格式的日期。DATE:等于java.sql.Date日期:@Temporal(TemporalType.DATE)...转载 2020-01-20 20:27:46 · 487 阅读 · 0 评论 -
&与&& |与||的区别
一、与操作和或操作的区别(1)在Java程序中,使用与操作,要求所有表达式的判断结果都是TRUE,才为真,若有一个为FALSE,那么最终判断结果则为FALSE(2)使用或操作,只要其中有一个表达式为TRUE,那么最终的结果就为TRUE,只有当所有的表达式为FALSE时最终结果才为FALSE二、&与&&,|与||的区别(1)&与&&...转载 2019-01-31 21:25:33 · 453 阅读 · 0 评论 -
set classpath的小结
我们知道javac命令在编译的时候查找类是按照classpath的路径去寻找,如果找不到,就在当前路径下寻找,如果还是找不到,就会报错。我们可以使用set classpath来查看我们的路径是什么这其中有三个路径,第一个是‘.’就是当前路径,后两个都是系统类包路径如果我们临时需要设置一个路径,我们可以开启一个命令行窗口使用set classpath = 路径名就修改了。...转载 2019-01-05 11:06:03 · 791 阅读 · 0 评论 -
Java小点梳理
关于命名class SuperClass { public static void main(String[] args) { System.out.println("SuperClass"); }}class SubClass extends SuperClass { public static void main(String[]...原创 2018-12-31 17:13:42 · 181 阅读 · 0 评论 -
Integer与int的种种比较
int和Integer的区别1、Integer是int的包装类,int则是java的一种基本数据类型 2、Integer变量必须实例化后才能使用,而int变量不需要 3、Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int则是直接存储数据值 4、Integer的默认值是null,int的默认值是0拓展:Java里面“==”与eq...原创 2019-01-02 14:46:36 · 267 阅读 · 0 评论 -
关于Java对象作为参数传递是传值还是传引用的问题
前言 在Java中,当对象作为参数传递时,究竟传递的是对象的值,还是对象的引用,这是一个饱受争议的话题。若传的是值,那么函数接收的只是实参的一个副本,函数对形参的操作并不会对实参产生影响;若传的是引用,那么此时对形参的操作则会影响到实参。 首先我们来看一句代码:Object obj = new Object();这句话的意思是:创建一个Object对象,再创建一个名为obj的...转载 2019-01-02 23:44:06 · 290 阅读 · 0 评论 -
Object类的几个方法
equals方法public boolean equals(Object obj),比较当前对象与obj所引用的对象是否相等(对象的相等性);如果要检测两个引用是否指向同一对象(同一性 ),可使用==和!=来比较。Object中equals的缺省实现假定一个对象只与自身相等,故此可以说equals的缺省实现认为相等性和同一性是一样的。class A {int x; public s...原创 2019-01-03 00:48:41 · 833 阅读 · 0 评论 -
域和方法的访问,继承,重写
访问 静态方法和静态域是属于类的,调用的时候直接通过类名.静态域名和类名.静态方法名就行,也可以通过对象引用.静态域和对象引用.静态方法,因为 静态方法和静态域是属于类的,所以即使对象引用为null,也不妨碍对静态域和方法的访问。不过,通过对象引用来操作且出现继承和隐藏的时候,该引用说明类型决定访问的是哪一个类的静态域和静态方法,并非对象的实际类型决定。class A { sta...原创 2019-01-03 01:28:59 · 237 阅读 · 0 评论 -
overload 和 override
overload(重载,过载,名复用) 两个方法可以有同样的名字,但各自有不同的形参数目或类型,因而基调也不同,这样的特性被称为方法的重载,即同一个名字表示多种含义。方法的基调并不包括返回类型或引发异常,所以不能依据这些因素来得到名复用。构造器也能以方法同样的方式进行名复用 。当程序员调用一个方法时,编译器比较实参和形参的数目和类型,以查找可用基调的最佳匹配, 如果两个方法基调相同...原创 2019-01-03 02:03:34 · 539 阅读 · 0 评论 -
关于System.out.println
public class Test { public static void main(String[] args) { int i=3,j=2; System.out.println(i+"*"+j+"="+i*j);//输出:3*2=6 System.out.println(i+"+"+j+"="+i+j);//输出:3+2=...原创 2019-01-03 02:18:37 · 3724 阅读 · 0 评论 -
类的扩展
class P { public int x=1; public void setX(int x) { this.x=x; } public int getX() { return x; }}class Pi extends P{ public int x=2; public int z=3; public void setX(int x) { this.x=x...原创 2019-01-04 23:47:17 · 295 阅读 · 0 评论