
Java基础
文章平均质量分 70
code_java_zqy
这个作者很懒,什么都没留下…
展开
-
StreamAPI
文章目录Stream定义定义流的操作类型stream 管道(pipeline)延迟调用/懒操作:Stream 创建创建空Stream通过集合(Collection)创建 Stream通过数组(Array)创建 Stream通过原子类型创建 Stream通过文件创建 Stream通过Stream静态方法StreamAPIStreams API(I)stream中间方法使用forEach()filter()distinct()sorted()map()flatMap()Streams API(II)reduce原创 2021-06-27 10:11:43 · 937 阅读 · 0 评论 -
lambda表达式的使用
文章目录lambda表达式使用结合集合类使用Collection中的新方法forEach()removeIf()replaceAll()sort()spliterator()stream()和parallelStream()forEach()getOrDefault()putIfAbsent()remove()replace()replaceAll()merge()compute()computeIfAbsent()computeIfPresent()结合StreamAPI使用lambda表达式使用参考原创 2021-06-27 09:54:05 · 548 阅读 · 1 评论 -
Java中Lambda表达式与方法引用
文章目录内部类内部类匿名内部类Lambda表达式:实现函数式接口Lambda 表达式的结函数式接口匹配Lambda表达式Lambda表达式 vs 匿名接口实现Lambda类型推断Lambda参数无参数一个参数多个参数指定参数类型Lambda表达式主体Lambda表达式返回值Lambdas作为对象Lambda方法引用静态方法引用参数方法引用: 引用第一个参数的方法,其余参数作为方法入参传入实例方法引用构造方法引用Java8四大内置函数式接口1、Consumer 消费性接口:void accept(T t);2原创 2021-06-27 09:50:55 · 1176 阅读 · 1 评论 -
Java枚举类详解
文章目录枚举类定义枚举实现原理常见方法编译器生成的Values方法与ValueOf方法枚举的进阶用法向enum类添加方法与自定义构造函数enum类中定义抽象方法enum类与接口枚举与单例模式枚举类实现单例模式:实现方式一:枚举类本身就是单例对象,内部可实现单例对象具体方法逻辑实现方式二:枚举类作为单例对象内部类参考文献枚举类定义//枚举类型,使用关键字enumenum Day { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDA原创 2021-06-27 09:21:50 · 1111 阅读 · 1 评论 -
try、catch、finally语句中有return 的各类情况
try、catch、finally语句中有return 的各类情况1、 try-catch-finally中均无return,仅4中有return注意2、try 和 catch 中都带有 return ,finally无return总结在 Java 的异常处理中,try、catch 和 finally 是按顺序执行的。如果 try 中没有异常,则顺序为 try→finally,如果 try 中有异常,则顺序为 try→catch→finally。但是当 try、catch、finally 中加入 retu原创 2021-05-31 21:44:30 · 2642 阅读 · 0 评论 -
类的三大特性
文章目录面向对象的三大特征封装性封装方式一:Java Bean:封装方式二:权限修饰符二、继承多态面向对象的三大特征封装(Encapsulation)继承(Inheritance)多态(Polymorphism)封装性隐藏对象内部的复杂性,只对外公开简单的接口。便于外界调用,从而提高系统的可扩展性、可维护性。通俗的说,把该隐藏的隐藏起来,该暴露的暴露出来。这就是封装性的设计思想。封装方式一:Java Bean:Java中通过将数据(成员变量)声明为私有的(private),再提供公共的(原创 2021-03-01 15:54:54 · 316 阅读 · 0 评论 -
代码块
注意:静态代码块的执行时机:类的加载过程非静态代码块执行时机:创建类对象时原创 2021-03-01 15:35:07 · 87 阅读 · 0 评论 -
Java字符串大小比较——compareTo()方法
方法介绍compareTo()方法用于判断一个字符串是大于、等于还是小于另一个字符串。判断字符串大小的依据是根据它们在字典中的顺序决定的。语法:str1.compareTo(str2);compareTo()的返回值是int,它是先比较对应字符的大小(ASCII码顺序)如果字符串相等返回值0如果第一个字符和参数的第一个字符不等,结束比较,返回他们之间的差值(ascii码值)(负值前字符串的值小于后字符串,正值前字符串大于后字符串)如果第一个字符和参数的第一个字符相等,则以第二个字符和参数的第原创 2021-03-01 13:43:20 · 5707 阅读 · 0 评论 -
Set、HashSet、LinkedHashSet源码分析及底层原理
文章目录SetHashSet底层原理HashSet的实现原理总结源码分析LinkedHashSetLinkedHashSet底层原理源码分析SetSet用于存储不重复的元素集合,它主要提供以下几个实例方法:将元素添加进Set:boolean add(E e)将元素从Set删除:boolean remove(Object e)判断是否包含元素:boolean contains(Object e)Set特点Set实际上相当于只存储key、不存储value的Map。我们经常用Set用于去除重复原创 2021-03-01 13:45:59 · 241 阅读 · 0 评论 -
HashTable源码分析及底层原理
文章目录HashTabled概述源码分析成员变量构造函数get方法put方法总结HashTabled概述Hashtable是个古老的Map实现类,JDK1.0就提供了。不同于HashMap,Hashtable是线程安全的。Hashtable实现原理和HashMap相同,功能相同。底层都使用数组+链表结构,查询速度快,很多情况下可以互用。与HashMap不同,Hashtable不允许使用null作为key和 value与HashMap一样,Hashtable 也不能保证其中 Key-Value对的原创 2021-02-07 22:31:42 · 569 阅读 · 1 评论 -
LinkedHashMap源码分析及底层原理
文章目录定义存储结构示意图源码分析继承HashMap新增属性节点Entry:LinkedHashMap构造函数get方法put方法(理解还不够透彻,待更新)定义LinkedHashMap是HashMap 的子类在HashMap存储结构的基础上,使用了一对双向链表来记录添加元素的顺序LinkedHashMap可以维护Map 的迭代顺序:迭代顺序与Key-Value对的插入顺序一致LinkedHashMap 拥有 HashMap 的所有特性,它比 HashMap 多维护了一个双向链表,因此可以按照原创 2021-02-07 22:15:00 · 209 阅读 · 0 评论 -
HashMap源码分析及底层原理
文章目录存储结构概览初始参数介绍底层原理初始化添加元素过程HashMap的扩容JDK1.8相较于之前的变化:HashMap的put实现原理:HashMap的get实现原理:源码分析:Node节点:初始变量值构造方法putgetHasMap的扩容机制resize()总结存储结构概览初始参数介绍底层原理初始化HashMap的内部存储结构其实是数组+链表+树的结合。当实例化一个HashMap时,会初始化initialCapacity和loadFactor,在put第一对映射关系时,系统会创建一个长原创 2021-02-07 20:50:40 · 119 阅读 · 0 评论 -
Map
文章目录继承体系Map 接口中提供的常用方法循环遍历Map的四种方式:继承体系Map 中的 key不允许重复,即同一个Map作为键值的对象所对应的类,须重写hashCode()和equals()方法key和 value 之间存在单向一对一的关系,即通过指定的key总能找到唯一的、确定的valueMap接口的常用实现类: HashMap、TreeMap、LinkedHashMap和Properties。其中,HashMap是 Map接口使用频率最高的实现类Map 接口中提供的常用方法循环遍原创 2021-02-07 20:25:45 · 161 阅读 · 0 评论 -
Deque实现Stack
Stack只有入栈和出栈的操作:把元素压栈:push(E);把栈顶的元素“弹出”:pop(E);取栈顶元素但不弹出:peek(E)。在Java中,我们用Deque可以实现Stack的功能:把元素压栈:push(E)/addFirst(E);把栈顶的元素“弹出”:pop(E)/removeFirst();取栈顶元素但不弹出:peek(E)/peekFirst()。为什么Java的集合类没有单独的Stack接口呢?因为有个遗留类名字就叫Stack,出于兼容性考虑,所以没办法创建Stack接原创 2021-02-07 17:48:20 · 1515 阅读 · 0 评论 -
队列Queue、双端队列Deque源码分析及底层原理
文章目录队列Queue优先队列PriorityQueue双端队列Deque队列Queue在Java的标准库中,队列接口Queue定义了以下几个方法:int size():获取队列长度;boolean add(E)/boolean offer(E):添加元素到队尾;E remove()/E poll():获取队首元素并从队列中删除;E element()/E peek():获取队首元素但并不从队列中删除。注意到添加、删除和获取队列元素总是有两个方法,这是因为在添加或获取元素失败时,这两个方法原创 2021-02-07 16:09:12 · 452 阅读 · 0 评论 -
Vector
文章目录定义特征:源码分析定义Vector是一个古老的集合,JDK1.0就有了。大多数操作与ArrayList相同,区别之处在于Vector是线程安全的。Vector 是矢量队列,也是基于动态数组实现,容量可以自动扩容。跟 ArrayList 实现原理一样,但是 Vector 是线程安全,使用 Synchronized 实现线程安全,性能非常差,已被淘汰,使用 CopyOnWriteArrayList 替代 Vector。特征:允许元素为 null;查询效率高、插入、删除效率低,因为需要移动元原创 2021-02-07 15:10:33 · 97 阅读 · 0 评论 -
LinkedList源码分析及底层原理
文章目录定义双向链表内部节点源码总结定义LinkedList:双向链表,内部没有声明数组,而是定义了链表节点Node类型的first和last,用于记录首末元素。同时,定义内部类Node,作为LinkedList中保存数据的基本结构。双向链表双向链表是由三个部分组成:prev、data、next.prev:由用来存储上一个节点的地址;data:是用来存储要存储的数据;next:是用来存储下一个节点的地址。内部节点Node除了保存数据,还定义了两个变量:prev变量记录前一个元素的位原创 2021-02-07 14:57:20 · 192 阅读 · 0 评论 -
ArrayList源码分析及底层原理
文章目录源码动态数组扩容机制add(element) 流程grow() 流程:注意事项:源码构造器:public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable{ private static final long serialVersionUID = 8683452581原创 2021-02-07 14:25:17 · 169 阅读 · 0 评论 -
Java集合基础
文章目录数组:集合集合的遍历数组:声明一个引用该数组的变量,并指明整个变量可以引用的数组类型。声明一维数组的语法格式为:type[] arrayName; // 数据类型[] 数组名;声明了数组,只是得到了一个存放数组的变量,并没有为数组元素分配内存空间,不能使用。因此要为数组分配内存空间,这样数组的每一个元素才有一个空间进行存储。简单地说,分配空间就是要告诉计算机在内存中为它分配几个连续的位置来存储数据。在 Java 中可以使用 new 关键字来给数组分配空间。分配空间的语法格式如下:原创 2021-02-07 11:24:45 · 748 阅读 · 2 评论 -
JDK动态代理与CGLIB动态代理
文章目录一、代理模式二、静态代理三、动态代理四、JDK动态代理(适用于有公共接口的情况)关键点一:InvocationHandler 接口关键点二:Proxy类五、CGLIB 动态代理(无接口,子类)关键点一:实现 MethodInterceptor 接口关键点二:创建 CGLIB 动态代理类总结一、代理模式代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,在代理类中持有委托类实例,从而客户端使用代理类来间接调用委托类的方法,代理类主要负责为委托类预处理消息、过滤消息、把消息转发原创 2021-02-06 23:37:46 · 83 阅读 · 1 评论 -
反射
文章目录定义Java反射机制提供的用途反射主要APIClass类Class类常用方法获取Class类实例的方法类的加载加载过程类加载器简单介绍类加载器的作用:Class作用创建运行时类对象获取运行时类完整结构调用指定结构JDK动态代理代理设计模式的原理动态代理动态代理实现步骤动态代理与AOP定义加载完类之后,在JVM方法区中就产生了一个Class类型的对象(一个类只有一个Class对象),这个对象就包含了完整的类的结构信息。我们可以通过这个对象看到类的结构。这个对象就像一面镜子,透过这个镜子看到类的结构原创 2021-02-06 11:31:14 · 101 阅读 · 0 评论 -
泛型擦除
1.Java泛型的实现方法:类型擦除Java语言的泛型实现方式是擦拭法(Type Erasure)。所谓擦拭法是指,虚拟机对泛型其实一无所知,所有的工作都是编译器做的。Java的泛型是由编译器在编译时实行的,编译器内部永远把所有类型T视为Object处理,但是,在需要转型的时候,编译器会根据T的类型自动为我们实行安全地强制转型。Java 的泛型是伪泛型,因为在编译期间所有的泛型信息都会被擦除掉,泛型参数保留为原始类型。譬如 List 在运行时仅用一个 List 来表示(所以我们可以通过反射 add 方原创 2021-02-06 10:04:50 · 6649 阅读 · 0 评论 -
Java泛型
泛型的设计背景集合容器类在设计阶段/声明阶段不能确定这个容器到底实际存的是什么类型的对象,所以在JDK1.5之前只能把元素类型设计为Object,JDK1.5之后使用泛型来解决。因为这个时候除了元素的类型不确定,其他的部分是确定的,例如关于这个元素如何保存,如何管理等是确定的,因此此时把元素的类型设计成一个参数,这个类型参数叫做泛型。Collection,List,ArrayList这个就是类型参数,即泛型。泛型概念所谓泛型,就是允许在定义类、接口时通过一个标识表示类中某个属性的类型或者是某个方法原创 2021-02-05 17:02:46 · 127 阅读 · 1 评论 -
抛出异常有三种形式:throw、throws、系统自动抛异常之间的异同
抛出异常有三种形式,一是throw,一个throws,还有一种系统自动抛异常。下面它们之间的异同。一、系统自动抛异常当程序语句出现一些逻辑错误、主义错误或类型转换错误时,系统会自动抛出异常:(举个栗子)public static void main(String[] args) { int a = 5, b =0; System.out.println(5/b); //function();}系统会自动抛出ArithmeticException异常。对其处理,则输原创 2021-02-05 15:23:07 · 2790 阅读 · 0 评论 -
Java异常处理
文章目录异常定义异常体系异常分类异常处理方式异常对象生成异常处理方式一多catch语句异常的相关信息finally不捕获异常时的情况异常处理机制二:throws定义声明抛出异常举例手动抛出异常自定义异常总结异常定义异常: 在Java语言中,将程序执行中发生的不正常情况称为“异常”(开发过程中的语法错误和逻辑错误不是异常)Java程序在执行过程中所发生的异常事件可分为两类:Error:Java虚拟机无法解决的严重问题。如:JVM系统内部错误、资源耗尽等严重情况。比如:StackOverflowErr原创 2021-02-05 15:18:32 · 161 阅读 · 1 评论 -
关键字super
关键字super在Java类中使用super来调用父类中的指定操作:super可用于访问父类中定义的属性super可用于调用父类中定义的成员方法super可用于在子类构造器中调用父类的构造器注意:尤其当子父类出现同名成员时,可以用super表明调用的是父类中的成员super的追溯不仅限于直接父类super和this的用法相像,this代表本类对象的引用,super代表父类的内存空间的标识调用父类构造器子类中所有的构造器默认都会访问父类中空参数的构造器。即默认调用super()原创 2021-02-04 23:35:59 · 109 阅读 · 0 评论 -
关键字this
一句话,当前正在操作成员变量或方法的对象即为当前对象,this即指代当前对象在Java中,this关键字比较难理解,它的作用和其词义很接近。它在方法内部使用,即这个方法所属对象的引用;它在构造器内部使用,表示该构造器正在初始化的对象。this可以调用类的属性、方法和构造器什么时候使用this关键字呢?当在方法内需要用到调用该方法的对象时,就用this,具体的: 我们可以用this来区分属性和局部变量。比如: this.name =name;1.在任意方法或构造器内,如果使用当前类的成原创 2021-02-04 23:30:21 · 283 阅读 · 0 评论 -
多态
文章目录前提知识定义作用总结Java中多态一句话总结:前提知识类的继承:方法的重写引用类型转换:向上自动转型和向下强制转型定义作用总结Java中多态一句话总结:多态存在的前提:类存在继承关系,方法存在重写。定义对象变量时,可以使用父类变量来引用子类对象(自动向上转型),这个变量调用方法时,JVM会动态决定调用父类的方法或者子类的方法(运行时行为)。注意此时:向上转型的变量只能调用父类所有方法(子类继承父类,这些方法子类也有),但若是这个方法被子类重写,则动态编译会实际调用子类原创 2021-02-04 23:22:49 · 165 阅读 · 0 评论 -
对象类型转换:向上自动转型、向下强制转型
文章目录类型转换定义基本类型相互转换引用类型相互转换类型转换定义类型转换可以分为基本类型之间转换和引用类型间相互转换两大类。基本类型相互转换小范围数转换为大范围数自动转换。大范围数强制转换为小范围数,会造成精度损失或者溢出错误。引用类型相互转换子类继承于父类,即子类比父类封装的属于和方法要丰富的多!所以,向上转型,丢失了子类特有的方法和属性!向上转型时丢失的子类扩展方法,通过向下转型能找回来父类引用变量想要访问子类特有的方法时,需要使用向下转型在Java中由于继承和向上转型,子类原创 2021-02-04 23:20:42 · 766 阅读 · 1 评论 -
Java方法参数传递:值传递
方法,必须由其所在类或对象调用才有意义。若方法含有参数:形参:方法声明时的参数实参:方法调用时实际传给形参的参数值Java的实参值如何传入方法呢?Java里方法的参数传递方式只有一种:值传递。即将实际参数值的副本(复制品)传入方法内,而参数本身不受影响。形参是基本数据类型:将实参基本数据类型变量的“数据值”传递给形参形参是引用数据类型:将实参引用数据类型变量的“地址值”传递给形参,因此可以看作是引用传递,即将引用型变量所引用的对象或数组的引用地址传递给形参,形参改变会影响实参引用的对象.原创 2021-02-04 23:01:09 · 158 阅读 · 1 评论 -
方法重载与重写的区别
方法的重载(overload):重载的概念在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。重载的特点︰与返回值类型无关,只看参数列表,且参数列表必须不同。(参数个数或参数类型)。调用时,根据方法参数列表的不同来区别。方法的重写(Override)定义:在子类中可以根据需要对从父类中继承来的方法进行改造,也称为方法的重置、覆盖。在程序执行时,子类的方法将覆盖父类的方法。要求:子类重写的方法必须和父类被重写的方法具有相同的方法名称、参数列表子类重写原创 2021-02-04 22:46:39 · 122 阅读 · 2 评论 -
包装类
文章目录基本类型与对应包装类包装类继承图自动装箱拆箱:编译器自动实现与字符串转换基本类型与对应包装类包装类继承图自动装箱拆箱:编译器自动实现int和Integer可以互相转换:int i = 100;Integer n = Integer.valueOf(i);int x = n.intValue();所以,Java编译器可以帮助我们自动在int和Integer之间转型:Integer n = 100; // 编译器自动使用Integer.valueOf(int)int x =原创 2021-02-04 22:14:41 · 92 阅读 · 0 评论 -
Arrays.sort()用法
文章目录1、Arrays.sort(int[] a)2、Arrays.sort(int[] a, int fromIndex, int toIndex)3、public static void sort(T[] a,int fromIndex,int toIndex, Comparator<? super T> c)二维数组定制排序:1、Arrays.sort(int[] a)这种形式是对一个数组的所有元素进行排序,并且是按从小到大的顺序。2、Arrays.sort(int[] a, i原创 2021-02-03 00:00:05 · 627 阅读 · 0 评论 -
数组
Content数组初始化数据:为分配空间的数组元素赋初始值一、系统自动赋初值二、程序员指定数组的方法和属性数组特点:数组的分类:一维数组创建过程及内存分配多维数组(二维数组)二维数组初始化二维数组遍历1 、for循环语句2 、foreach 两个foreach语句循环嵌套不规则二维数组二维数组创建及内存解析Arrays工具类数组常见异常数组数组类型是从抽象基类 Array 派生的引用类型,必须有数组类型的引用变量指向它。故使用数组,需要:声明数组引用变量声明一维数组的语法格式为:type[原创 2021-02-02 23:53:09 · 354 阅读 · 0 评论 -
equals和==、equals和hashcode的区别与联系
文章目录equals方法和==的区别与联系==equals():具体使用时:hashCode()与equals()区别与联系hashCode()介绍:重写equals时必须重写hashcode方法为什么两个对象有相同的hashcode值,它们也不一定是相等的? 一句话hash碰撞equals方法和==的区别与联系==它的作用是判断两个对象的地址是不是相等。即判断两个对象是不是同一个对象。(基本数据类型比较的是值,引用数据类型比较的是内存地址)因为Java只有值传递,所以,对于==来说,不管是比较基原创 2021-02-02 22:18:10 · 127 阅读 · 0 评论 -
基本类型与引用类型区别
文章目录一、定义基本类型:引用类型:二、创建1.基本类型2.引用类型的创建三、传递1、基本类型:值传递2、引用类型:引用传递四、销毁方式1、基本类型2、引用类型五、存储位置基本变量类型:方法栈引用变量类型一、定义基本类型:基本类型的值就是一个数字,一个字符或一个布尔值。8种基本类型:boolean char byte、short、int、long、float、double引用类型:引用类型是一个对象类型,它的值是指向内存空间的引用,就是地址,所指向的内存中保存着变量所表示的原创 2021-02-02 21:51:40 · 204 阅读 · 0 评论 -
Java数据类型(八大基本类型、字符串、引用类型)
文章目录变量定义变量的作用使用变量注意变量分类八大基本数据类型变量声明位置:成员变量、局部变量引用类型字符串常量基本类型介绍整型浮点型字符型布尔类型类型自动提升与强制转型:基本类型数据间的相互转换变量定义内存中的一个存储区域。该区域的数据可以在同一类型范围内不断变化 。变量是程序中最基本的存储单元。包含变量类型、变量名和存储的值。变量的作用用于在内存中保存数据使用变量注意Java中每个变量必须先声明,后使用使用变量名来访问这块区域的数据变量的作用域:其定义所在的一对{}内,变原创 2021-02-02 21:36:14 · 864 阅读 · 1 评论 -
逻辑运算符(短路逻辑运算)
逻辑运算符一句话:对于短路逻辑运算符,只要通过左边能够确定表达式的真假,就不必再计算右边了!短路逻辑运算符布尔运算的一个重要特点是短路运算。如果一个布尔运算的表达式能提前确定结果,则后续的计算不再执行,直接返回结果。因为false && x的结果总是false,无论x是true还是false,因此,与运算在确定第一个值为false后,不再继续计算,而是直接返回false。我们考察以下代码:// 短路运算public class Main { public stati原创 2021-02-02 19:42:37 · 1155 阅读 · 1 评论