![](https://img-blog.csdnimg.cn/20210922230701351.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java基础教程系列
文章平均质量分 85
原价99.9,限时49.9🔥火爆订阅中(七日后恢复原价)。 50+文章,哪吒数年工作总结之结晶。
优惠券已抵扣
余额抵扣
还需支付
¥49.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
哪 吒
2022博客之星Top1,现象级专栏 《Java基础教程系列》作者,专注Java硬核干货分享,立志做到Java赛道全网Top N
展开
-
Java学习路线总结(思维导图篇)
CSDN最强Java专栏,包含全部Java基础知识点、Java8新特性、Java集合、Java多线程、Java代码实例,理论结合实战,实现Java的轻松学习。原创 2021-10-21 11:12:58 · 182088 阅读 · 153 评论 -
【Java基础知识 1】Java入门级概述
CSDN最强Java专栏,包含全部Java基础知识点、Java8新特性、Java集合、Java多线程、Java代码实例,理论结合实战,实现Java的轻松学习。原创 2021-09-25 13:39:22 · 152216 阅读 · 179 评论 -
【Java基础知识 2】配置java环境变量
一、Java成名史想要学好一门语言,一定要了解它的历史,了解它存在的价值和意义。1991年成立了一个称为Green的项目小组,帕特里克、詹姆斯·高斯林、麦克·舍林丹和其他几个工程师一起组成的工作小组在加利福尼亚州门洛帕克市沙丘路的一个小工作室里面研究开发新技术,专攻计算机在家电产品上的嵌入式应用。由于C++所具有的优势,该项目组的研究人员首先考虑采用C++来编写程序。但对于硬件资源极其匮乏的单片式系统来说,C++程序过于复杂和庞大。为了解决困难,他们首先着眼于语言的开发, 对于新语言...原创 2021-11-07 11:04:41 · 19903 阅读 · 27 评论 -
【Java基础知识 3】为何要配置环境变量?
一、前言干了这么多年Java,配置环境变量都是第一步要做的,但是为什么要配置环境变量呢,又有什么用呢,今天哪吒就带你一探究竟。二、百度百科有事没事找百度,百度解释名词这一块做的是真的好。1、环境变量简介环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数,如临时文件夹位置和系统文件夹位置等。环境变量是在操作系统中一个具有特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息。例如Windows和DOS操作系统中的path环境变量,当要求系统运行一个程序而没有告诉它程序原创 2021-08-01 10:20:17 · 24530 阅读 · 35 评论 -
【Java基础知识 4】秒懂数组拷贝,感知新境界
一、前言最近遇到了数组拷贝的问题,之前从来都没想过,数组居然还用拷贝?小编在今天之前,用的都是循环赋值的方式进行数组拷贝,速度将对较慢,代码看起来很low,不推荐使用。今天就这个机会,总结一波,分享给大家。二、System.arraycopy与Arrays.copyOf(浅拷贝)这个是System提供的方法,也是我推荐的一种拷贝方式,它是浅拷贝,对非基本类型而言,它拷贝的是对象的引用,而不是去新建一个新的对象,这个方法不是Java写的,底层是用C或C++实现的,速度比较快。通过源码分原创 2021-06-16 23:18:11 · 21513 阅读 · 59 评论 -
【Java基础知识 5】装箱和拆箱
一、什么是装箱?什么是拆箱?在Java SE5之前,如果要生成一个数值为10的Integer对象,必须这样进行:Integer i = new Integer(10);而在从Java SE5开始就提供了自动装箱的特性,如果要生成一个数值为10的Integer对象,只需要这样就可以了:Integer i = 10;这个过程中会自动根据数值创建对应的 Integer对象,这就...原创 2019-06-29 10:06:00 · 19407 阅读 · 9 评论 -
【Java基础知识 6】Java异常详解
一、try catch简介大家对trycatch可能并不陌生,也都使用的非常熟练了。当程序运行过程中发生错误时,就会抛出异常,抛出异常总比终止程序来的好的多。也可以在已知某个错误要发生时,进行trycatch操作,异常时进行某些特有操作。1、异常分为两种类型未检查异常和已检查异常。对于已检查异常,编译器将会检查是否提供了处理器。然而,有很多常见的异常,比如空指针异常,都属于未检查异常,编译器不会发现这个地方是否会爆空指针异常。2、简单语法try{ //代码区}原创 2021-09-14 09:24:26 · 16897 阅读 · 84 评论 -
【Java基础知识 7】toString()、String.valueOf、(String)强转
一、前言相信大家在日常开发中这三种方法用到的应该很多,尤其是前两种,经常在开发的时候,随心所欲,想用哪个用哪个,既然存在,那就应该有它存在的道理,那么什么情况下用哪个呢?二、代码实例1、基本类型(1)基本类型没有toString()方法(2)推荐使用(3)无法强转(String)是标准的类型转换,将Object类型转为String类型,使用(String)强转时,最好使用instanceof做一个类型检查,以判断是否可以进行强转,否则容易抛出ClassCas...原创 2021-06-16 00:24:04 · 21146 阅读 · 87 评论 -
【Java基础知识 8】String、StringBuilder、StringBuffer详解
一、String类简介String类位于java.lang包下,是Java语言的核心类,提供了字符串的比较、查找、截取、大小写转换等操作,可以使用“+”连接其他对象,String类的部分源码如下public final class String implements java.io.Serializable, Comparable<String>, CharSequence { /** The value is used for character storage. *原创 2021-09-12 08:59:32 · 14637 阅读 · 116 评论 -
【Java基础知识 9】序列化与反序列化
面试官:兄弟,说说你对transient的理解和感悟素小暖:what?还有感悟?一、基本概念1、序列化和反序列化定义Java序列化是指把Java对象转换为字节序列的过程。Java反序列化是指把字节序列恢复为Java对象的过程。2、序列化和反序列化的作用(1)序列化作用在传递和保存对象时,保存对象的完整性和可传递性。对象转换为有序字节流,可以在网络上传输或者保存在本地文件(一般json/xml文件居多)中。(2)反序列化作用根据字节流中保存的对象状态及描述信息,通原创 2020-06-28 13:25:46 · 14895 阅读 · 10 评论 -
【Java基础知识 10】Java IO流详解
一、前言Java的I/O主要的用途就是文件数据的读写、数据的网络发送与接收等场合。流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。对于文件内容的操作主要分为两大类分别是:字符流和字节流。二、I/O流的分类根据处理数据类型的不同分为:字符流和字节流。根据数据流向不同分为:输入流和输出流。1、字符流和字节流。字符流的由来: 因为数据编码的不同,而有了对字符进原创 2021-02-23 21:14:59 · 16126 阅读 · 17 评论 -
【Java基础知识 11】java泛型方法的定义和使用
一、基本介绍Java泛型是J2 SE1.5中引入的一个新特性,其本质是参数化类型,也就是说所操作的数据类型被指定为一个参数(type parameter)这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。二、提出背景Java集合(Collection)中元素的类型是多种多样的。例如,有些集合中的元素是Byte类型的,而有些则可能是String类型的,等等。Java允许程序员构建一个元素类型为Object的Collection,其中的元素可以是任何类型在Java S.原创 2020-06-17 16:47:31 · 17097 阅读 · 10 评论 -
【Java基础知识 12】java枚举详解
一、基本概念枚举是Java1.5引入的新特性,通过关键字enum来定义枚举类。枚举类是一种特殊类,它和普通类一样可以使用构造器、定义成员变量和方法,也能实现一个或多个接口,但枚举类不能继承其他类。二、枚举的优缺点1、优点Effctive Java中之所以推荐用枚举代替所有常量Code,原因如下:(1)类型检查,有效性检查(2)枚举作为一个类,可以有自己的属性(通常应该是常量,我没遇到过不是的情况)以及自己的方法(否则只能用switch来写,实际违反原则)(3)和常量相比,无需原创 2020-06-16 16:51:31 · 12423 阅读 · 10 评论 -
【Java基础知识 13】java注解详解
一、注解简介Java注解用于为Java代码提供元数据。元数据是指用来描述数据的数据,通俗一点,就是描述代码间关系,或者代码与其它资源(例如数据库表)之间内在联系的数据。在一些技术框架中,如Struts、hibernate就不知不觉用到了元数据。对于Struts来说,元数据指的是struts-config.xml;对hibernate来说就是hbm文件。以上阐述的几种元数据都是基于xml文件的或者其他形式的单独配置文件。这样表示有些不便之处。1、与被描述的文件分离,不利于一致性的维护;2、所有这样..原创 2020-06-10 09:37:44 · 11498 阅读 · 8 评论 -
【Java基础知识 14】java动态代理原理
一、代理模式为其他对象提供一个代理以控制对某个对象的访问。代理类主要负责为委托了(真实对象)预处理消息、过滤消息、传递消息给委托类,代理类不现实具体服务,而是利用委托类来完成服务,并将执行结果封装处理。其实就是代理类为被代理类预处理消息、过滤消息并在此之后将消息转发给被代理类,之后还能进行消息的后置处理。代理类和被代理类通常会存在关联关系(即上面提到的持有的被带离对象的引用),代理类本身不实现服务,而是通过调用被代理类中的方法来提供服务。二、静态代理创建一个接口,然后创建被代理的类实现该..原创 2020-09-17 18:27:21 · 18651 阅读 · 14 评论 -
【Java基础知识 15】java反射机制原理详解
一、类的加载与ClassLoader的理解1、加载将class文件字节码内容加载到内存中,并将这些静态数据转换成方法区的运行时数据结构,然后生成一个代表这个类的java.lang.class对象。2、链接将Java类的二进制代码合并到JVM的运行状态之中的过程。验证:确保加载的类信息符合JVM规范,没有安全方面的问题; 准备:正式为类变量分配内存并设置类变量默认初始值的阶段,这些内存都将在方法区内进行分配; 解析:虚拟机常量池内的符号引用(常量名)替换为直接引用(地址)的过程。3、原创 2020-09-01 21:56:00 · 21000 阅读 · 18 评论 -
【Java基础知识 16】java内部类使用场景
Java基础教程系列,打造精品专栏。原创 2021-11-21 22:02:34 · 15009 阅读 · 100 评论 -
【Java8 新特性 1】java8 lambda表达式
Java8发布已经有一段时间了,这次发布的改动比较大,很多人将这次改动与Java5的升级相提并论。Java8其中一个很重要的新特性就是lambda表达式,允许我们将行为传到函数中。想想看,在Java8之前我们想要将行为传入函数,仅有的选择就是匿名内部类。Java8发布以后,lambda表达式将大量替代匿名内部类的使用,简化代码的同时,更突出了原来匿名内部类中最重要的那部分包含真正逻辑的代码。尤其是对于做数据的同学来说,当习惯使用类似scala之类的函数式编程语言以后,体会将更加深刻。现在我们就来看看J...原创 2020-06-28 13:10:32 · 14562 阅读 · 6 评论 -
【Java8 新特性 2】java8 lambda表达式进阶
一、函数式接口简介函数式接口是 Java8 引入的一个新特性,是一种特殊的接口:SAM类型的接口(Single Abstract Method),但本质上还是接口。相比较于其他接口,函数式接口有且只能有一个抽象方法。只要接口中出现多个抽象方法,那么就不能称之为函数式接口,运行的时候就会报错。为此 Java8 提供了一个新的注解@FunctionalInterface,如果接口被这个注解标注,就说明该接口是函数式接口,如果有多于一个的抽象方法,在编译的时候就会报错。但是这个注解不是必需的,只要接口符合函数原创 2020-07-02 17:21:42 · 10112 阅读 · 10 评论 -
【Java8 新特性 3】java8 supplier
一、Java8新特性,Supplier1、Supplier简介supplier接口是JAVA8以后配合lambda表达式和函数式接口编程(FunctionInterface,以下简称FI)组合使用的一个接口,对外表现为双冒号"::",顺便说下"->"符号对应的是Function接口中的Reply方法例如:Supplier<Person> persionSupplier = Person::new;Arrays.asList("a","b","c").forEach(e-&g原创 2020-08-14 18:04:03 · 8964 阅读 · 6 评论 -
【Java8 新特性 4】java8 optional
package test.optional;public class School { private Teacher teacher; public Teacher getTeacher() { return teacher; }}package test.optional;public class Teacher { private Student student; public Student getStudent() { return student; }.原创 2020-11-17 23:46:03 · 6416 阅读 · 4 评论 -
【Java8 新特性 5】Java 8 stream的详细用法
一、Java8 Stream概述Java 8 是一个非常成功的版本,这个版本新增的Stream,配合同版本出现的Lambda,给我们操作集合(Collection)提供了极大的便利。Stream流是JDK8新增的成员,允许以声明性方式处理数据集合,可以把Stream流看作是遍历数据集合的一个高级迭代器。Stream将要处理的元素集合看作一种流,在流的过程中,借助Stream API对流中的元素进行操作,比如:筛选、排序、聚合等。1、使用流的好处代码以声明性方式书写,说明想要完成什么,而.原创 2021-01-07 22:47:24 · 7500 阅读 · 16 评论 -
【Java8 新特性 6】java8 predicate
一、为什么使用线程池诸如web服务器、数据库服务器、文件服务器、邮件服务器之类的许多服务器应用程序都面向处理来自远程来源的大量短小的任务。请求以某种方式到达服务器,这种方式可能是通过网络协议(HTTP、FTP)、通过JMS队列或者可能通过轮询数据库。不管请求如何到达,服务器应用程序中经常出现的情况是:单个任务处理的时间很短而请求的数目却是巨大的。...原创 2020-07-28 13:18:10 · 5461 阅读 · 3 评论 -
【Java8 新特性 7】java函数式接口
一、函数式接口简介函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。函数式接口可以被隐式转换为 lambda 表达式。Lambda 表达式和方法引用(实际上也可认为是Lambda表达式)上。如定义了一个函数式接口如下:package com.panasonic.mes.guor.service;@FunctionalInterfacepublic interface CalFunctionalInterface&l原创 2021-08-05 22:12:01 · 7678 阅读 · 34 评论 -
【Java集合 1】java集合有哪些
一、数组Array和集合的区别1、数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型)2、JAVA集合可以存储和操作数目不固定的一组数据。3、若程序时不知道究竟需要多少对象,需要在空间不足时自动扩增容量,则需要使用容器类库,array不适用。 注:使用相应的toArray()和Arrays.asList()方法可以相互转换。二、Java集合集合类存放于Java.util包中。集合类存放的都是对象的引用,而非对象本身,出于表达上的便利,我们称集合中的对象就是原创 2020-06-12 15:20:56 · 22275 阅读 · 5 评论 -
【Java集合 2】list循环删除问题
今天同事来找我说代码有问题,list中remove,这是不对的,我记得当时我真的进行了测试,我也觉得不对,但是确实是没测出来,就没多想!真的是菜的一笔!今天好好研究一下,先写几个case预热一下一、几种常见的遍历方式1、普通for循环2、高级for循环3、iterator和removeIf4、stream()5、复制二、源码篇1、普通for循环出错原因public boolean remove(Object o) { if (o == .原创 2020-11-24 22:44:44 · 11409 阅读 · 34 评论 -
【Java集合 3】List<T>和List<?>的区别
<T>在List、Set、Map中经常见到,用来限制Class中的参数类型,确保Class中参数的一致性。例如:List<String> list = new ArrayList<>();创建了一个内部参数是String类型的类,list中的操作对象都是String。<?>代表任意java类型,只有在不关心数据的具体类型下才使用通配符表示,但在一些情况下,需要将<?>传入的数据进行强转,但这样不如直接传入<T>。另外除了<?.原创 2020-12-19 10:02:17 · 33239 阅读 · 50 评论 -
【Java集合 4】java character
一、前言Character将一个char基本数据类型封装在类中。这个类中只有一char类型的变量。Character是基于unicode码进行的Character所有的方法,都是围绕着这个char基本数据类型的值进行操作的。二、ASCII控制字符二进制 十进制 十六进制 缩写 可以显示的表示法 名称/意义 00000000 0 00 NUL ␀ 空字符(Null) 00000001 1 01 SOH ..原创 2021-02-16 20:07:23 · 7937 阅读 · 6 评论 -
【Java集合 5】HashMap + 软引用进行缓存
一、强引用强引用的特点:可以直接访问目标对象。 所指向的对象在任何时候都不会被系统回收。JVM宁愿抛出OOM异常,也不会回收强引用所指向的对象。 可能导致内存泄漏。//强引用User user = new User("zhangsan", 18);二、软引用(SoftReference)与弱引用(WeakReference)软引用:如果一个对象只具有软引用,而当前虚拟机堆内存空间足够,那么垃圾回收器就不会回收它,反之就会回收这些软引用指向的对象。弱引用:垃圾回收器一旦发现某块内原创 2021-01-09 12:04:00 · 4431 阅读 · 2 评论 -
【Java集合 6】arraycopy方法的作用
一、前言对数组的复制,有四种方法:for clone System.arraycopy arrays.copyof下面分析一下最常用的System.arraycopy()二、源码拜读三、深拷贝与浅拷贝1、简单类型(深拷贝)package com.guor.test.javaSE.collection;import java.util.Arrays;public class ArrayTest { public static void main(String[原创 2021-01-26 19:39:50 · 10034 阅读 · 5 评论 -
【Java集合 7】java queue用法
欲速则不达,欲达则欲速!队列Queue是一个先进先出的数据结构;与list、set同一级别,继承了collection接口。Queue的实现阻塞队列(BolckingQueue) 非阻塞队列阻塞队列(BolckingQueue)一、插入与移除1、插入队列不满时可执行插入元素线程,直到队列满。2、移除队列不为空时都可移除,直到队列为空。抛出异常:满的时候插...原创 2020-01-29 20:10:45 · 7445 阅读 · 0 评论 -
【Java集合 8】Java中的queue和deque
一、Queue和DequeQueue以及Deque都是继承于Collection,Deque是Queue的子接口。Queue是FIFO的单向队列,Deque是双向队列。Queue有一个直接子类PriorityQueue,而Deque中直接子类有两个:LinkedList以及ArrayDeque。PriorityQueue的底层数据结构是数组,而无边界的形容,那么指明了PriorityQueue是自带扩容机制的。ArrayDeque是无初始容量的双端队列,LinkedList则是双向链表。原创 2021-08-16 18:13:57 · 6647 阅读 · 9 评论 -
【Java 多线程 1】java多线程并发编程
一、Synchronized保证原子性public class Test { private static int number = 0; private static Object obj = new Object(); public static void main(String[] args) throws InterruptedException { Runnable increment = () -> { for (int原创 2020-08-17 14:41:27 · 18260 阅读 · 20 评论 -
【Java 多线程 2】java线程池原理
一、线程池的优势降低系统资源消耗,通过重用已存在的线程,降低线程创建和销毁造成的消耗; 提高系统响应速度,当有任务到达时,通过复用已存在的线程,无需等待新线程的创建便能立即执行; 方便线程并发数的管控。因为线程若是无限制的创建,可能会导致内存占用过多而产生OOM,并且会造成cpu过度切换(cpu切换线程是有时间成本的(需要保持当前执行线程的现场,并恢复要执行线程的现场))。 提供更强大的功能,延时定时线程池。二、线程池主要方法public ThreadPoolExecutor(int co原创 2021-02-16 21:05:26 · 6087 阅读 · 18 评论 -
【Java 多线程 3】理解ThreadLocal
一、基本介绍经过一宿的面壁思过,下文写的对ThreadLocal的源码分析,过于枯燥乏味,现在简单的总结一下ThreadLocal,提高一下做人的level。ThreadLocal的作用就是:线程安全。ThreadLocal的本质就是一个内部的静态的map,key是当前线程的句柄,value是需要保持的值。由于是内部静态map,不提供遍历和查询的接口,每个线程只能获取自己线程的value。这样,就线程安全了,又提供了数据共享的能力,perfect。二、ThreadLocal的应用原创 2020-06-09 15:54:48 · 5502 阅读 · 7 评论 -
【Java 多线程 4】Java守护线程
一、在Java中有两类线程:User Thread(用户线程)、Daemon Thread(守护线程)1、Daemon的作用是为其他线程的运行提供便利服务,守护线程最典型的应用就是 GC (垃圾回收器),它就是一个很称职的守护者。2、User和Daemon两者几乎没有区别,唯一的不同之处就在于虚拟机的离开:如果 User Thread已经全部退出运行了,只剩下Daemon Thread...原创 2019-07-04 09:54:00 · 4974 阅读 · 0 评论 -
【Java 多线程 5】Java多线程之Executor框架
引言Executor框架是指JDK 1.5中引入的一系列并发库中与Executor相关的功能类,包括Executor、Executors、ExecutorService、Future、Callable等。一、为什么要引入Executor框架?1、如果使用new Thread(...).start()的方法处理多线程,有如下缺点:① 开销大。对于JVM来说,每次新建线程和销毁线程都会...原创 2020-01-17 14:10:02 · 3868 阅读 · 0 评论 -
【Java 多线程 6】countdownlatch用法
一、CountDownLatch简介CountDownLatch是一个同步工具类,用来协调多个线程之间的同步,或者说起到线程之间的通信(而不是用作互斥的作用)。CountDownLatch能够使一个线程在等待另外一些线程完成各自工作之后,再继续执行。使用一个计数器进行实现。计数器初始值为线程的数量。当每一个线程完成自己任务后,计数器的值就会减一。当计数器的值为0时,表示所有的线程都已经完成一些任务,然后在CountDownLatch上等待的线程就可以恢复执行接下来的任务。二、CountDownL原创 2021-02-16 20:44:21 · 6431 阅读 · 16 评论 -
【Java 多线程 7】通过socket、多线程、动态代理、反射 实现RPC远程方法调用
一、概念梳理1、Socket是什么?Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。Socket技术详解2、动态代理是什么?目前java动态代理的实现分为两种1.基于JDK的动态代理2.基于CGILB的动态代理在业务中使用动态代理,一般是为了给需要实现的方法添加预处理原创 2021-03-08 21:17:12 · 5503 阅读 · 18 评论 -
【Java 代码实例 1】java反射三种方法
最近发现有个方法没见过,百度了一下,才发现更多的方法没见过,今天本地测试一下:方法总结:<U> Class<? extends U> asSubclass(Class<U> clazz) //强制转换此Class对象以表示由指定类对象表示的类的子类。T cast(Object obj) //将一个对象强制转换为此Class对象表示的类或接口。boolean desiredAssertionStatus() //返回在调用此方法时要初始化的断言状态.原创 2021-01-05 19:36:25 · 7568 阅读 · 2 评论