java
java全路线,持续更新
何仙鸟
永远学习
展开
-
Stream流(Java)
Stream也叫Stream流,是JDK8开始新增的一套API,可以用于操作集合或者数组的数据。Stream流大量的结合了Lambda的语法风格来编程,提供了更加简单的方式操作集合或者数组中的数据,代码更简洁。原创 2024-03-04 23:41:43 · 552 阅读 · 0 评论 -
Map集合的底层原理
第一次添加数据的时候,会生成一个16的数组,然后作为一个Entry对象放在一起,利用键计算哈希值,与底层数组的长度进行某个计算然后放入数组,如果有新元素也要放在老元素的位置,会把新元素挂在老元素的下面,一旦到了12,会把数组扩容成原来的两倍,然后把数据重新算到新的数组里,如果长度超过8&数组长度>=64,会转换成红黑树。HashMap跟HashSet的底层原理是一模一样的,都是基于哈希表实现的,只是Set集合中的元素只要键数据,不要值数据而已。实际上Set集合就是基于Map实现的。原创 2024-03-04 13:08:09 · 222 阅读 · 0 评论 -
集合的并发修改异常问题
使用迭代器遍历集合时,同时在删除集合中的数据,程序就会出现并发修改异常的错误。注意:使用增强for或者lambda也会引起异常的错误并且无法解决。原创 2024-02-25 17:40:18 · 210 阅读 · 0 评论 -
Map集合的遍历方式
常见形式:1.键找值:先获取全部键,然后再遍历键来找值2.键值对:把“键值对”看成一个整体进行遍历3.Lambda。原创 2024-02-27 13:55:53 · 334 阅读 · 0 评论 -
Map集合概述、常用方法
Map是双列集合,格式:{key1=value1,key2=value2,key3=value3,...},一次需要存异地数据作为一个元素,Map集合的每个元素"key=value"称为一个键值对/键值对对象/一个Entry对象,Map集合也被叫做"键值对集合"。Map集合的所有键不允许重复,但是值可以重复,键和值是一一对应的,每一个键只能找到自己对应的值。需要存储一一对应的数据的时候适合使用Map。Map体系:Map体系的特点:Map系列集合的特点都是由键决定的,值只是一个附属品,不做要求。原创 2024-02-25 20:41:46 · 256 阅读 · 0 评论 -
可变参数、Collections类
是一种特殊的形参,定义在方法、构造器的形参列表里。原创 2024-02-24 22:12:27 · 172 阅读 · 0 评论 -
LinkedList应用场景(队列、栈)
入队操作:出队操作:注意:对于栈来说,可以直接使用push()方法入栈,不过push()的源代码还是addFirst(),同样的pop()方法出栈的源代码也是removeFirst():原创 2024-02-22 17:11:10 · 156 阅读 · 0 评论 -
Set集合(Java) 及底层原理
SET<E>是一个接口,添加的元素是无序的:添加数据的顺序和获取出的数据顺序不一致;不重复,无索引。实现类:1.HashSet:无序不重复无索引2.LinkedHashSet:有序不重复无索引3.TreeSet:排序不重复无索引。原创 2024-02-24 00:11:46 · 948 阅读 · 0 评论 -
Java集合1——Collection
单列集合体系Collection:常用的两个接口:List、SetList又分为一些实现类比如ArrayList和LinkedListSet分为一些实现类比如HashSet、TreeSet@Override'}';//1.创建一个集合容器负责存储多个电影对象mm.add(new Movie("电影1",1,"演员1"));mm.add(new Movie("电影2",2,"演员2"));原创 2024-02-22 15:08:50 · 418 阅读 · 0 评论 -
List集合
List系列集合特点:有序、可重复、有索引ArrayList:有序、可重复、有索引LinkedList:有序、可重复、有索引List集合因为支持索引,所以多了很多与索引相关的方法,Collection的功能List也都继承了。原创 2024-02-22 16:52:06 · 220 阅读 · 0 评论 -
Calendar的使用(Java)
Calendar是一个抽象类,不能直接使用,Calendar提供了一个类方法getInstance,用于获取此类型的通用对象。如果不使用Calendar的话,我们需要定义字符串记住这个日期,然后把字符串解析成Date日期对象,通过Date日期对象获取其毫秒值,然后增加一个月的毫秒值,再格式化时间毫秒值得到结果。但是我们用Calendar来解决的话就很简单,Calendar代表的是系统此刻时间对应的日历,通过它可以单独获取、修改时间中的年月日时分秒。直接从需求来理解:将2024年2月16日增加一个月。原创 2024-02-16 18:01:02 · 351 阅读 · 0 评论 -
Date类(Java)、SimpleDateFormat
Date代表的是日期和时间。原创 2024-02-16 11:56:30 · 160 阅读 · 0 评论 -
JDK8新特性:方法引用
进一步简化Lambda表达式。原创 2024-02-18 15:49:31 · 303 阅读 · 0 评论 -
JDK8新增的时间
设计更合理,功能更丰富,使用更方便,都是不可变的对象,修改后会返回新的事件对象不会丢失最开始的时间,线程安全,能精确到毫秒、纳秒。原创 2024-02-16 23:39:27 · 534 阅读 · 0 评论 -
正则表达式(Java)
正则表达式是由一些特定的字符组成,代表一个规则,可以用来检验数据格式是否合法,也可以在一段文本中查找满足要求的内容。原创 2024-02-18 23:27:05 · 740 阅读 · 0 评论 -
异常(Java)
Java无法为全部的问题都提供异常类来代表,如果某种问题想通过异常来表示,就需要自定义异常1.定义一个异常类继承RuntimeException2.重写构造器3.通过 throw new 异常类来创建异常对象并抛出在生成中选择构造函数,一般选择前两个://需求:保存一个合法的年龄try {System.out.println("底层执行成功");System.out.println("底层出现了bug");System.out.println("年龄成功被保存:" + age);原创 2024-02-21 16:10:45 · 415 阅读 · 0 评论 -
BigDecimal的常用API
BigDecimal用于解决浮点型运算时结果出现失真的问题。这里0.2+0.1等于0.3就出现了失真。原创 2024-02-15 22:45:32 · 190 阅读 · 0 评论 -
Arrays类及其API
Arrays是用来操作数组的一个工具类。原创 2024-02-17 16:35:12 · 231 阅读 · 0 评论 -
Math、System、Runtime类的方法使用
代表数学,是一个工具类,里面提供的都是对数据进行操作的一些静态方法。abs():获取参数绝对值ceil():向上取整floor():向下取整round():四舍五入max():获取两个整型值中的较大值pow(double a, double b):返回a的b次幂的值random():返回值为double的随机值,范围[0.0,1.0)原创 2024-02-15 14:06:43 · 288 阅读 · 0 评论 -
Lambda表达式
Lambda表达式是jdk8开始新增的一种语法形式;作用:用于简化匿名内部类的代码写法格式:(被重写方法的形参列表)->{被重写方法的方法体代码注意:大部分函数式接口上面都可能会有一个@Functionallnterface的注解,有该注解的接口就一定是函数式接口。原创 2024-02-17 17:51:20 · 442 阅读 · 0 评论 -
StringBuilder
StringBuilder代表可变字符串,相当于一个容器,里面的字符串可以改变,用来操作字符串。用法与StringBuilder一模一样,但StringBuilder是线程不安全的,StringBuffer是线程安全的。相关案例:设计一个方法返回任意整型数组的内容,要求返回的数组内容格式如[1,2,3]6. toString():转换成String类型。5. substring():截取一段字符串。3. length():返回字符串长度。1. append():拼接方法。4. reverse():反转。原创 2024-02-15 11:59:40 · 290 阅读 · 0 评论 -
泛型(Java)
如下需要的结果类型是String,实际的是obj,那么我们来看看强制类型转换以后会发生什么:报错:类型转换异常,不能把对象直接转换成字符串为了避免这种异常,可以用泛型解决:当我们在ArrayList后面加上<String>以后,可以看到add提示中就是String变量了。原创 2024-02-13 23:57:57 · 499 阅读 · 0 评论 -
toString()、equals()、clone()用法
克隆分两种类型,一种是浅克隆,一种是深克隆,前者是数据一模一样,如果是引用类型拷贝的只是地址,比如字符串的常量池中的地址;后者基本类型的数据直接拷贝,字符串数据拷贝的还是地址,但如果对象中包含的其他对象,比如数组之类的,不会拷贝地址,而是会创建新对象。super去调用父类Objected中的clone方法,同时要注意克隆类对象的话得实现一个Cloneable的接口,这个接口称为一个标记接口,实现了这个规则才拥有clone的能力,实现了这个类才能克隆。克隆的对象会返回Object类型。原创 2024-02-14 12:50:41 · 450 阅读 · 0 评论 -
Objects类、包装类
Objects类是一个工具类,包含static使用程序方法,是一个最终类不能被继承,提供了很多操作对象的静态方法。原创 2024-02-14 15:44:57 · 519 阅读 · 0 评论 -
StringJoiner
JDK8开始有,用来操作字符串,不仅可以提高字符串的操作效率,而且在某些场景使用它操作字符串,代码会更加简洁。toString():返回一个字符串。add():添加数据返回对象本身。length():返回长度。原创 2024-02-15 12:08:35 · 169 阅读 · 0 评论 -
枚举(Java)
枚举是一种特殊的类。格式:修饰符 enum 枚举类名{对象名称1,对象名称2,....;其他成员...原创 2024-02-05 00:57:12 · 237 阅读 · 0 评论 -
内部类(Java)
如果一个类定义在另一个类的内部,那么这个类就是内部类。:成员内部类、静态内部类、局部内部类、匿名内部类。原创 2024-02-02 14:15:44 · 231 阅读 · 0 评论 -
抽象类(Java)、模板方法设计模式
在Java中有abstract关键字,就是抽象的意思,可用来修饰类和成员方法。用abstract来修饰类,那这个类就是抽象类;修饰方法,那这个方法就是抽象方法。1.抽象类中不一定有抽象方法,但只有抽象类是有抽象方法的类2.类该有的成员变量、方法、构造器抽象类都可以有3.抽象类不可以创建对象,只能作为一种特殊的父类,让子类继承并实现4.一个类继承抽象类,必须重写完抽象类的全部抽象方法,否则这个类也必须定义成抽象类。原创 2024-01-30 19:34:23 · 997 阅读 · 0 评论 -
Java--接口、关键字implements
Java提供了一个关键字interface,使用这个关键字可以定义出接口。接口不能创建对象:那么接口不能用来创建对象,那么应该怎么被使用呢?接口是用来被类实现的,实现接口的类称为实现类,关键字implements。实现可以理解为继承,一个类可以实现多个接口,实现类实现多个接口的话,需要重写全部接口的全部抽象方法,否则要定义为抽象类:重写完便不会报错:提示一下直接alt+enter选:就可以快速重写了。顺便说一句,为什么方法重写要用public修饰,自然是父类的public被省略了。原创 2024-01-31 17:30:37 · 370 阅读 · 0 评论 -
常量(Java)
使用了static final修饰的成员变量就被成为常量;不过命名时最好用大写英文单词,多个单词使用下划线连接起来。优点:代码可读性维护性更好。作用是记录系统的配置信息。原创 2024-01-30 14:42:18 · 87 阅读 · 0 评论 -
final关键字
final是最终的意思,修饰类时表示不能被继承,修饰方法时表示不能被重写,修饰变量时表示只能被赋值一次。原创 2024-01-30 14:35:26 · 257 阅读 · 0 评论 -
接口的多继承
2.一个类继承了父类,又同时实现了接口,如果父类和接口中有同名的默认方法,实现类 会优先用父类的。接口的多继承的好处:假如有一个实现类要继承三个接口,现在只需要将多个接口“合并”为一个接口,就可以便于实现类实现。接口的多继承也就是一个接口可以同时继承多个接口,也是使用extends关键字实现。注意:1.如果一个接口或者类继承了两个拥有同样名字的方法的接口,会报错。原创 2024-01-31 22:01:58 · 278 阅读 · 0 评论 -
多态、多态的特点、类型转换(Java)
多态是在继承/实现情况下的一种现象,表现为:对象多态、行为多态。对象多态就比如水果可以是苹果也可以是西瓜。行为多态如何分辨呢,编译的时候会看People类中是否有run方法,运行的时候看Teacher中或者Student中的run方法。:有继承/实现关系;存在父类引用子类对象;存在方法重写。:多态是对象、行为的多态,Java中的属性(成员变量)不谈多态。:在多态形式下,右边对象是解耦合的,更便于拓展和维护。并且定义方法时,使用父类类型的形参,可以接收一切子类对象,拓展性更强。原创 2024-01-30 00:12:55 · 209 阅读 · 0 评论 -
JDK8新增的接口方法
私有方法也是对象的方法,但直接用实现类对象使用不了,可以通过在默认方法里面访问私有方法。新增了这三种方法,意味着接口的功能增强,更易于拓展和维护。原创 2024-01-31 21:32:44 · 222 阅读 · 0 评论 -
子类访问成员的特点、super关键字
在子类方法中访问其他成员(成员变量、成员方法),是依照的。例如:这样会输出子类名字但是如果在方法中再加一个名字:这样再执行这个成员方法就会输出局部名称同时要记住当局部变量和成员变量冲突的时候可以加this:这样还是会打印子类名字。原创 2024-01-29 13:48:18 · 527 阅读 · 0 评论 -
使用this调用兄弟构造器
在任意类的构造器中,都可以通过this(...)去调用该类的其他构造器。这样可以复用兄弟构造器的代码。原创 2024-01-29 22:48:50 · 155 阅读 · 0 评论 -
子类构造器的特点
原理:在每个子类构造器的第一行都会隐藏super();的代码,写不写都默认存在,这个就是用来调用父类无参构造器的。说明在创建子类对象调用自己无参数构造器的时候,会先调用父类的无参数构造器然后再执行自己的。子类的全部构造器,都会先调用父类的构造器,再执行自己。子类的有参构造器会先调用父类的无参构造器。这样子类的全部构造器就不会报错了。原创 2024-01-29 22:34:10 · 168 阅读 · 0 评论 -
权限修饰符、单继承、Object类
1.private:只能在本类中访问2.缺省:可以在同一个包下的其他类里访问3.protected:可以在任意包下的子类里访问4.public:可以在任意包下的任意类里访问。原创 2024-01-28 15:26:44 · 380 阅读 · 0 评论 -
继承基本介绍
继承的特点:子类可以继承父类的非私有成员;子类的对象由子类、父类共同完成。使用继承可以减少重复代码的编写。原创 2024-01-28 14:38:51 · 167 阅读 · 0 评论 -
单例设计模式
设计模式也就是一个问题的最优解,要搞清楚设计模式解决什么问题和怎么写。单例设计模式可以确保一个类只有一个对象。1.把类的构造器私有2.定义一个类变量记住类的一个对象3.定义一个类方法,返回对象。原创 2024-01-28 00:09:37 · 455 阅读 · 0 评论