
java基础深究
文章平均质量分 79
阿亮_1024
一生所梦,过上优雅从容的中产阶级生活
展开
-
深入探究java中的 xxxable和xxxator
相信有一定工作经验的朋友,都见过或者用过xxxable和xxxator ,比如常见的Comparable和Comparator, 还有还有常见并且容易迷糊的Iterable和Iterator, 看这名字,前两个是和比较相关的, 后两个是和迭代相关. 但是命名如此相似的接口, 又有何区别呢?各自的用途又是什么呢? 今天阿亮带大家一起揭开这神秘的面纱.原创 2023-04-21 12:42:22 · 1002 阅读 · 1 评论 -
java多线程之volatile关键字
在多线程的情况下,如果不做同步,很可能会出现糟糕的情况。但是比这更糟糕的情况是:以为仅仅只对写入进行同步就万事大吉了,以为自己采取了措施,但措施本身就不对,这是更糟糕的情况,因为会造成 措施生效 的错觉,原创 2022-12-11 15:36:38 · 504 阅读 · 0 评论 -
java stream 使用指南-------groupingBy进阶用法
文章目录前言一. 分组 groupingBy基础用法1. 按照某个属性分组2. 分组统计3. 分组求和4. 自定义分组条件------按姓名长度分组5. 自定义分组条件------按照多个字段分组高级用法1. 改变分组后的key和value2. 多级分组3. 我在项目中的使用例子前言刚开始我只会使用普通的for、while循环,最多就增强for循环,后来在项目上看到其他同事在用,看起来很新颖、简洁的样子,然后我也开始尝试使用,用顺手之后发现是真的香。在使用的过程中,有些时候,不能完全实现自己所想的,也没原创 2022-01-25 16:37:06 · 19611 阅读 · 7 评论 -
java 异常捕获,排除某个异常不捕获的解决办法
今天碰到个问题,我在捕获异常时,使用了catch( Exception e),但其中的某个异常,比如NullPointException,我不想捕获,我只想捕获除了NullPointException之外的其他Exception,怎么办呢?java里面有类似cache( Exception not NullPointException e )这样的语法吗?就我所知,是没有的。没有这样的语法,就只能catch(ClassNotFountException | ArrayIndexOutOfBoundsExc原创 2021-11-16 14:46:46 · 5000 阅读 · 2 评论 -
java 接收任何类型的List的参数声明
问题:如文章标题所描述,在方法声明时,声明一个可以接受任何类型List的参数。比如我List<User>能传进来,List<Employee>也能传进来。当时我代码中有这个要求时,我下意识觉得很简单,毕竟我做java开发也一年多了,java这点底子还是有的,然后我写出了如下的方法天真的我以为这就完事了,在调用这个方法的时候才发现有问题这个Student类型的list根本传不进去,这时我才意识到一个Student类型的List是不能用 一个Object类型的List变原创 2021-09-18 22:06:56 · 8517 阅读 · 6 评论 -
java 关于主方法(main方法)可变的地方
假如你还记得你刚入门学习java的时候,那你们老师肯定给你们说过,main方式是程序执行的入口,这个方法你就照着抄,一个字母不要错,一个符号不要错。public static void main(String[] args) { System.out.println("hello word"); }可是即便这样,我们还是可能把少打一个括号,英文符号打成中文,导致编译报错。于是我们一遍又一遍的敲这个主方法,烂熟于心,不再出错。然后我们开始用ide的快捷键,来生成这个主方法原创 2021-09-18 21:25:30 · 684 阅读 · 0 评论 -
Lombok链式调用,子类对象set父类属性,返回父类对象
前言lombok相信大家都用过,没用过肯定也不会点进来,一直用着都很舒服。今但是天在码代码时,碰到了一个问题,卡了半天。问题是这样的:Lombok链式调用父类中的set属性时,返回的居然是一个父类对象,紧靠文字描述,可能比较抽象,代码如下:子类实体父类实体其实就是实体间的继承,把公共的字段抽取出来,具体的实体继承。我这里的JcZyyhzh继承了BaseCompanyIdEntity,BaseCompanyIdEntity其实还继承了BaseIdEntity,因为和我们今天主题扯不上关系,就没贴出原创 2021-09-13 22:33:11 · 9306 阅读 · 3 评论 -
idea这么牛,居然能判断当前环境线程是否安全????
‘StringBuffer stringBuffer’ may be declared as ‘StringBuilder’ less… (Ctrl+F1)Inspection info: Reports any variables declared as java.lang.StringBuffer which may be more efficiently declared as java.lang.StringBuilder. java.lang.StringBuilder is a non-th.原创 2021-08-22 15:41:24 · 2100 阅读 · 2 评论 -
java异常深入理解与提升(含面试题)
前言作为一个java开发者,异常肯定是天天都在使用的,但是很多时候我们对异常的了解、认知都只是停留在表面。好像现在不会多线程、高并发、微服务、性能调优、容器……这些高逼格的东西,都不好意思说自己是java开发,诚然,这些东西是很重要,但是基础、本质的东西一样重要。今天我就“详细、深入”的学习一下java中的异常,包括体系结构、异常处理、自己使用、异常本质、细节等等,吃透这些东西,能让我们更好的理解、学习java,当然,异常相关的面试题也将不在话下。当然,受限于个人水平、认知、经验等等因素,如果发现错误,还原创 2021-03-26 11:16:40 · 1046 阅读 · 0 评论 -
java继承关系中,父类private修饰的内容真的不能被继承吗?NO
前情引入关于java的继承,初学的时候,一直认为父类中private修饰的东西时无法被子类继承。后来随着学习的深入,见得多了一些,看到一些文章博客的另一种观点:其实父类中的东西,除了构造方法之外,其它的全都是可以被继承的,包括私有的。但是由于private修饰的东西,只能在本类中可见。所以即便子类继承了,也是不可见的。我一开始听着很玄乎,什么?我继承了我父亲的遗产,但是我自己却无法使用?这是什么逻辑。反正继承了private修饰的内容,也是看不见的,那和没继承也没啥区别,而且也没法验证子类是不是真的继承原创 2020-07-18 16:56:40 · 19093 阅读 · 37 评论 -
ArrayList的扩容机制,扩容为原容量的1.5倍这种说法严谨吗?
起因最开始学ArrayList的时候,老师也带着我们翻过一下源码,但是那时初学,看了也不知道个啥。只是记了死结论:会进行数组的复制,扩容为原来的1.5倍今天再次温习ArrayList,然后翻到了源码(jdk11),如下: private int newCapacity(int minCapacity) { // overflow-conscious code int oldCapacity = elementData.length; int new原创 2020-07-24 17:39:01 · 7551 阅读 · 10 评论 -
为什么hashCode和equals方法要一起重写?
声明一下,我是针对哈希表在存这个这个类型的元素分析的默认实现首先要明确,hashCode和equals这两个方法Object中的默认实现hashCode方法 @HotSpotIntrinsicCandidate public native int hashCode();Object中,hashCode方法是被native修饰的,说明底层调用了c或c++的内容。其实做的事情是:根据对象实际的物理内存地址,通过某种算法得出一个数值。equals方法 public bo原创 2020-07-23 22:34:39 · 548 阅读 · 0 评论 -
多态中访问变量、实例方法、静态方法的区别
先上结论在多态中,变量和静态方法都是与类相挂钩的,和具体的对象是哪个无关。而实例方法的访问可以通过一条口诀来记忆:编译看左边,运行看右边。结论验证1. 访问变量和静态方法之所以将它们俩归在一起总结,是因为结论很类似,但实际上,静态内容和实例内容差别是很大的。比如 Parent p = new Child(); 如果是通过引用p去方法静态方法或者变量,那么访问的一定是父类中的内容,无论子类中是否存在与父类同名的静态方法或变量。public class Parent{ // 成员变量 publ原创 2020-07-14 23:47:11 · 952 阅读 · 0 评论 -
关于java中编译器自动进行的强制类型转换
关于类型转换一般规律:小类型向大类型可以自动类型转换,而大类型向小类型转换,需要手动的强制类型转换。注意:1.类型的大小不是按字节大小区分的,而是按照它的范围来定的,比如 long long1 = 300F;//报错,编译无法通过 float float1 = 300L;//编译可以通过,并且可以正常运行long占八个字节,float占四个字节,但实际上float表示的范围要比long更大,(这主要是底层采用存储方式不同造成的)所以long类型的常量可以赋值给fl原创 2020-07-08 22:58:12 · 622 阅读 · 3 评论 -
java中如果int类型超出了它的范围
背景引入今天老师上课的时候,写了一个循环语句,看起来就是普通的循环,不信看代码: int count = 0; while(true) { count ++; if (count<20) { System.out.println("hello world"); } }小伙伴们,你们不妨先推测一下,如果运行,控制台的原创 2020-07-11 15:49:41 · 9598 阅读 · 6 评论 -
重载和重写详解
前言我经常喜欢搞清楚一些细节性的东西,如果放在生活中,就是杠精,但是在代码中,就不是了,跑偏了。今天要说的是重载和重写,其实重载和重写是两个完全不同的概念,只是在中文中,这两个名词有点像,所以经常被拿来进行比较。重载或是重写要满足一些条件才能成立,但是这些条件,如果死记硬背,不太好记,而且很容易记混。但是如果我们搞清楚他们之间的他们的本质,或者是为了解决什么问题,那么就不会搞混了,再结合顺口溜,就很容易记住。重载重载相对简单一些,先说重载原理重载是为了解决什么问题呢?其实重载是为了解决同一个类原创 2021-06-27 23:13:23 · 5179 阅读 · 2 评论