Java
文章平均质量分 64
ZytheMoon
努力成为自己想要的人
展开
-
java的泛型解析以及相关知识点
一、为何引入泛型 在java增加泛型之前,这种类似的功能是通过维护Object数组实现的,这种方法有两个问题,一是当获取的一个值的时候必须强制类型转换,二是没有错误检查可以向数组内添加任何类的对象。同时一般的类和方法,只能使用具体的类型:要么是基本类型,要么是自定义的类,如果要编写可以应用于多种类型的代码,这种限制对代码的束缚就会很大。但是编码者希望编写的是更加通用化的代码,使代码...原创 2020-02-02 17:54:49 · 447 阅读 · 0 评论 -
java的回调相关
模块间的调用分为三种方式:同步调用、异步调用、回调。 1.同步调用:是最基本的调用方式,类A的方法调用类B的方法,一直等待类B的方法执行完毕,类A的方法才继续执行下去,这种调用方法适合类B方法执行的时间不长的情况,因为类B方法执行时间过长会导致类A方法的余下代码不能顺利执行导致整个流程的阻塞。是一种单向调用。 2.异步调用:为了解决同步调用可能出现的阻塞,而导致整个流程...原创 2018-12-10 18:30:35 · 255 阅读 · 0 评论 -
使用IDEA创建java ee项目
转载 2018-12-22 11:39:50 · 3863 阅读 · 1 评论 -
关于java内部类为什么能够访问外部类属性详解
首先解释一下什么是内部类,内部类是定义在一个类内部的类。分为两种情况:一种是被static关键字修饰的, 叫做静态内部类, 另一种是不被static关键字修饰的, 即是普通内部类。 在下文中所提到的内部类都是指这种不被static关键字修饰的普通内部类。 静态内部类虽然也定义在外部类的里面, 但是它只是在形式上(写法上)和外部类有关系, 其实在逻辑上和外部类并没有直接的关系。而一般的内部类...原创 2018-12-24 18:38:34 · 4193 阅读 · 1 评论 -
java8的流以及流和集合的区别
集合是一种内存中的数据结构,包含数据结构中目前所有的值,也就是说集合中的值都要先计算好才能够放入集合中,但是流则不同,流是概念上固定的数据结构其元素是按需计算的不能添加或者删除元素,只有在需要的时候才将需要的流计算出来。集合需要提前将值全部准备好而流则是将值准备一部分。 集合和流的一个区别则是遍历数据的方式,使用Collection接口需要用户去进行迭代,也就是在集合...原创 2019-01-18 17:42:09 · 2074 阅读 · 0 评论 -
编译原理:词法分析
在词法分析的过程中还有一个过称是不能少的,就是在分析的时候一次读入多少代码。编译一个程序的时候,往往需要进行大量的字符串读入。前人做了比较多的优化,其中一项就是采用来个交替读入的缓冲区。每个缓冲区大概能有4096的字节,读一句话是足够的。读入程序中维护了两个指针:分别是lexemeBegin 指针,顾名思义,就是当前词素的开始处。以及forward 指针,就是试图判断词素的结尾是什么。这个...原创 2019-02-02 00:06:59 · 697 阅读 · 0 评论 -
HashMap、Hashtable以及ConcurrentHashMap的区别及原理
HashTable产生于JDK 1.1,HashMap产生于JDK 1.2,主要的区别有:1.线程安全2.处理速度3.使用迭代器不同4.输入参数不同5.扩充容量的大小方式不同6.计算hash以及index的方式不同。1.线程安全之间的区别 HashMap是非synchronized的,所以不能保证随着时间的推移Map中的元素次序是不变的,因为采用链表的方式来解决的,在对...原创 2019-03-10 12:10:24 · 7062 阅读 · 3 评论 -
java的集合框架浅析:包含的基本接口以及常用类
java集合的根本是Iterator和Collection两个接口。Collection本身代表了集合,拥有最基本的方法:添加、删除、返回个数、清空集合等。而Iterator接口是Collection的父接口主要用来定义遍历集合的规则,被称作迭代器,里面有两个重要方法next()和hashnext()。 在java集合里大致可以分为Set、List、Queue、Map四种体系。S...原创 2019-04-14 20:28:53 · 533 阅读 · 2 评论 -
java的Object里wait()实现原理
在进行wait()之前,就代表着需要争夺Synchorized,而Synchronized代码块通过javap生成的字节码中包含monitorenter和monitorexit两个指令。在进如锁的时候会执行monitorenter,执行monitorenter指令可以获取对象的monitor。同时在执行Lock.wait()的时候也必须持有monitor对象。 在多核环境下,多个...原创 2019-04-22 21:10:33 · 13761 阅读 · 5 评论 -
java的双重检查锁定详解
双重检查锁定模式(也被称为"双重检查加锁优化","锁暗示"(Lock hint)) 是一种软件设计模式用来减少并发系统中竞争和同步的开销。有时候会在单例模式里遇到这个双重检查锁定,这个技术是单例模式的一种具体的实现,通过它来进行单例模式里的延迟初始化,保证在经过延迟初始化之后还是只有一个单例类的实例被创建。 java程序中可能需要推迟一些高开销的对象初始化操作,只有在使用这些对...原创 2019-05-04 20:23:02 · 1504 阅读 · 0 评论 -
Java版本:JDK8的十大新特性介绍
JDK8新特性: 1.Lambda表达式 2.新的日期API 3.引入Optional 4.使用Base64 5.接口的默认方法和静态方法 6.新增方法引用格式 7.新增Stream类 8.注解相关的改变 9.支持并行(parallel)数组 10.对并发类(Concurrency)的扩展。...原创 2019-04-30 21:11:28 · 48942 阅读 · 6 评论 -
java在多线程情况下如何初始化Class对象
java在多线程情况下,初始化一个类或接口的处理过程如下,大致分为5个过程: (1)通过在Class对象上同步获得对象的初始化锁,来控制类或接口的初始化,这个获取锁的线程会一直等待直到当前线程能获得这个初始化锁。当一个Class对象还没有初始化,这个初始化状态被标记为noInitualization,假设有两个线程A和B同时初始化这个Class对象,A、B线程尝试获取Cl...原创 2019-05-07 21:07:23 · 1034 阅读 · 0 评论 -
java线程的各种状态
java线程在运行的生命周期中可能处于六种不同的状态,在给定的某一个时刻,线程只能处于其中的一个状态。在程序运行中线程状态的具体含义:线程在自身的生命周期中并不是固定的处于某个状态,而是随着代码的不断执行在不同的状态之间进行切换。 (1)NEW:初始状态,线程被创建但是还没有调用start()方法 (2)RUNNABLE:运行状态,java线程将操作系统中的就绪和运行两...原创 2019-05-11 15:12:38 · 498 阅读 · 0 评论 -
JDK9新特性
JDK9新特性: 1.模块系统 2.JShell和Jlink 3.不可变集合类工厂方法 4.接口中的私有方法 5.一些改进的API 6.try-with-resources改进 7.HTTP2支持 8.平台日志API和服务 9.垃圾回收器 10.增加加密算法 一、Java 平台...原创 2019-05-16 18:12:21 · 629 阅读 · 0 评论 -
java多线程什么时候释放锁
由于等待一个锁定线程只有在获得这把锁之后,才能恢复运行,所以让持有锁的线程在不需要锁的时候及时释放锁是很重要的。在以下情况下,持有锁的线程会释放锁: 1、当前线程的同步方法、代码块执行结束的时候释放 2、当前线程在同步方法、同步代码块中遇到break 、 return 终于该代码块或者方法的时候释放。 3、当前线程出现未处理的erro...原创 2019-05-12 20:52:47 · 3590 阅读 · 0 评论 -
java的协变性、逆变性、不变性
先看看官方的解释:协变和逆变都是术语,前者指能够使用比原始指定的派生类型的派生程度更大(更具体的)的类型,后者指能够使用比原始指定的派生类型的派生程度更小(不太具体的)的类型。协变和逆变是指宽类型和窄类型在某种情况下(如参数、泛 型、返回值)替换或交换的特性。 简单地说A和B是类型,f表示类型转换,≤表示子类型关系: 协变:你可以用一个子类对象去替换相应的一个父类...原创 2018-12-14 15:09:53 · 782 阅读 · 0 评论 -
关于魔法数值、魔法数字、魔法值
其实这几个词代表的是一个意思,只是不同的叫法,所谓魔法数值是指在代码中直接出现的数值,只有在这个数值记述的那部分代码中才能明确了解其含义。而在编程领域指的是莫名其妙出现的数字,数字的意义必须通过详细阅读才能推断出来。一般魔法数字都是需要使用枚举变量来替换的 魔法数值使代码的可读性大大下降。而且,如果同样的数值多次出现时,到底这些数值是不是带有同样的含义呢,谁也说不清楚。另一方面,...原创 2018-12-13 17:15:17 · 9711 阅读 · 1 评论 -
什么是一方库、二方库、三方库
条目 别称 说明 一方库 一方包 本工程中的各模块的相互依赖,是本项目中的依赖 二方库 二方包 公司内部的依赖库,一般指公司内部的其他项目发布的jar包 三方库 三方包 公司之外其他组织的开源库, 来自第三方的依赖比如apache、google等发布的jar包,如logging、log4j等 ...原创 2018-12-13 16:21:01 · 5612 阅读 · 0 评论 -
java的变量和常量以及常量池
首先变量名和常量名都是用户自行定义的标志符,遵循先定义后使用的原则,常量和变量的区别是常量之后会不会改变变量占据着内存的某一存储区域,该区域有自己的名称和数据类型,该区域的数据可以在同一类型范围内不断的变化,那么为什么定义变量,可以用来存放同一类型的变量可以重复使用,每一个变量都有他自己的作用范围,定义开始到定义它的代码块结束,同一代码块范围内不允许有多个相同名字的局部原创 2017-10-24 17:39:10 · 2470 阅读 · 0 评论 -
java的关键字和保留字
关键字和保留字的区别正确识别java语言的关键字(keyword)和保留字(reserved word)是十分重要的。Java的关键字对java的编译器有特殊的意义,他们用来表示一种数据类型,或者表示程序的结构等。保留字是为java预留的关键字,他们虽然现在没有作为关键字,但在以后的升级版本中有可能作为关键字。识别java语言的关键字,不要和其他语言如c/c++的关键字原创 2017-11-27 19:44:57 · 28205 阅读 · 9 评论 -
代码点与代码单元和Unicode相关的UTF
java字符串由char序列组成,char数据类型是一个采用UTF-16编码表示Unicode代码点的代码单元,大多数的常用Unicode字符使用一个代码单元就可以表示,而辅助字符需要一对代码单元来表示,length方法返回的是采用UTF-16编码表示的给定字符串所需要的代码单元的数量,要想得到真实的长度即代码点的数量可以调用xxx.codePointCount(0,xxx.length())方法原创 2018-01-21 23:11:52 · 1102 阅读 · 0 评论 -
Java如何一个类只生成一个对象,如何记录一个类生成了几个对象
public class A{private static A a = new A(); //声明为static是为了确保只有一个对象存在,详见static修饰符private A(){} //构造方法为private,外部无法使用new来创建对象.public static A getA(){return a;}}public static void main(Str原创 2017-12-28 15:22:05 · 1791 阅读 · 0 评论 -
迅速学java——100条小知识点快速入门
1.首先java是一种高级语言是一个面向对象的编程语言同时最重要的是它的可移植性。2.java语言的产生及发展历史,由James Gosling领导的小组在Sun公司开发,发展主要用于开发可嵌入家电产品的软件之后java的重心转移到Internet编程到现在面向网络应用,类库不断丰富性能不断提升应用领域不断扩展。3.java具有三大平台:J2ME(嵌入式平台)、J2SE(标原创 2018-01-14 18:37:53 · 2393 阅读 · 0 评论 -
多线程基础——经典的哲学家就餐问题
哲学家就餐问题是在计算机科学中的一个经典问题,用来演示在并行计算中多线程同步时产生的问题。这个问题被托尼·霍尔重新表述为哲学家就餐问题。这个问题可以用来解释死锁和资源耗尽。用来演示在并行计算中多线程同步时产生的问题,就可以抽象成是资源抢占问题,而筷子就是“资源”。哲学家就餐问题可以这样表述:假设有五位哲学家围坐在一张圆形餐桌旁,做以下两件事情之一:吃饭,或者思考。吃东西的时候就停止原创 2018-01-17 11:01:13 · 856 阅读 · 0 评论 -
type接口和class的区别(类型和类)
ClasspublicfinalclassClassT>implementsjava.io.Serializable,GenericDeclaration,Type,AnnotatedElement {...}TypepublicinterfaceType {default StringgetTypeName() {ret原创 2018-02-02 18:05:01 · 13964 阅读 · 1 评论 -
关于java的参数传递(值传递、引用传递和传值、传引用等)
所谓参数传递就是用函数调用所给出的实参(实际参数)向函数定义所给出的形参(形式参数)设置初始值的过程。基本的有三种参数分别为:(1)传值: (2)传址(即是传指针)(3)传引用以上这些都是根据参数的类型来分别的,是指传递的东西是什么,而不是指传递过程,但是在传递过程中也有和它们比较混淆的名词,这就是是值传递和引用传递,总体上函数调用可以分为两类,是根据传递时的过程来原创 2018-01-28 02:16:17 · 3761 阅读 · 0 评论 -
java接收控制台输入的三种方法
importjava.io.BufferedReader; importjava.io.IOException; importjava.io.InputStreamReader; importjava.util.Scanner; // System.in和System.out方法 //缺点一: 该方法能获取从键盘输入的字符,但只能针原创 2018-02-08 20:48:19 · 25240 阅读 · 0 评论 -
Type的子接口详解(源码解析)
以下是源码中对Type的注释:Type是Java中所有类型的常见的超接口,在编程语言中这些包括原始类型,参数化的类型,数组类型,类型变量和原始类型。Class在一定程度上挽救了擦除的类型信息,我们就可以通过这几个接口来获取被擦除的类型参数信息,这几个接口无非就是对类型参数的一个分类,通过它们提供的一些方法,我们可以逐步的获取到最原始的类型参数的Class对象。Type的直接子接口原创 2018-02-25 16:56:39 · 544 阅读 · 0 评论 -
java ee容器、组件、通信类型简介
java ee不是编程语言而是规定开发符合java ee规范的软件系统需要使用java编程语言。java ee规范定义了面向Internet的组成部分和各组成部分之间的交互协议。具体包含:1.容器规范:容器是组件的运行环境,负责组件的生命周期管理和各组成部分之间的交互协议,定义了各种组件的容器类型以及每种容器提供的服务。并管理组件的生成、调用和销毁,简化了企业级软件开发中复杂的对象...原创 2018-10-11 21:01:32 · 1682 阅读 · 0 评论 -
java的数据类型
任何一个程序都要进行数据的处理所以对于数据的保存就必须有严格的限制,这些限制就体现在数据的划分上,即不同的数据类型可以保存不同的数据内容,java的数据类型分为两个大类即基本数据类型和引用数据类型,其中基本数据类型包括最基本的byte、short、int、long、float、double、char、boolean,引用数据类型包括类、接口、数组,在操作的时候必须要进行内存的开辟而...原创 2018-10-31 18:35:26 · 213 阅读 · 0 评论 -
关于弱一致性、强一致性、顺序一致性
在分布式数据系统中,也有一个帽子原理(CAP Theorem),不过此帽子非彼帽子。CAP原理中,有三个要素,CAP原理指的是,这三个要素最多只能同时实现两点,不可能三者兼顾:一致性(Consistency) 可用性(Availability) 分区容忍性(Partition tolerance) 一致性就是数据保持一直,可以理解为多个节点中数据的值是一致的,一致性又可以分...原创 2018-11-19 17:30:52 · 4952 阅读 · 1 评论 -
java隐式参数和显式参数
隐式参数:是调用函数的对象,在类的方法中调用了类的实例域,这个被调用的实例域就是隐式参数。或者说是当前方法的对象, 一般我们会使用this关键字来使用隐式参数,this表示调用该方法的当前类的当前实例,使用this关键字可以很好的把显式参数和隐式参数分离开。 显示参数:是通常所说的参数在方法名括号中间的参数,就是所谓能看得见的参数。...原创 2018-11-29 12:49:56 · 2132 阅读 · 0 评论 -
java的基础:详解Object类里的13个方法(序)
● public Object() ● private static native void registerNatives() ● protected navite Object clone() ● public boolean equals(Object obj) ● protected void finalize() ● public final native Class<? > getClass() ● public native int hashCode() ● pub原创 2017-10-30 20:05:50 · 4291 阅读 · 0 评论