java基础与高级特性
mhHao
Talk less, do more.
展开
-
java 中几种常用数据结构
java中有几种常用的数据结构,主要分为Collection和map两个主要接口(接口只提供方法,并不提供实现),而程序中最终使用的数据结构是继承自这些接口的数据结构类。其主要的关系(继承关系)有: (----详细参见java api文档!)Collection---->Collections ...转载 2019-12-24 13:39:56 · 114 阅读 · 0 评论 -
Java 8系列之重新认识HashMap
HashMap是Java程序员使用频率最高的用于映射(键值对)处理的数据类型。随着JDK(Java Developmet Kit)版本的更新,JDK1.8对HashMap底层的实现进行了优化,例如引入红黑树的数据结构和扩容的优化等。本文结合JDK1.7和JDK1.8的区别,深入探讨HashMap的结构实现和功能原理。Java为数据结构中的映射定义了一个接口java.util.Map,此接口主要有...转载 2019-09-29 12:56:34 · 80 阅读 · 0 评论 -
Hashmap为什么容量是2的幂次,什么是负载因子
本人在准备求职面试的时候,面经里经常会有这样的一个面试题:“Hashmap为什么容量是2的幂次,什么是负载因子?”在最初的时候,我也反复搜索,但是没有一篇博文能完整或清晰解答这个问题。在下此文为博采众长,总结了多篇文章对于这个问题的解答,希望对大家有所帮助。第一篇:本文来自:高爽|Coder,原文地址:http://blog.csdn.net/ghsau/article/details/1...转载 2019-09-27 06:57:53 · 240 阅读 · 0 评论 -
HashMap的死锁,并发问题
之前在讲HashMap的时候提到过HashMap线程不安全,在并发环境下会发生死锁问题,将导致CPU占用率接近100%。其实死锁的说法并不很贴切,应该说是一种死循环。在JDK 1.8中,Map相关类的实现发生了很大变化,引入了红黑树的概念,本篇以JDK 1.7中的实现方式讲解HashMap的并发问题,以方便理解。说明JDK 1.8和JDK 1.7中,Map相关类的大体实现思想变化不大,知识引入...转载 2019-09-25 08:51:58 · 944 阅读 · 0 评论 -
Java7/8 中的 HashMap 和 ConcurrentHashMap 全解析
今天发一篇"水文",可能很多读者都会表示不理解,不过我想把它作为并发序列文章中不可缺少的一块来介绍。本来以为花不了多少时间的,不过最终还是投入了挺多时间来完成这篇文章的。网上关于 HashMap 和 ConcurrentHashMap 的文章确实不少,不过缺斤少两的文章比较多,所以才想自己也写一篇,把细节说清楚说透,尤其像 Java8 中的 ConcurrentHashMap,大部分文章都说不清...转载 2019-08-18 10:50:32 · 85 阅读 · 0 评论 -
jdk源码剖析: 对象内存布局、synchronized原理
正文很多人一提到锁,自然第一个想到了synchronized,但一直不懂源码实现,现特地追踪到C++层来剥开synchronized的面纱。网上的很多描述大都不全,让人看了不够爽,看完本章,你将彻底了解synchronized的核心原理。回到顶部一、启蒙知识预热开启本文之前先介绍2个概念1.1.cas操作为了提高性能,JVM很多操作都依赖CAS实现,一种乐观锁的实现。本文锁优化中大量...转载 2019-12-17 14:18:14 · 227 阅读 · 0 评论 -
注解Annotation实现原理与自定义注解例子
什么是注解?对于很多初次接触的开发者来说应该都有这个疑问?Annontation是Java5开始引入的新特征,中文名称叫注解。它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程序元素(类、方法、成员变量等)进行关联。为程序的元素(类、方法、成员变量)加上更直观更明了的说明,这些说明信息是与程序的业务逻辑无关,并且供指定的工具或框架使用。Annontation像一种...转载 2019-09-04 09:28:21 · 284 阅读 · 0 评论 -
Java基础14:离开IDE,使用java和javac构建项目
https://www.cnblogs.com/xiazdong/p/3216220.htmlhttps://blog.csdn.net/mingover/article/details/57083176javac命令初窥注:以下红色标记的参数在下文中有所讲解。本部分参考https://www.cnblogs.com/xiazdong/p/3216220.html用法: javac其中...转载 2019-09-04 10:19:07 · 237 阅读 · 0 评论 -
Java基础18:Java序列化与反序列化
本文参考 http://www.importnew.com/17964.html和https://www.ibm.com/developerworks/cn/java/j-lo-serial/序列化与反序列化概念序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。一般将一个对象存储至一个储存媒介,例如档案或是记亿体缓冲等。在网络传输过程中,可以是字节或是...转载 2019-09-04 10:34:53 · 125 阅读 · 0 评论 -
Java基础20:Java8新特性终极指南
这是一个Java8新增特性的总结图。接下来让我们一次实践一下这些新特性吧Java语言新特性Lambda表达式Lambda表达式(也称为闭包)是整个Java 8发行版中最受期待的在Java语言层面上的改变,Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中),或者把代码看成数据:函数式程序员对这一概念非常熟悉。在JVM平台上的很多语言(Groovy,Scala,……)从一开始就...转载 2019-09-04 10:35:55 · 167 阅读 · 0 评论 -
Arrays.asList() 不能用其修改方法
引语阿里巴巴java开发规范说到使用工具类Arrays.asList()方法把数组转换成集合时,不能使用其修改集合相关的方法,它的add/remove/clear方法会抛出UnsupportedOperationException(),我们来看一下为什么会出现这种情况.问题分析我们做个测试public static void main(String[] args) {List list ...原创 2019-09-13 07:56:23 · 970 阅读 · 0 评论 -
单例模式的几种写法
饿汉模式class Singleton { private static Singleton instance = new Singleton(); private Singleton() { } public static Singleton getInstance() { return instance; }}懒汉模式class Singleton { priv...原创 2019-09-28 08:48:23 · 88 阅读 · 0 评论 -
Java基础13:反射详解
回顾:什么是反射?反射(Reflection)是Java 程序开发语言的特征之一,它允许运行中的 Java 程序获取自身的信息,并且可以操作类或对象的内部属性。Oracle官方对反射的解释是Reflection enables Java code to discover information about the fields, methods and constructors of loa...转载 2019-09-04 09:27:34 · 237 阅读 · 0 评论 -
Java基础12:深入理解Class类和Object类
Java中Class类及用法Java程序在运行时,Java运行时系统一直对所有的对象进行所谓的运行时类型标识,即所谓的RTTI。这项信息纪录了每个对象所属的类。虚拟机通常使用运行时类型信息选准正确方法去执行,用来保存这些类型信息的类是Class类。Class类封装一个对象和接口运行时的状态,当装载类时,Class类型的对象自动创建。说白了就是:Class类也是类的一种,只是名字和class...转载 2019-09-03 17:42:44 · 229 阅读 · 0 评论 -
Java基础15:深入剖析Java枚举类
初探枚举类在程序设计中,有时会用到由若干个有限数据元素组成的集合,如一周内的星期一到星期日七个数据元素组成的集合,由三种颜色红、黄、绿组成的集合,一个工作班组内十个职工组成的集合等等,程序中某个变量取值仅限于集合中的元素。此时,可将这些数据集合定义为枚举类型。因此,枚举类型是某类数据可能取值的集合,如一周内星期可能取值的集合为: { Sun,Mon,Tue,Wed,Thu,Fri,Sat}...转载 2019-09-02 18:59:09 · 228 阅读 · 0 评论 -
Java基础2:基本数据类型与常量池
本节主要介绍基本数据类型的大小,自动拆箱装箱,基本数据类型的存储方式,以及常量池的原理。具体代码在我的GitHub中可以找到https://github.com/h2pl/MyTech文章首发于我的个人博客:https://h2pl.github.io/2018/04/23/javase2基本数据类型的大小int 32位 4字节short 16位float 32位double 6...转载 2019-08-22 15:02:08 · 153 阅读 · 0 评论 -
Java基础2:基本数据类型与常量池
本节主要介绍基本数据类型的大小,自动拆箱装箱,基本数据类型的存储方式,以及常量池的原理。具体代码在我的GitHub中可以找到https://github.com/h2pl/MyTech文章首发于我的个人博客:https://h2pl.github.io/2018/04/23/javase2基本数据类型的大小int 32位 4字节short 16位float 32位double 6...转载 2019-08-27 20:10:21 · 120 阅读 · 0 评论 -
Java基础3:深入理解String及包装类
String的连接@Testpublic void contact () {//1连接方式String s1 = “a”;String s2 = “a”;String s3 = “a” + s2;String s4 = “a” + “a”;String s5 = s1 + s2;//表达式只有常量时,编译期完成计算//表达式有变量时,运行期才计算,所以地址不一样System....转载 2019-08-27 20:57:41 · 101 阅读 · 0 评论 -
java基础4:深入理解final关键字
final关键字可以修饰类、方法和引用。修饰类,该类不能被继承。并且这个类的对象在堆中分配内存后地址不可变。修饰方法,方法不能被子类重写。修饰引用,引用无法改变,对于基本类型,无法修改值,对于引用,虽然不能修改地址值,但是可以对指向对象的内部进行修改。比如char[0] = ‘a’。不改变对象内存地址,只改变了值。具体看一下下面的栗子:final class Fi {int a;f...转载 2019-08-27 22:20:58 · 81 阅读 · 0 评论 -
Java基础5:抽象类和接口
1 抽象类一般会实现一部分操作,并且留一些抽象方法让子类自己实现,比如Stringbuffer和Stringbuilder的父类abstractStringbuilder。2 接口一般指一种规定,比如一个map接口中,可能需要实现增删改查等功能,如果你想实现一个具体map,这些方法就必须按照规定去实现。3 另外,一个类可以实现多个接口,但是不能继承多个类。然而接口却可以继承多个其他接口。这一...转载 2019-08-27 22:32:42 · 99 阅读 · 0 评论 -
Java基础6:代码块与代码加载顺序
代码块:用{}包围的代码java中的代码块按其位置划分为四种:局部代码块位置:局部位置(方法内部)作用:限定变量的生命周期,尽早释放,节约内存调用:调用其所在的方法时执行public class 局部代码块 {@Testpublic void test (){B b = new B();b.go();}}class B {B(){}public void go() {...转载 2019-08-27 22:36:54 · 94 阅读 · 0 评论 -
Java基础7:关于Java类和包的那些事
*.Java文件问题:一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?答案:可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致。一个文件中可以只有非public类,如果只有一个非public类,此类可以跟文件名不同。为什么一个java源文件中只能有一个public类?在java编程思想(第四版)一书中有这样3段话(6.4 类的访问权...转载 2019-08-28 10:06:31 · 148 阅读 · 0 评论 -
Java基础8:深入理解内部类
内部类初探一、什么是内部类?内部类是指在一个外部类的内部再定义一个类。内部类作为外部类的一个成员,并且依附于外部类而存在的。内部类可为静态,可用protected和private修饰(而外部类只能使用public和缺省的包访问权限)。内部类主要有以下几类:成员内部类、局部内部类、静态内部类、匿名内部类二、内部类的共性(1)内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的.clas...转载 2019-08-28 11:47:06 · 123 阅读 · 0 评论 -
Java基础9:解读Java回调机制
模块间的调用本部分摘自https://www.cnblogs.com/xrq730/p/6424471.html在一个应用系统中,无论使用何种语言开发,必然存在模块之间的调用,调用的方式分为几种:(1)同步调用同步调用是最基本并且最简单的一种调用方式,类A的方法a()调用类B的方法b(),一直等待b()方法执行完毕,a()方法继续往下走。这种调用方式适用于方法b()执行时间不长的情况,因为...转载 2019-08-28 12:35:48 · 107 阅读 · 0 评论 -
Java基础10:全面解读Java异常
Java中的异常和处理详解简介程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常。异常发生时,是任程序自生自灭,立刻退出终止,还是输出错误给用户?或者用C语言风格:用函数返回值作为执行状态?。Java提供了更加优秀的解决办法:异常处理机制。异常处理机制能让程序在异常发生时,按照代码的预先设定的异常处理逻辑,针对性地处理异常,让程序尽最大可能恢复正常并继续执行...转载 2019-09-01 18:53:59 · 91 阅读 · 0 评论 -
Java基础11:Java泛型详解
泛型概述泛型在java中有很重要的地位,在面向对象编程及各种设计模式中有非常广泛的应用。什么是泛型?为什么要使用泛型?泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实...转载 2019-09-02 16:22:05 · 137 阅读 · 0 评论 -
Java基础1:深入理解Java面向对象三大特性
本文会结合虚拟机对引用和对象的不同处理来介绍三大特性的原理。三大特性:继承 封装 多态继承Java中的继承只能单继承,但是可以通过内部类继承其他类来实现多继承。public class Son extends Father{public void go () {System.out.println(“son go”);}public void eat () {System.out...转载 2019-08-22 15:00:26 · 106 阅读 · 0 评论