java
文章平均质量分 72
Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程 。
suixinghero
真正的大师永远怀着一颗学徒的心
展开
-
JDK动态代理源码解析
一、基本介绍1. 代理模式的基本介绍代理模式:为一个对象提供一个替身,以控制对这个对象的访问。即通过代理对象访问目标对象。这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。被代理的对象可以是远程对象、创建开销大的对象或者需要安全控制的对象代理模式有不同的形式,主要有三种静态代理、动态代理(JDK代理、接口代理)和CGLIB代码(可以在内存动态创建对象,而不需要实现接口,他是属于动态代理的范畴)二、静态代理1. 静态代理模式代码的基本介绍静态代理在使用时原创 2021-08-08 16:06:27 · 919 阅读 · 2 评论 -
synchronized的锁升级过程和详细的代码演示
在了解这个知识之前先了解Java对象的内容布局一、synchronized的信息是存储在对象的markword中 Object o = new Object(); System.out.println(ClassLayout.parseInstance(o).toPrintable()); synchronized (o) { System.out.println(ClassLayout.parseInstance(o).toPrintable()); }在没有加锁之前的原创 2021-02-28 16:35:28 · 658 阅读 · 3 评论 -
CAS(compare and swap)详解,追溯到HOTSPOT源码
问:但是大家有没有想过一个问题就是其他线程修改过后的值与修改之前的值一样,就会出现ABA问题。答:只需要加个版本号就行,在修改值的时候相应的版本号加一就行,读取比较的时候随带比较以下版本好就行。问:大家想一下,一个线程在比较N和E,而且N和E相等正准备更新值为V的时候,另外一个线程正好把值改成了H,在预想中这是会出现的,但是为什么没有出现呢?答:我们可以从AtomicInteger中寻找答案,如下图:上面的方法换成上面我们设想的值如下:public final int getAndAddI.原创 2021-02-27 15:08:16 · 223 阅读 · 2 评论 -
Java中的泛型
一、泛型类(1)泛型类的定义语法class 类名称 <泛型标识,泛型标识,...> { private 泛型标识 变量名; ...... }(2)常用的泛型标识:T、E、K、V/** * @author xujin * @createtime 2021-02-14 14:29 * @description * 泛型类的定义 * <T>泛型标识-类型参数 * 创建对象的时候指定具体的数据类型 * 注意: * (1)泛型类在创建对象的时候原创 2021-02-17 20:28:11 · 305 阅读 · 2 评论 -
JAVA中对象在内存中的布局及Object o = new Object()在内存中占了多少字节
一、引入以下Jar包 <dependency> <groupId>org.openjdk.jol</groupId> <artifactId>jol-core</artifactId> <version>0.9</version> </dependency>二、执行以下语句Object o = new O原创 2021-01-10 21:37:37 · 187 阅读 · 0 评论 -
Guava Cache缓存入门
一、在什么场景下需要使用缓存呢?缓存在很多场景下都是需要使用的。比如在需要一个值的过程和代价特别高的情况下,而且对这个值的需要不止一次的情况下,我们可能就需要考虑使用缓存了。二、在什么场景下需要使用本地缓存呢?一般来说要使用本地缓存,首先,是缓存中的数据总量不会超过内存的容量。并且你愿意消耗一些内存来提升速度。三、那怎么实现本地缓存呢?一般来说我们可以直接使用jdk里提供的数据结构来作为缓存,但这样有个问题就是缓存的一些机制,比如缓存过期的淘汰策略,缓存的初始化,缓存最大容量的设置,缓存的共享等等原创 2020-07-11 20:18:03 · 412 阅读 · 1 评论 -
JDK1.8新特性--重复注解
一、重复注解在JDK1.8之后标注在类,方法等上面的注解可以重复出现,如下图但是如果你直接在方法等上面注多个相同的注解,程序还是会报错,错误信息提示注解MyAnnotation没有被一个Repeatable注解修饰,而Repeatable注解里面传入的参数必须也是一个注解,这个注解所包含的值必须有一个要重复注解的这个注解类型的数组。我们同样可以和以前一样通过反射得到注解的值,如下代码pub...原创 2020-02-02 15:37:09 · 515 阅读 · 0 评论 -
JDK1.8新特性--新时间与日期API
一、传统的时间与日期API传统的时间与日期API最大的缺点就是线程不安全看如下代码:public class TestSimpleDateformat { public static void main(String[] args) { ExecutorService executorService = Executors.newFixedThreadPool(10)...原创 2020-02-01 18:05:55 · 772 阅读 · 0 评论 -
JDK1.8新特性---接口中的默认方法与静态方法
一、默认方法在JDK1.8之后,接口中可以有默认方法interface MyInterface1 { default String getName(){ return "哈哈哈"; } }但是这会出现一个问题,就是若一个类它即继承另一个类,又实现了一个接口,而那个接口里面的默认方法的方法名和参数与继承类中的方法名和参数相同,那最后调用方法是到底是调用谁的方...原创 2020-01-31 19:56:46 · 536 阅读 · 0 评论 -
JDK1.8新特性---Optional容器类
一、Optiona容器类说明Optional类(java.util.Optional)是一个容器类,代表一个值存在或不存在,原来用null表示一个值不存在,现在Optional可以更好的表达这个概念。并且可以避免空指针异常。二、Optional容器类常用方法说明常用方法:Optional.of(T t):创建一个Optional实例Optional.empty():创建一个空的Optio...原创 2020-01-23 21:37:54 · 299 阅读 · 1 评论 -
JDK1.8新特性---Stream流
一.流(Stream)到底是什么?是数据渠道,用于操作数据源(集合、数组等)所生成元素的序列。“集合讲的是数据,流讲的是计算”注意:1.Stream自己不会存储元素。2.Stream不会改变源对象。相反,他们会返回一个持有新结果的Stream。3.Stream操作是延迟执行的。这意味它们会等到需要结果的时候执行。二.Stream 的三个操作步骤1.创建Streampubli...原创 2020-01-22 18:23:35 · 259 阅读 · 0 评论 -
JDK1.8新特性---方法引用和构造器引用
/*一、方法引用:若 Lambda 体中的内容有方法已经实现了,我们可以使用“方法引用”(可以理解为方法* 引用是Lambda 表达式的另一种表现形式)* 主要有三种语法格式:** 注意:在使用 1 和 2 的时候有一个前提条件,就是函数式接口里面抽象方法的参数列表和返回值* 要和Lambda体中方法的参数列表和返回值一致。* 1.对象::实例方法名* 2.类::静态...原创 2020-01-05 11:26:17 · 363 阅读 · 0 评论 -
JDK1.8新特性--Lambda表达式
/* 一、Lambda 表达式的基础语法:Java8中引入了一个新的操作符“->” * 该操作符为箭头操作符或Lambda操作符,箭头操作符将Lambda表达式 * 拆分成两部分 * 左侧:Lambda 表达式的参数列表 * 右侧:Lambda表达式中所需执行的功能,即Lambda体 * * 语法: * 语法格式一:无参无返回值 * ()->S...原创 2020-01-04 15:57:22 · 115 阅读 · 0 评论 -
创建线程的四种方法,以及它们的优缺点
1.用继承Thread类,重写它的run()方法。我们可以从图中发现Thread类实现了Runnable接口并且重写了run()方法。而创建线程的第一种方式就是继承Thread类并重写它的run()方法。但是这样做就有缺点,你继承Thread类之后就不能继承其它的类了,不易后期的维护。我就以计算1-100之内数之和为例:public class TestThread { publi...原创 2019-12-08 17:01:04 · 705 阅读 · 0 评论 -
多线程访问同步方法的7种情况
如果大家想了解synchronized的信息,可以看我的另外一篇博客:https://blog.csdn.net/killerofjava/article/details/1033744091.两个线程同时访问一个对象的同步方法。public class SynchronizedObjectMethod3 implements Runnable { static Synchronize...原创 2019-12-04 16:34:42 · 149 阅读 · 0 评论 -
synchronized详解
1.synchronized简介:1.1synchronized的作用:官方解释:Synchronized methods enable a simple strategy for preventing thread interference and memory consistency errors:if an objects is visible to more than one thr...原创 2019-12-04 14:11:34 · 4994 阅读 · 0 评论 -
json、对象和集合之间的互转
第一步jackson的相关依赖<!-- Jackson Json处理工具包 --><dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <ve...原创 2019-11-13 18:17:30 · 144 阅读 · 0 评论