java学习
我会努力变强的
这个作者很懒,什么都没留下…
展开
-
一篇文章搞定java序列化机制
序列化与反序列化序列化:将对象的状态信息转换为可以存储或传输的数据形式(比如二进制)的过程。反序列化:与序列化相对,把序列化转换成的可以存储或传输的数据形式转化为对象的状态信息的过程。java序列化与反序列化序列化:把对象转换为二进制流。反序列化:把二进制流数据转化为对象。使用场景永久保存数据。把序列化后的数据保存到磁盘等存储设备中。使用时可以反序列化。比如某些对象不想随着JVM关闭而消失,可以序列化到磁盘中。用于网络传输。把对象序列化为二进制数据,传输到远程计算机。java序列化还可以原创 2020-06-12 16:32:30 · 219 阅读 · 0 评论 -
Java日志框架之JUL(java util logging)详解
定义:JUL全称Java util logging,是java原生的日志框架,使用时不需要另外引入第三方类库,相对于其他框架使用方便,学习简单,能够在小型的应用中灵活使用。架构:Application:我们的程序应用。LogManager:管理Logger,是个单例Bean。Logger:日志记录器,我们的应用程序通过获取日志记录器Logger对象,调用其API来发布日志信息,Logger通常是应用程序访问日志系统的入口。Handler:日志处理器,每个Logger会关联持有多个Handle原创 2020-06-08 00:38:19 · 3542 阅读 · 0 评论 -
Spring高级之注解@PropertySource详解(超详细)
定义/作用@PropertySource注解用于指定资源文件读取的位置,它不仅能读取properties文件,也能读取xml文件,并且通过YAML解析器,配合自定义PropertySourceFactory实现解析YAML文件。源码://只能作用在类上@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Repeatable(PropertySources.class)public @interface原创 2020-06-06 16:36:49 · 55022 阅读 · 4 评论 -
Spring高级之注解@Import注解、ImportSelector、ImportBeanDefinitionRegistrar详解(超详细)
定义/作用@Import注解只能作用在类上,一种使用场景是在spring注解驱动开发环境下与配置类配合使用的,其作用是引用其他配置类。使得我们可以和早起的基于XML配置文件开发那样。使用不同的配置类配置不同的内容,比如Mysql数据源配置用一个配置类。Redis数据源配置用一个配置类等。然后使用在注解在一个主配置类中引入这些从配置类,使得配置更加清晰。被引入的类可以不使用@Configuration、@Component注解。另一种使用 场景是该注解也是一种注册bean的方案。可以在配置类中使用Impo原创 2020-06-06 12:35:43 · 3530 阅读 · 1 评论 -
Spring高级之注解@Bean详解(超详细)
定义/作用当我们要使用第三方类实现组件注册到IOC容器时,例如第三方数据库连接池等,我们无法修改他们的代码,所以我们不能通过@Component及其衍生注解来进行组件定义。这是,可以通过@Bean注解把第三方组件注册到IOC容器中。源码://能够作用在方法和注解上,作用在方法上和作用在注解上的用处不同,通常作用在方法上。@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE}) @Retention(RetentionPolicy.RUNT原创 2020-06-05 21:41:30 · 5051 阅读 · 0 评论 -
Spring高级之注解@lazy详解(超详细)
定义/作用用于指定单例bean实例化的时机,在没有指定此注解时,单例会在容器初始化时就被创建。而当使用此注解后,单例对象的创建时机会在该bean在被第一次使用时创建,并且只创建一次。第二次及以后获取使用就不再创建。在实际开发场景中,并不是所有bean都要一开始就被创建的,有些可以等到使用时才创建。此时就可以使用该注解实现。此注解只对单例bean有用,原型bean时此注解不起作用。源码://可以作用在类上、方法上、构造器上、方法参数上、成员变量中。@Target({ElementType.TYPE原创 2020-06-05 18:08:41 · 18583 阅读 · 8 评论 -
Spring高级之注解@DependsOn详解(超详细)
定义/作用@DependsOn注解可以定义在类和方法上,意思是我这个组件要依赖于另一个组件,也就是说被依赖的组件会比该组件先注册到IOC容器中。使用场景:需要用到观察者模式的情况下通常都需要用到该注解,观察者模式(详细可查看相关文章)有三要输,观察者、事件源、事件,机制是观察者会监听数据源的某些时间,当事件源触发该事件后,观察者就会知道进行相应措施。比如老师是观察者,学生是事件源,学生迟到是事件,老师观察学生是否迟到,每当学生迟到,老师就会发现,并处罚该学生。这类场景一般需要观察者要比事件源先创建原创 2020-06-04 20:58:53 · 66473 阅读 · 1 评论 -
Spring高级之注解@ComponentScan详解(超详细)
定义/作用@ComponentScan注解用于实现spring主键的注解扫描,会扫描特定包内的类上的注解。源码(对属性进行一些简介,会在后文中详细讲解每个属性):@Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE}) //只能作用在类上,一般作用在配置类上。@Documented@Repeatable(ComponentScans.class)public @interface ComponentScan { @A原创 2020-06-04 18:57:09 · 10205 阅读 · 1 评论 -
spring高级之AOP详解
前言这是之前开始学spring的时候的笔记,现在添加了一些理解,然后把他搬到博客上来。动态代理模式演示:这里仅是动态代理的演示,要查看详细的可以查阅相关博文。动态代理的本质就是增强对象方法,在不修改目标类的情况动态生成一个代理类和代理对象,然后在目标对象的方法执行前、后、等地方可以执行一点逻辑。比如日志等。建议要理解Spring的AOP之前要理解好动态代理,因为AOP底层是动态代理。以下是基于jdk的动态代理写的demo,jdk的动态代理只能代理接口,要代理类的话可以使用cglib动态代理。原创 2020-05-29 21:26:19 · 416 阅读 · 0 评论 -
Spring高级应用之bean的生命周期
简介:在spring世界中,一切皆为bean,spring是面向bean编程的,bean也可以称为组件,是一个个java对象,多个组件间协调工作完成复杂的业务功能。所以理解bean的生命周期,方便在每个时期可以执行一些特定的操作是十分重要的。这里的bean指的是单例bean,原型bean一旦从容器中获取出去生命周期就不归容器管理了。默认的生命周期:spring中bean有五个默认的生命周期(顺序由上到下):实例创建阶段:就是使用构造器进行实例创建的阶段。依赖注入阶段:也就是属性赋值阶段。初原创 2020-05-27 21:24:59 · 247 阅读 · 0 评论 -
Java网络编程之Socket和ServerSocket详解
SocketSocket是实现客户端套接字的类,套接字是两台计算机之间进行通信的端点。Socket的实际工作由SocketImpl类的实例执行 。通过更改用于创建套接字实现的套接字工厂,应用程序可以配置自身以创建适合于本地防火墙的套接字。常用API详解:获取方法://创建一个未连接的套接字,需要用相应成员方法进行连接才能使用。public Socket()//传入一个ip和端口进行创建套接字并进行连接public Socket(String host, int port)//传入一个I原创 2020-05-23 18:49:48 · 1378 阅读 · 0 评论 -
Java NIO学习篇之直接缓冲区和非直接缓冲区
定义原创 2020-05-23 16:36:13 · 1526 阅读 · 2 评论 -
Java NIO学习篇之缓冲区CharSet详解
定义:CharSet是java nio对编码解码的解决方案,专门负责字符的编码和解码。原创 2020-05-22 17:37:42 · 910 阅读 · 0 评论 -
Java NIO学习篇之通道FileChannel详解
定义:FileChannel是Java NIO对应于磁盘等存储设备文件操作的通道。常用API详解:获取FileChannel的API/*** 打开一个与文件的连接通道,用于进行文件操作。* path:path,文件的路径对象,可用Path.get("文件路径"),获取。* options:通道的操作参数。通常使用实现类枚举StandardOpenOption指定。* attrs:创建文件时自动设置的文件属性的可选列表,比如读写执行。*/public static FileChannel原创 2020-05-22 11:57:19 · 1212 阅读 · 0 评论 -
Java NIO学习篇之PosixFilePermission详解
定义:PosixFilePermission是一个枚举类,代表着文件的基本权限。public enum PosixFilePermission { /** * 文件所有者的读权限 */ OWNER_READ, /** * 文件所有者写权限。 */ OWNER_WRITE, /** * 文件所有者执行权限 */ OWNER_EXECUTE, /** * 文件所属组成员读权限原创 2020-05-21 21:12:20 · 1253 阅读 · 0 评论 -
Java NIO学习篇之StandardOpenOption详解
定义:StandardOpenOption是一个枚举类,代表着文件连接时的标准选项。通常可以多个选项一起使用。public enum StandardOpenOption implements OpenOption { /** * 以读的方式连接文件。 */ READ, /** * 以写的方式连接文件。 */ WRITE, /** * 以追加的方式连接文件,不会覆盖文件原本内容,在后面追加。 */原创 2020-05-21 21:08:10 · 5745 阅读 · 3 评论 -
Java NIO学习篇之通道Channel详解
定义:Channel:管道,运输的介质,可以大致比喻成铁路的铁轨,不过他连接的不是数据源,连接的是缓冲区Buffer。与传统IO的Stream比较:NIO通道可以异步读写,而传统IO的Stream不能。NIO通道里面的数据一定是先读到缓冲区或者先写到缓冲区的,不能直接面向数据源;而传统IO的Stream既可以面向缓冲区,也可以直接面向数据源。Channel的实现:java.nio.channels.Channel是一个接口,他有一些常用的实现类:FileChannel: 从文件读写数据原创 2020-05-21 18:38:58 · 2726 阅读 · 0 评论 -
Java NIO学习篇之缓冲区ByteBuffer详解
定义:ByteBuffer是Buffer的实现类之一,是一个通用的缓冲区,功能要比其他缓冲区子类多。支持直接内存。是一个抽象类。子类实现是HeapByteBuffer(非直接缓冲区子类),DirectByteBuffer(直接缓冲区子类)。看此文前建议看看:关于Buffer可以查看 Java NIO学习篇之缓冲区Buffer详解直接缓冲区:以上是书《深入理解Java虚拟机》对直接内存的描述。简单来说直接内存不是JVM内存,而是计算机真正的物理内存。我们IO中有个步骤是:读:把内核缓冲原创 2020-05-20 20:50:41 · 2177 阅读 · 0 评论 -
Java NIO学习篇之缓冲区Buffer详解
定义缓冲区Buffer在java nio中负责数据的存储,缓冲区就是数组,用于存储不同类型数据的数组。jdk为java七大基本类型数据都准备了响应的缓冲区(boolean值除外):ByteBufferCharBufferShortBufferIntegerBufferLongBufferFloatBufferDoubleBuffer上述缓冲区除了ByteBuffer的 功能稍微多点外,因为ByteBuffer是通用的,所以功能会比较多。其他6种的使用方式几乎是一致的。/** Bu原创 2020-05-20 18:02:17 · 828 阅读 · 0 评论 -
Java NIO学习篇之NIO的基本认识
定义:NIO:是从jdk1.4提出的,本意是New IO(相对于传统的IO),也叫 No Blocked IO(只相对于网络IO),它的出现弥补传统IO的不足,提出了更加高效的方式。NIO对于网络IO而言:jdk1.4:采用了基于select/poll的多路复用IO模型。jdk1.5及以上:采用了基于epoll的多路复用IO模型。NIO对于文件IO而言:NIO对基于文件的IO还是阻塞模型的IO。只有基于网络IO才是非阻塞的。NIO的新特性:基于通道(Channel)和缓冲区(Buffer)原创 2020-05-18 19:56:40 · 222 阅读 · 0 评论 -
彻底搞懂阻塞、非阻塞、同步、异步
原文IO 概念区分:四个相关概念:同步(Synchronous)异步( Asynchronous)阻塞( Blocking )非阻塞( Nonblocking)这四个概念的含义以及相互之间的区别与联系,并不如很多网络博客所写的那么简单, 通过举一些什么商店购物, 买书买报的例子就能讲清楚。进程间通信的同步/异步, 阻塞/非阻塞首先强调一点, 网络上很多博文关于同步/异步, 阻塞非阻塞区别的解释其实都经不起推敲。 例如在 严肃 的这一高赞回答中 , 有如下解释(不准确):同步/异步关转载 2020-05-14 17:15:03 · 2361 阅读 · 0 评论 -
Springboot 配置文件的加载位置以及优先级和外部配置文件加载的优先级
配置文件的加载位置:springboot在启动时会扫描以下位置的application.properties文件或者application.yml文件作为springboot默认的配置文件。项目目录/config/项目目录是指与src目录同级的目录。项目目录/classpath:/config/classpath:/以上目录下的application.pr...原创 2020-05-08 21:16:50 · 1595 阅读 · 0 评论 -
Java I/O体系详细讲解
注意:此文侧重讲解Java的IO体系,至于具体API功能会在后面的文章详细讲解。I/O以及I/O流的定义:I/O实际上是Input/Output,也就是输入/输出,输入指的是从存储设备中读取数据,比如从磁盘读取数据到内存中;输出指的是把数据回写到存储设备中,比如把内存中的数据回写到磁盘中。流是一种抽象概念,可以类比成水流,而数据类比成水,数据流的传递可以类比成水流的传输,是一种无结构化的...原创 2020-05-08 18:36:49 · 384 阅读 · 0 评论 -
Java IO之File类详解
非原创 2020-05-08 18:21:56 · 640 阅读 · 0 评论 -
Spring Boot application.yml文件语法
Yaml文件:定义:Yaml文件是用Yaml语言写的文件,Yaml语言是一种可读性高,更注重数据表达,可扩展的一种数据标记语言。Yaml文件以.yaml或者.yml为后缀,例如application.yml、application.yaml都可以。非常适用于作为配置文件使用。Spring Boot就是可以用application.yml作为配置文件。基本语法:k:(空格)v,表示一对键值...原创 2020-05-06 23:02:44 · 1218 阅读 · 0 评论 -
@Value与@ConfigurationProperties注解的讲解与区别
@Value和@ConfigurationProperties:@Value注解与@ConfigurationProperties都是对对象属性进行注入配置的注解。@Value注解://源码:@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.ANNOTATION_TYPE})...原创 2020-05-06 22:59:34 · 6496 阅读 · 1 评论 -
Java I/O体系之Writer和Reader详细讲解
介绍:Writer是字符输出流的基类,Reader是字符输入流的基类。这两个类的实现类基本都是成对存在的,下面就成对讲解。字节流与字符流区别请查看:字节流和字符流的区别体系图:...原创 2020-04-29 22:29:14 · 1046 阅读 · 0 评论 -
Java I/O体系之OutputStream和InputStream详细讲解
f原创 2020-04-27 21:41:02 · 1096 阅读 · 0 评论 -
Java I/O之字节流与字符流的区别
字节流与字符流的区别:上图解析:字节输出流是直接把字节数据写出到磁盘或其他设备上,而字符输出流会先把字符输出流按一定的编码规则进行编码成二进制的字节输出流再写出到磁盘或其他设备上。字节输入流每次读取一个字节数据到内存(也可以使用缓冲区一次读取多个),而字符输入流是每次读取多个字节的数据到内存中,然后对读取的字节数据按照一定的编码规则进行解码,然后形成文本数据。总的来说,系统到磁盘或者其...原创 2020-04-26 18:17:06 · 964 阅读 · 0 评论 -
JVM初学之JVM的垃圾回收机制与垃圾回收器
如何判断对象是否"已死":首先,我们要对对象进行垃圾回收之前,就必须要判断对象是否“已死”,也就是是否可回收。这里有两种判断逻辑:引用计数法:在对象内部维护一个引用计数器,每当有一处地方引用该对象时,该计数器就加一,每当有一个引用失效时,该计数器就减一,当引用计数器为0时,表示该对象不可能再被使用,属于可回收对象。优点: 实现简单,判断效率高。缺点: 很难解决对象之间循环引用的问题。...原创 2020-04-16 16:38:58 · 189 阅读 · 0 评论 -
JVM初学之堆的内存模型
定义:堆是JVM运行时内存区域中最大的一个区域,我们平常创建的对象,数组的内存都是在堆上分配的。堆不仅仅只是一块大区域,它分为多个不同作用的区域。Old区。Young区。Young区又分为Eden区和两个大小相同的Survivor区,这两个区有的叫s1 和 s2 也有将from 区 和 to区。解释:如图,左边的是old区,右边的是Young区。Young区又分为Eden区和S...原创 2020-04-15 10:59:08 · 294 阅读 · 0 评论 -
JVM初学之JVM的运行时数据区
什么是JVM的运行时数据区:看下图:java虚拟机在该虚拟机进程运行过程中定义了各种各样的运行时数据区。用于存储java程序运行时各种不同的数据。有些运行时数据区是在java虚拟机进程开始时就创建,进程结束时销毁,但是一些运行时数据区是在线程创建时跟着创建,线程终止时销毁。JVM六大运行时数据区:堆。方法区。虚拟机栈。本地方法栈。程序计数器。运行时常量池。由于运行时常量...原创 2020-04-09 18:12:13 · 190 阅读 · 0 评论 -
JVM初学之类java的类加载器和双亲委派模型
类加载器:定义:java类加载器用于对java类的加载,java有自带的类加载器,也可以自定义类加载器实现定制化,类似于tomcat。java自带了三个系统的类加载器:如下图:双亲委派模型:背景:我们都知道,jdk中存在java.lang.String类,但是如果我们自定义一个全类名也为java.lang.String的类的话,如果都加载的话系统中就会存在多个全类名相同的类,这样会使得...原创 2020-04-07 22:22:57 · 130 阅读 · 0 评论 -
JVM初学之类的加载过程
类的加载过程分为三个步骤:装载:(这个过程使用类加载器完成的)a)类加载器通过一个类的全限定名找到该java源码文件,并转化为字节流。b)这些字节流中会有描述该类的静态存储结构的信息,根据这些信息在方法区转换为对应的运行时数据结构。b)在java堆里创建一个代表该类的java.lang.Class对象,用于作为访问这些运行时数据的入口。链接:a)验证:保证所加载的类的正确性,包括文件...原创 2020-04-07 21:21:56 · 136 阅读 · 0 评论 -
java高级之泛型详解
定义:在java1.5之后推出的。泛型又叫参数化类型或者类型参数化,在不创建新的类型的情况下,通过泛型指定不同类型来控制形参具体限制的类型,姑且把声明在类上的泛型也叫形参。泛型应用的意义:在编译期间确认类型,保证编译阶段时的类型不会出错。避免强制转换逻辑。可以提高代码的可重用性和增加程序的灵活性。注意事项:泛型的类型擦除:java的泛型只在编译阶段有效,泛型可以在逻辑上分成多种不...原创 2020-01-21 12:07:13 · 517 阅读 · 0 评论 -
java高级之注解详解
注解的本质和使用:java中的注解都是继承了Annotation的一个接口。java语言规范规定了注解的定义要用@interface。注解的作用:a) 注解配合放射可以很好起到了配置文件的作用。虽然耦合度高,但是好管理。反射请看:https://blog.csdn.net/qq_40837310/article/details/104043024b) 起标记作用。c) …//定...原创 2020-01-20 16:34:14 · 253 阅读 · 0 评论 -
详解java反射机制
定义:在java反射过程中给定一个类对象(Class对象),通过反射可以获取该对象的所有成员结构和类结构。给定一个对象,通过反射可以动态调用他的方法以及任意属性值得获取和赋值。静态成员变量和方法不需要给定对象。这种动态获取类的内容、创建对象以及动态调用对象的方法及操作属性的机制称为反射。优势:增加程序的灵活性,避免将程序逻辑写死在代码里面。代码简洁,可读性,提高代码复用率。劣...原创 2020-01-20 15:18:33 · 2394 阅读 · 0 评论