![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java基础
文章平均质量分 58
baidu_32472003
这个作者很懒,什么都没留下…
展开
-
集合迭代时对集合进行修改抛ConcurrentModificationException原因的深究以及解决方案
大家应该都知道, 在java中, 在对一些集合迭代的过程中对集合进行一些修改的操作, 比如说add,remove之类的操作, 搞不好就会抛ConcurrentModificationException, 这一点在API文档上也有说的! 在迭代时只可以用迭代器进行删除!但是文档上只是说了删除, 其他操作也会引起ConcurrentModificationException, 这是为何呢.? 下面就跟着我一起探索源代码吧! 就以ArrayList为例!当我在迭代ArrayList时, 首先获取...转载 2022-03-01 15:02:50 · 254 阅读 · 0 评论 -
Java ConcurrentModificationException 异常分析与解决方案
一、单线程1. 异常情况举例只要抛出出现异常,可以肯定的是代码一定有错误的地方。先来看看都有哪些情况会出现ConcurrentModificationException异常,下面以ArrayList remove 操作进行举例:使用的数据集合: List myList = new ArrayList(); myList.add( "1"); myList.add( "2"); myList.a...转载 2022-03-01 15:01:46 · 641 阅读 · 0 评论 -
透彻理解Java并发编程
Java并发编程是整个Java开发体系中最难以理解但也是最重要的知识点,也是各类开源分布式框架中各个并发组件实现的基础。本专栏从Java多线程基础开始,先以java固有并发原语介绍多线程设计中的常见模式,然后从J.U.C并发包入手,分五大模块,从整体到局部,分析JUC包中每个工具类,以及模块中的各个组件之间关系。注意:其中Java多线程基础系列的文章完全参考结城浩的《Java多线程设计模式》一书,...转载 2020-02-26 11:16:27 · 215 阅读 · 0 评论 -
Object类详解
Object是所有类的父类,任何类都默认继承Object。Object是类层次结构的根类。每个类都使用Object作为超类。所有对象(包括数组)都实现这个类的所有方法。//Objectpublic class Object {private static native void registerNatives();/*对象初始化时自动调用此方法*/static { regi...转载 2019-08-23 20:04:09 · 387 阅读 · 0 评论 -
详解Java中的clone方法 -- 原型模式
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。本文链接:https://blog.csdn.net/brave2211/article/details/18369201Java中对象的创建clone顾名思义就是复制, 在Java语言中, clone方法被对象调用,所以会复制对象。所谓的复制对象,首先要分配一个和源对象同样大小的空间,...转载 2019-08-23 20:25:05 · 101 阅读 · 0 评论 -
Iterator和Iterable解析
之前一直搞不清楚Iterator和Iterable到底有什么关系,它们的区别是什么,今天查看Java集合类源码才发现其中的名堂,接下来给大家讲讲我的分析与理解。Iterable接口Iterable是接口,Iterable是1.5引入的新特性,Iterator是1.2就有了,二者都是为了迭代造作,Iterable只是包装了Iterator,从而允许实现此接口的对象成为foreach语句的目标...转载 2019-08-24 10:18:19 · 159 阅读 · 0 评论 -
[Algorithm] 字符串匹配算法——KMP算法
阅读目录1 字符串匹配 2 KMP算法 3 算法实现 https://www.cnblogs.com/maybe2030/p/4633153.html回到顶部1 字符串匹配 字符串匹配是计算机的基本任务之一。 字符串匹配是什么?举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"? 许...转载 2019-08-12 17:02:26 · 155 阅读 · 0 评论 -
Java中的断言assert
Java陷阱之assert关键字一、概述在C和C++语言中都有assert关键,表示断言。在Java中,同样也有assert关键字,表示断言,用法和含义都差不多。二、语法在Java中,assert关键字是从JAVA SE 1.4 引入的,为了避免和老版本的Java代码中使用了assert关键字导致错误,Java在执行的时候默认是不启动断言检查的(这个时候...转载 2019-08-21 21:25:52 · 172 阅读 · 0 评论 -
java源码品读(1)— Object
java是一门面向对象的语言,那么就从一切对象的根本Object读起吧。位置:java.lang.Object* Class {@code Object} is the root of the class hierarchy.* Every class has {@code Object} as a superclass. All objects,* including arra...转载 2019-08-22 21:08:08 · 98 阅读 · 0 评论 -
深入理解Java中为什么内部类可以访问外部类的成员
内部类简介虽然Java是一门相对比较简单的编程语言,但是对于初学者, 还是有很多东西感觉云里雾里, 理解的不是很清晰。内部类就是一个经常让初学者感到迷惑的特性。 即使现在我自认为Java学的不错了, 但是依然不是很清楚。其中一个疑惑就是为什么内部类对象可以访问外部类对象中的成员(包括成员变量和成员方法)? 早就想对内部类这个特性一探究竟了,今天终于抽出时间把它研究了一下。内部类就是定义在一...转载 2019-08-19 14:29:04 · 310 阅读 · 0 评论 -
为什么java内部类访问局部变量必须声明为final?
先抛出让我疑惑了很久的一个问题编程时,在线程中使用局部变量时候经常编译器会提示:局部变量必须声明为finalpackage test;public class ThreadTest { public void function(String a) { new Thread(){ @Override ...转载 2019-08-07 10:11:02 · 196 阅读 · 0 评论 -
内部类访问局部变量时,为什么需要加final关键字
是变量的作用域的问题,因为匿名内部类是出现在一个方法的内部的,如果它要访问这个方法的参数或者方法中定义的变量,则这些参数和变量必须被修饰为final。因为虽然匿名内部类在方法的内部,但实际编译的时候,内部类编译成Outer.Inner,这说明内部类所处的位置和外部类中的方法处在同一个等级上,外部类中的方法中的变量或参数只是方法的局部变量,这些变量或参数的作用域只在这个方法内部有效。因为编译的时候内...转载 2019-08-06 20:21:38 · 475 阅读 · 0 评论 -
设计模式与Android(篇二)
对于设计模式这是牛人们对代码中的一定场景而进行提炼的结果, 对于一个进阶的开发人员这是一个必不可少的技能. 当代码越写越好, 更易扩展更加灵活. 这对于Coder来说是最酷的事情.通过设计模式和Android源码中的关系, 可以更加清楚的记住各个模式的特点, 和源码中的实现方式. 多练多分析之间的关系这是必不可少的一步!设计模式与Android(篇一)设计模式与Android(篇二)设计模式与An...转载 2018-04-09 19:38:56 · 238 阅读 · 0 评论 -
JAVA方法中的参数用final来修饰的原因
JAVA方法中的参数用final来修饰的原因 很多人都说在JAVA中用final来修饰方法参数的原因是防止方法参数在调用时被篡改,其实也就是这个原因,但理解起来可能会有歧义,有的人认为是调用语句的地方的变量的实际值不会被修改,另一种理解就是仅在调用方法内部不能被修改。实际上第一种理解是有错误的,对于基本类型来说在调用的地方,用不用final来修饰都是一样的效果,如下面的代码:publi cstat...转载 2018-04-02 16:56:15 · 502 阅读 · 0 评论 -
深入理解Java中的final关键字
Java中的final关键字非常重要,它可以应用于类、方法以及变量。这篇文章中我将带你看看什么是final关键字?将变量,方法和类声明为final代表了什么?使用final的好处是什么?最后也有一些使用final关键字的实例。final经常和static一起使用来声明常量,你也会看到final是如何改善应用性能的。final关键字的含义?final在Java中是一个保留的关键字,可以声明成员变量、...转载 2018-04-02 16:58:08 · 74 阅读 · 0 评论 -
浅析Java中的final关键字
浅析Java中的final关键字 谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字。另外,Java中的String类就是一个final类,那么今天我们就来了解final这个关键字的用法。下面是本文的目录大纲: 一.final关键字的基本用法 二.深入理解final关键字 若有不正之处,请多多谅解并欢迎指正。 请尊重作者劳动成果,转载请标明原文...转载 2018-04-02 17:05:18 · 80 阅读 · 0 评论 -
还原真像:ArrayList性能几乎完美,100万数据测试
还原真像:ArrayList性能几乎完美,100万数据测试程序汪汪 2018-07-17 22:17:21背景程序员面试题中经常遇到ArrayList与LinkedList区别,现实的测试情况肯定没多少人清楚。 理论是这样,现实测试情况很打脸啊。学习目标搞清楚JDK1.8种ArrayList与LinkedList的性能情况代码例子环境准备:java jdk1....转载 2018-07-18 09:07:51 · 7962 阅读 · 5 评论 -
Java 8 时间,字符串和Long时间戳互转
每次用到时间相关的处理都下意识的想到了一个很讨人厌但是读起来又及其顺口的类:SimpleDateFormat,有木有同感! 不过java8来以后就基本告别自行车,不SimpleDateFormat 了。 下面就简单的总结一下java 8中常见的日期、时间的使用。只写最常用的几个点,这里面的方法太多了。 1、取当前时间戳Long millisecond = Instant.now().t...转载 2018-07-25 14:35:31 · 6578 阅读 · 0 评论 -
非阻塞同步算法与CAS(Compare and Swap)无锁算法
锁(lock)的代价锁是用来做并发最简单的方式,当然其代价也是最高的。内核态的锁的时候需要操作系统进行一次上下文切换,加锁、释放锁会导致比较多的上下文切换和调度延时,等待锁的线程会被挂起直至锁释放。在上下文切换的时候,cpu之前缓存的指令和数据都将失效,对性能有很大的损失。操作系统对多线程的锁进行判断就像两姐妹在为一个玩具在争吵,然后操作系统就是能决定他们谁能拿到玩具的父母,这是很慢的。用户态...转载 2018-07-26 17:19:59 · 116 阅读 · 0 评论 -
为什么volatile不能保证原子性而Atomic可以?
在上篇《非阻塞同步算法与CAS(Compare and Swap)无锁算法》中讲到在Java中long赋值不是原子操作,因为先写32位,再写后32位,分两步操作,而AtomicLong赋值是原子操作,为什么?为什么volatile能替代简单的锁,却不能保证原子性?这里面涉及volatile,是java中的一个我觉得这个词在Java规范中从未被解释清楚的神奇关键词,在Sun的JDK官方文档是这样形容...转载 2018-07-26 17:20:59 · 177 阅读 · 0 评论 -
ThreadLocal源码解读
1. 背景ThreadLocal源码解读,网上面早已经泛滥了,大多比较浅,甚至有的连基本原理都说的很有问题,包括百度搜索出来的第一篇高访问量博文,说ThreadLocal内部有个map,键为线程对象,太误导人了。ThreadLocal非常适合对Java多线程编程感兴趣的程序员作为入门类阅读,原因两方面:加上注释源码也不过七八百行。 结构清晰,代码简洁。本文重点导读ThreadLoc...转载 2018-08-01 19:17:18 · 129 阅读 · 0 评论 -
一看你就懂,超详细java中的ClassLoader详解
本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布ClassLoader翻译过来就是类加载器,普通的java开发者其实用到的不多,但对于某些框架开发者来说却非常常见。理解 ClassLoader的加载机制,也有利于我们编写出更高效的代码。ClassLoader的具体作用就是将class文件加载到jvm虚拟机中去,程 序就可以正确运行了。但是,jvm启动的时候,并不会一次性加载所...转载 2018-08-03 12:59:24 · 133 阅读 · 0 评论 -
Thread类源码分析
Thread类源码分析public class Thread implements Runnable Thread实现Runnable接口,实现run方法 private static native void registerNatives(); static { registerNatives(); }从上面的代码中看到定义了一个静态初始...转载 2018-08-03 13:04:50 · 139 阅读 · 0 评论 -
设计模式与Android(篇一)
试图看懂 --> 试图模仿 --> 试图记住 --> 试图熟练对于设计模式这是牛人们对代码中的一定场景而进行提炼的结果, 对于一个进阶的开发人员这是一个必不可少的技能. 当代码越写越好, 更易扩展更加灵活. 这对于Coder来说是最酷的事情.通过设计模式和Android源码中的关系, 可以更加清楚的记住各个模式的特点, 和源码中的实现方式. 多练多分析之间的关系这是必不可少的一步...转载 2018-04-09 19:37:38 · 223 阅读 · 0 评论