Java基础
Hutt_1024
Java码农一枚
展开
-
BlockingQueueDemo阻塞队列(种类、底层数据结构、使用场景)
栈和队列栈 :先进后出,后进先出队列 :先进先出阻塞队列阻塞:必须要阻塞/不得不阻塞阻塞队列是一个队列,在数据结构中起的作用如图:当队列是空的,从队列中获取元素的操作将会被阻塞。当队列是满的,...原创 2020-11-14 16:37:50 · 460 阅读 · 0 评论 -
JAVA锁的膨胀过程
一、背景在 Java 语言中,使用 Synchronized 是能够实现线程同步的,即加锁。并且实现的是悲观锁,在操作同步资源的时候直接先加锁。加锁可以使一段代码在同一时间只有一个线程可以访问,在增加安全性的同时,牺牲掉的是程序的执行性能,所以为了在一定程度上减少获得锁和释放锁带来的性能消耗,在 jdk6 之后便引入了“偏向锁”和“轻量级锁”,所以总共有4种锁状态,级别由低到高依次为:无锁状态、偏向锁状态、轻量级锁状态、重量级锁状态。这几个状态会随着竞争情况逐渐升级,此过程为不可逆。所以 synchro原创 2020-11-14 15:31:34 · 1088 阅读 · 0 评论 -
如何实现让类加载器去加载网络上的资源文件?怎么自定义类加载器?自定义的加载器还符合双亲委托机制吗?怎么打破双亲委托机制?
为什么要自定义加载器首先我们来了解一下创建自定义加载器的原因:1、存放在自定义路径上的类,需要通过自定义类加载器去加载。【注意:AppClassLoader加载classpath下的类】2、类不一定从文件中加载,也可能从网络中的流中加载,这就需要自定义加载器去实现加密解密。3、可以定义类的实现机制,实现类的热部署,如OSGi中的bundle模块就是通过实现自己的ClassLoader实现的,如tomcat实现的自定义类加载模型。总结:要让类加载器去加载网络上的资源文件,就得创建自定义加载器。原创 2020-11-12 22:55:20 · 319 阅读 · 0 评论 -
从设计的目的谈接口和抽象类的区别
接口的设计目的,是对类的行为进行约束(更准确的说是一种“有”约束,因为接口不能规定类不可以有什么行为),也就是提供一种机制,可以强制要求不同的类具有相同的行为。它只约束了行为的有无,但不对如何实现行为进行限制。对“接口为何是约束”的理解,我觉得配合泛型食用效果更佳。而抽象类的设计目的,是代码复用。当不同的类具有某些相同的行为(记为行为集合A),且其中一部分行为的实现方式一致时(A的非真子集,记为B),可以让这些类都派生于一个抽象类。在这个抽象类中实现了B,避免让所有的子类来实现B,这就达到了代码复用.原创 2020-10-15 08:54:33 · 383 阅读 · 0 评论 -
什么是浅拷贝和深拷贝?
在Java中,除了 基本数据类型之外,还存在 类的实例对象这个引用数据类型,而一般使用 “=”号做赋值操作的时候,对于基本数据类型,实际上是拷贝的它的值,但是对于对象而言,其实赋值的只是这个对象的引用,将原对象的引用传递过去,他们实际还是指向的同一个对象。而浅拷贝和深拷贝就是在这个基础上做的区分,如果在拷贝这个对象的时候,只对基本数据类型进行了拷贝,而对引用数据类型只是进行引用的传递,而没有真实的创建一个新的对象,则认为是浅拷贝。反之,在对引用数据类型进行拷贝的时候,创建了一个新的对象,并且复制其内的成员原创 2020-10-11 10:55:03 · 340 阅读 · 0 评论 -
try-catch-finally的使用
try 块: 用于捕获异常。其后可接零个或多个 catch 块,如果没有 catch 块,则必须跟一个 finally 块。 catch块: 用于处理 try 捕获到的异常。 finally 块: 无论是否捕获或处理异常,finally 块里的语句都会被执行。当在 try块或 catch 块中遇到 return 语句时,finally 语句块将在方法返回之前被执行。在以下 4 种特殊情况下,finally 块不会被执行:在 finally 语句块第一行发生了异常。 因为在其他行,finally.原创 2020-09-29 09:15:43 · 1466 阅读 · 0 评论 -
Java泛型了解么?什么是类型擦除?介绍一下常用的通配符?
Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。Java的泛型是伪泛型,这是因为Java在编译期间,所有的泛型信息都会被擦掉,这也就是通常所说类型擦除 。 更多关于类型擦除的问题,可以查看这篇文章:《Java泛型类型擦除以及类型擦除带来的问题》 。List<Integer> list = new ArrayList<>转载 2020-09-27 10:43:49 · 1029 阅读 · 0 评论 -
Java中的集合
Java集合1.Java集合框架概述一方面, 面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象的操作,就要对对象进行存储。另 一方面,使用Array存储对象方面具有一些弊端,而Java 集合就像一种容器,可以动态地把多个对象的引用放入容器中。数组在内存存储方面的特点:数组初始化以后,长度就确定了。数组声明的类型,就决定了进行元素初始化时的类型数组在存储数据方面的弊端:数组初始化以后,长度就不可变了,不便于扩展数组中提供的属性和方法少,不便于进行添加、删除、插入等操作,原创 2020-09-27 10:24:18 · 475 阅读 · 0 评论 -
continue、break、和return的区别是什么?
在循环结构中,当循环条件不满足或者循环次数达到要求时,循环会正常结束。但是,有时候可能需要在循环的过程中,当发生了某种条件之后 ,提前终止循环,这就需要用到下面几个关键词:continue :指跳出当前的这一次循环,继续下一次循环。break :指跳出整个循环体,继续执行循环下面的语句。return 用于跳出所在方法,结束该方法的运行。return 一般有两种用法:return; :直接使用 return 结束方法执行,用于没有返回值函数的方法return value; :return 一个特定原创 2020-09-27 09:53:53 · 302 阅读 · 0 评论