Java基础
文章平均质量分 94
敲代码的乔帮主
走在梦想的大道上,跌跌撞撞,时而悲伤,时而难过失落,是什么又让我扬起头继续向前呢?是心中的那一朵彼岸之花,牵使着你我之间的约定,成为我心中那一股永不可灭的骨气,终究是信仰。
展开
-
eclipse常用快捷键
eclipse常用快捷键总结:1.Alt+/:最常用快捷键2.Ctrl+Shift+P:查找对应的括号()3.Ctrl+Shift+O:自动导包4.Ctrl+Shift+F:自动调整代码界面风格5.Ctrl+K:查找下一个相同的词所在的位置(关键词)6.Ctrl+shift+/ \文档注释7.Ctrl+D 删除该行Navicat:1.ct原创 2017-06-11 20:55:46 · 385 阅读 · 0 评论 -
java类加载器学习笔记
复习下ClassLoader(类加载器)是相关知识类加载器classloader:用于编译java文件为class文件,将class文件装载到内存里面。贴一个有意思的代码,据说程序员们都会犯的一个错误/* *执行结果为 *count1=0 *count2=1 */class Singleton { private static Singleton sing原创 2017-07-31 11:23:08 · 385 阅读 · 0 评论 -
jvm-java内存区域
内存划分,咱们常说的划分方式,其实是指的Hotspot的划分方式,而非JVM规范所规定的。 Hotspot的内存划分简单说分为三个部分,Young Generation(年轻代)、Old Generation(年老代)以及Perm Generation(永久代)。其中的Young Generation(年轻代),又分为Eden、From和To,其中From和To又统称为Survivor Sp原创 2017-11-01 14:14:19 · 257 阅读 · 0 评论 -
深入理解 Java 垃圾回收机制
一:垃圾回收机制的意义java 语言中一个显著的特点就是引入了java回收机制,是c++程序员最头疼的内存管理的问题迎刃而解,它使得java程序员在编写程序的时候不在考虑内存管理。由于有个垃圾回收机制,java中的额对象不在有“作用域”的概念,只有对象的引用才有“作用域”。垃圾回收可以有效的防止内存泄露,有效的使用空闲的内存;内存泄露:指该内存空间使用完毕后未回收,在不涉及复杂数据结构转载 2017-11-13 13:29:03 · 279 阅读 · 0 评论 -
jvm-class加载机制
类加载过程 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载七个阶段。它们开始的顺序如下图所示: 其中类加载的过程包括了加载、验证、准备、解析、初始化五个阶段。在这五个阶段中,加载、验证、准备和初始化这四个阶段发生的顺序是确定的,而解析阶段则不一定,它在某些情况下可以在初始化阶段之后开始,这是为了支持Jav原创 2017-11-01 14:19:01 · 306 阅读 · 0 评论 -
Java 并发编程:核心理论
Java并发编程系列:Java 并发编程:核心理论 Java并发编程:Synchronized及其实现原理Java并发编程:Synchronized底层优化(轻量级锁、偏向锁)Java 并发编程:线程间的协作(wait/notify/sleep/yield/join)Java 并发编程:volatile的使用及其原理 并发编程是Java转载 2017-12-06 23:44:49 · 340 阅读 · 0 评论 -
LinkedBlockingQueue的put,add跟offer的区别
LinkedBlockingQueue顾名思义这是一个阻塞的线程安全的队列,底层应该采用链表实现。看其API的时候发现,添加元素的方法竟然有三个:add,put,offer。且这三个方法都是向队列尾部添加元素的意思。于是我产生了兴趣,要仔细探究一下他们之间的差别。1.首先看一下add方法:[java] view plain copy Inserts the原创 2017-11-03 19:52:10 · 799 阅读 · 0 评论 -
Java并发编程:线程池的使用
Java并发编程:线程池的使用 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。 那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任转载 2017-12-12 13:12:47 · 257 阅读 · 0 评论 -
死锁的四个必要条件以及怎样处理
一. 什么是死锁? 如果一个进程集合里面的每个进程都在等待这个集合中的其他一个进程(包括自身)才能继续往下执行,若无外力他们将无法推进,这种情况就是死锁,处于死锁状态的进程称为死锁进程二. 死锁产生的原因?1.因竞争资源发生死锁 现象:系统中供多个进程共享的资源的数目不足以满足全部进程的需要时,就会引起对诸资源的竞争而发生死锁现象(1)可剥夺资源和不可剥夺资源:可剥夺资源是原创 2017-11-03 20:47:29 · 643 阅读 · 0 评论 -
ReentrantLock和synchronized关键字有什么区别
java在编写多线程程序时,为了保证线程安全,需要对数据同步,经常用到两种同步方式就是Synchronized和重入锁ReentrantLock。相似点: 这两种同步方式有很多相似之处,它们都是加锁方式同步,而且都是阻塞式的同步,也就是说当如果一个线程获得了对象锁,进入了同步块,其他访问该同步块的线程都必须阻塞在同步块外面等待,而进行线程阻塞和唤醒的代价是比较高的(操作系统需要原创 2017-11-02 10:58:07 · 773 阅读 · 0 评论 -
HashMap为什么是不安全的?HashTable和ConcurrentHashMap为什么是安全的 ?
本文要解决的问题:最近无意中发现有很多对Map尤其是HashMap的线程安全性的话题讨论,在我的理解中,对HashMap的理解中也就知道它是线程不安全的,以及HashMap的底层算法采用了链地址法来解决哈希冲突的知识,但是对其线程安全性的认知有限,故写这篇博客的目的就是让和我一样对这块内容不熟悉的小伙伴有一个对HashMap更深的认知。哈希表在数据结构中有一种称原创 2017-11-03 19:40:25 · 1520 阅读 · 0 评论 -
ArrayList和LinkedList底层实现的区别
1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。 2.对于随机访问get和set,ArrayList优于LinkedList,因为ArrayList可以随机定位,而LinkedList要移动指针一步一步的移动到节点处。(参考数组与链表来思考) 3.对于新增和删除操作add和remove,LinedList比较占优势,只需要对指针进行原创 2017-06-14 19:13:07 · 364 阅读 · 0 评论 -
LinkedHashSet的实现原理
1. LinkedHashSet概述: LinkedHashSet是具有可预知迭代顺序的Set接口的哈希表和链接列表实现。此实现与HashSet的不同之处在于,后者维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,该迭代顺序可为插入顺序或是访问顺序。 注意,此实现不是同步的。如果多个线程同时访问链接的哈希Set,而其中至少一个线程修改了该Set,则它必须保持外原创 2017-06-14 19:25:16 · 942 阅读 · 0 评论 -
List、Set、Map的区别
(图一)1.面试题:你说说collection里面有什么子类。(其实面试的时候听到这个问题的时候,你要知道,面试官是想考察List,Set)正如图一,list和set是实现了collection接口的。 (图二)List:1.可以允许重复的对象。 2.可以插入多个null元素。 3.是一个有序容器,保持了每个元素的插入顺序,输出的顺序就是原创 2017-11-13 13:03:08 · 247 阅读 · 0 评论 -
HashMap的实现原理
1. HashMap概述: HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 2. HashMap的数据结构: 在java编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用),所有的数据结构都可以用这两个基本结构来构造的,H原创 2017-06-14 19:19:57 · 377 阅读 · 0 评论 -
ArrayList的实现原理
1. ArrayList概述: ArrayList是List接口的可变数组的实现。实现了所有可选列表操作,并允许包括 null 在内的所有元素。除了实现 List 接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小。 每个ArrayList实例都有一个容量,该容量是指用来存储列表元素的数组的大小。它总是至少等于列表的大小。随着向ArrayList中不断添加元素,其容量也自原创 2017-06-14 19:17:56 · 278 阅读 · 0 评论 -
LinkedHashMap的实现原理
1. LinkedHashMap概述: LinkedHashMap是Map接口的哈希表和链接列表实现,具有可预知的迭代顺序。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 LinkedHashMap实现与HashMap的不同之处在于,后者维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,该迭代顺序原创 2017-06-14 19:21:10 · 283 阅读 · 0 评论 -
HashMap和HashTable的区别
HashMap和Hashtable的比较是Java面试中的常见问题,用来考验程序员是否能够正确使用集合类以及是否可以随机应变使用多种思路解决问题。HashMap的工作原理、ArrayList与Vector的比较以及这个问题是有关Java 集合框架的最经典的问题。Hashtable是个过时的集合类,存在于Java API中很久了。在Java 4中被重写了,实现了Map接口,所以自此以后也成了Java原创 2017-11-13 13:06:23 · 174 阅读 · 0 评论 -
HashSet的实现原理
1. HashSet概述: HashSet实现Set接口,由哈希表(实际上是一个HashMap实例)支持。它不保证set的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用null元素。 2. HashSet的实现: 对于HashSet而言,它是基于HashMap实现的,HashSet底层使用HashMap来保存所有元素,因此HashSet的实现比较简原创 2017-06-14 19:22:36 · 426 阅读 · 0 评论 -
HashMap,LinkedHashMap,TreeMap的有序性
HashMap 是将 Key 做 Hash 算法,然后将 Hash 值映射到内存地址,直接取得 Key 所对应的数据。在 HashMap 中,底层数据结构使用的是数组,所谓的内存地址即数组的下标索引。HashMap 的高性能需要保证以下几点:Hash 算法必须是高效的;Hash 值到内存地址 (数组索引) 的算法是快速的;根据内存地址 (数组索引) 可以直接取得对应的值。HashMap原创 2017-11-01 13:13:42 · 285 阅读 · 0 评论 -
Vector & ArrayList
在写java的时候,基本上都喜欢用arraylist,甚至我都不知道有个vector的存在。查了一下发现又是线程安全问题。。。咋个线程安全天天围着我转呢。。。多得阿里巴巴,让我开始认识java的所谓线程安全问题。the following is from:http://blessed24.javaeye.com/blog/7513361. Vector & ArrayList 1)原创 2017-11-13 13:08:36 · 202 阅读 · 0 评论 -
Java8日期处理
目录1.java8之前的时间日期API1.1 java.lang.System类1.2 java.util.Date类1.3 java.text.SimpleDateFormat类1.4 java.util.Calendar 日历类2.java8中的日期处理API2.1Java 8中获取今天的日期2.2Java 8中获取年、月、日信息2.3Java 8中创建任意日期2.4Java 8中判断两个日期是否相等2.5Java 8中检查像生日这种周期性事件2...原创 2021-01-11 17:14:08 · 340 阅读 · 0 评论 -
注解和反射
目录1.注解1.1 什么是注解1.2内置注解1.2.1 @Override1.2.2 @Deprecated1.2.3 @suppressWarnings1.2.4 代码1.3 元注解1.3.1代码1.4自定义注解1.4.1代码2.反射2.1 静态语言 VS 动态语言动态语言静态语言2.2 引入反射2.3反射相关的主要API2.4获得反射对象2.5 Class类的常用方法2.6 如何获取Class类的实例2.7 哪些类型有.原创 2020-12-11 18:23:28 · 378 阅读 · 1 评论 -
文件File中list()和listFile()方法的区别
list()和listFiles()方法的区别在于:list()返回的是一个String类型数组,它只是一个数组,仅仅只是一个文件(文件夹)的名字而已;而listFiles()方法返回的是一个File类的引用,它具有类的所有属性和方法我们看一下测试代码:public class TextPath { public static void main(String[] args) {...原创 2019-11-30 20:04:28 · 2024 阅读 · 0 评论 -
Java序列化机制和原理
Java序列化算法透析 Serialization(序列化)是一种将对象以一连串的字节描述的过程;反序列化deserialization是一种将这些字节重建成一个对象的过程。Java序列化API提供一种处理对象序列化的标准机制。在这里你能学到如何序列化一个对象,什么时候需要序列化以及Java序列化的算法,我们用一个实例来示范序列化以后的字节是如何描述一个对象的信息的。序列化的必要性J原创 2017-12-12 12:49:51 · 1051 阅读 · 0 评论 -
面向对象五大基本原则
以前一直认为程序中的类有使用到封装继承多态就是面向对象设计,其实不然封装,继承,多态只是面向对象的三大特性,但是在设计程序的时候并不是说类的结构使用到了(或是体现出了)这三个特性就是面向对象,其实真正的面向对象设计是要符合下面的五大原则,面向对象的五大基本原则单一职责原则(SRP)开放封闭原则(OCP) 里氏替换原则(LSP) 依赖倒置原则(DIP) 接原创 2017-04-04 15:58:00 · 389 阅读 · 0 评论 -
Java陷阱之assert关键字
一、概述 在C和C++语言中都有assert关键,表示断言。在Java中,同样也有assert关键字,表示断言,用法和含义都差不多。 二、语法 在Java中,assert关键字是从JAVA SE 1.4 引入的,为了避免和老版本的Java代码中使用了assert关键字导致错误,Java在执行的时候默认是不启动断言检查的(这个时候,所有的断言语句都将忽略!),如果要开启断原创 2017-11-13 13:26:29 · 380 阅读 · 0 评论 -
java基础-BigInteger的使用
大数相乘这个点,在java里算是比较冷门的知识了吧,我一开始也没当回事,然而今年腾讯实习生春招笔试题告诉我实在是too young,在编程题里就有一道大数相乘的题目,结果当时我就懵逼了。现在补一下吧。BigInteger不是基本数据类型之一,它其实更像String,是Java里的一个类,然而它的初始化方式却没有String那么方便可以直接赋值,而是跟其他自定义的类一样,要调用它的构造器进行初始化原创 2017-11-12 13:59:08 · 19714 阅读 · 9 评论 -
Java基础-BigDecimal的使用
在实际的java项目中,不可避免地使用到各种运算,比如生成各种报表,数据的汇总等。对于这些问题,大致有2种解决途径,一种是在数据库查询时进行相关运算,直接得到所需要汇总计算后的结果;另外一种,是根据查询到的数据进行运算加工成所需的汇总数据。当然,就实际情况而言,是推荐使用第一种的,毕竟所有的或者说大部分的运算都通过数据库进行,可以节省时间,提高效率。但是,实际情况是,在绝大多数的情况下,只通过原创 2017-11-12 13:54:53 · 487 阅读 · 0 评论 -
使用eventqueue.invokelater()好处、原因
EventQueue.invokeLater(new Runnable() { public void run() { try { Array1 frame = new Array1(); frame.setVisible(true); }原创 2016-10-30 11:33:51 · 620 阅读 · 0 评论 -
Java中serialVersionUID的解释
serialVersionUID作用: 序列化时为了保持版本的兼容性,即在版本升级时反序列化仍保持对象的唯一性。有两种生成方式: 一个是默认的1L,比如:private static final long serialVersionUID = 1L; 一个是根据类名、接口名、成员方法及属性等来生成一个64位的哈希字段,比如: p原创 2016-11-10 16:42:30 · 469 阅读 · 0 评论 -
java基础-volatile关键字
这个关键字的重点就三个字,就是可见性。但是面试的时候,你说出可见性三个字,基本上满分100的话,最多只能得到20分。剩下的那80分,就要靠你用硬功夫去获得了。 所谓的硬功夫,其实就是要整明白,在并发当中,可见性到底是什么意思。那么,为了弄明白可见性什么意思,就需要你了解什么叫主存和工作内存。 只有把这些概念都搞明白了,你才会知道volatile的真正作用到底是什么。不过有一点要提醒你的原创 2017-11-01 14:07:50 · 280 阅读 · 0 评论 -
java基础-final关键字
1、final修饰类被final修饰的类不能被继承,因此final类的成员方法也不能被覆写,被final关键字修饰的类没有子类,因此类的实现细节也无法改变,无法被扩展。final类中的所有成员方法都会被隐式地指定为final方法,final类中的成员变量可以根据需要设为final。2、final修饰方法一个类中的方法如果被final关键字修饰,则其子类无法覆写该方法,只能被子类继承原创 2017-12-12 13:19:08 · 312 阅读 · 0 评论 -
java基础-hashCode与equals的区别与联系
为什么覆盖(不是重载)equals方法一定要覆盖hashCode方法因为如果只覆盖了equals而没有覆盖hashCode, 则两个不同的instance a和b虽然equals结果(业务逻辑上)相等,但却会有不同的hashcode,这样hashmap里面会同时存在a和b,而实际上我们需要hashmap里面只能保存其中一个,因为从业务逻辑方向看它们是相等的. equal转载 2017-12-12 13:32:38 · 1508 阅读 · 0 评论 -
jdk环境变量的配置 -windows
1.下载相应的jdk版本号,我一般使用1.7和1.8,并不是最新的就是最好的官网地址:https://www.oracle.com/technetwork/java/javase/downloads/index.html2.下载成功后直接下一步,下一步傻瓜式操作即可,因为这个东西我们安装好之后,一般不会变动,也是比较重要的一个环境变量直接装在C盘即可,也不会占用太大的存储空间3.我...原创 2019-01-09 20:09:53 · 356 阅读 · 0 评论 -
hashmap冲突的解决方法以及原理分析
在Java编程语言中,最基本的结构就是两种,一种是数组,一种是模拟指针(引用),所有的数据结构都可以用这两个基本结构构造,HashMap也一样。当程序试图将多个 key-value 放入 HashMap 中时,以如下代码片段为例:HashMap<String,Object> m=new HashMap<String,Object>(); m.put("a", "rrr...转载 2017-11-13 13:14:30 · 308 阅读 · 0 评论 -
HashMap与ConcurrentHashMap的区别
这个问题其实需要你知道两个知识就可以了,一个是HashMap的数据结构,一个是锁分段的技术 在这之前先普及一下HashMap的一些基本知识: (1)放入HashMap的元素是key-value对。 (2)底层说白了就是以前数据结构课程讲过的散列结构。 (3)要将元素放入到hashmap中,那么key的类型必须要实现实现hashcode方法,默认这个方法是根据对象的地...原创 2017-11-02 10:55:57 · 676 阅读 · 0 评论 -
java.concurrent.BlockingDeque接口
双端阻塞队列(BlockingDeque) BlockingDeque Java.util.concruuent包中的BlockingDeque接口是一种双端队列,向其中加入元素或从中取出元素都是线程安全的。这里展示如何使用BlockingDeque。BlockingDeque是一个双端队列,如果完全不可能对双端队列进行插入或者删除元素,它将会阻塞线程。deque 是...原创 2017-12-05 15:00:34 · 340 阅读 · 0 评论 -
java.util.Concurrent.BlockingQueue
一、什么是BlockingQueueBlockingQueue即阻塞队列,从阻塞这个词可以看出,在某些情况下对阻塞队列的访问可能会造成阻塞。被阻塞的情况主要有如下两种:1. 当队列满了的时候进行入队列操作2. 当队列空了的时候进行出队列操作因此,当一个线程试图对一个已经满了的队列进行入队列操作时,它将会被阻塞,除非有另一个线程做了出队列操作;同样,当一个线程试图对一个空队列进行出...原创 2017-12-05 15:28:55 · 542 阅读 · 0 评论 -
有return的情况下try catch finally的执行顺序
结论:1、不管有木有出现异常,finally块中代码都会执行;2、当try和catch中有return时,finally仍然会执行;3、finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,管finally中的代码怎么样,返回的值都不会改变,任然是之前保存的值),所以函数返回值是在finally执行前确定的;4、finally中最好不要包含r...原创 2018-04-08 11:29:31 · 1641 阅读 · 0 评论