JavaSE
javase有关知识点整理
yiyiyuebing
这个作者很懒,什么都没留下…
展开
-
BIO,NIO,AIO 总结
同步和异步同步 : 两个同步任务相互依赖,并且一个任务必须以依赖于另一任务的某种方式执行。 比如在A->B事件模型中,你需要先完成 A 才能执行B。 再换句话说,同步调用种被调用者未处理完请求之前,调用不返回,调用者会一直等待结果的返回。异步: 两个异步的任务完全独立的,一方的执行不需要等待另外一方的执行。再换句话说,异步调用种一调用就返回结果不需要等待结果返回,当结果返回的时候通过回调...原创 2020-04-27 21:34:15 · 178 阅读 · 0 评论 -
final,static,this,super 关键字总结
final 关键字final关键字主要用在三个地方:变量、方法、类。对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。当用final修饰一个类时,表明这个类不能被继承。final类中的所有成员方法都会被隐式地指定为final方法。使用final方法的原因有两个。第一个原因是把方法锁定,...原创 2020-04-26 08:57:29 · 158 阅读 · 0 评论 -
简述Java IO
从数据传输方式或者说是运输方式角度看,可以将 IO 类分为:1、字节流2、字符流字节流是以一个字节单位来运输的,比如一杯一杯的取水。而字符流是以多个字节来运输的,比如一桶一桶的取水,一桶水又可以分为几杯水。字节流和字符流的区别:字节流读取单个字节,字符流读取单个字符(一个字符根据编码的不同,对应的字节也不同,如 UTF-8 编码是 3 个字节,中文编码是 2 个字节。)字节流用来处理二...原创 2020-03-06 14:34:02 · 104 阅读 · 0 评论 -
java中的引用
强引用、软引用、弱引用、虚引用强引用: 即常用的 object o = new object(); 只要强引用还在,垃圾回收器就永远不会回收掉此类对象。软引用: 用来描述一些还有用但非必须的对象。在内存即将发生内存溢出之前,会把这些对象列进回收范围之中进行二次垃圾回收。如果这次回收还没有足够内存,才会发生内存溢出异常。软引用可用来实现内存敏感的高速缓存。弱引用: 描述非必须的对象。被弱引用关...原创 2020-03-01 23:54:51 · 78 阅读 · 0 评论 -
Java 创建字符串生成几个对象?
Java 创建字符串生成几个对象?原理1:当时用任何方式来创建一个字符串对象s=x时,Java运行时会拿着这个X在String池中找是否存在相同的字符串对象,如果不存在,则在池中创建一个字符串s,否则不在池中添加。原理2:Java中,只要使用new关键字来创建对象,则一定会创建一个新的对象。原理3:使用直接指定或者使用纯字符串串联来创建String对象,则仅仅会检查维护String池中的字符...原创 2020-03-01 17:08:27 · 910 阅读 · 0 评论 -
Java深拷贝和浅拷贝
在 Java 中,除了基本数据类型(元类型)之外,还存在 类的实例对象 这个引用数据类型。而一般使用 『 = 』号做赋值操作的时候。对于基本数据类型,实际上是拷贝的它的值,但是对于对象而言,其实赋值的只是这个对象的引用,将原对象的引用传递过去,他们实际上还是指向的同一个对象。而浅拷贝和深拷贝就是在这个基础之上做的区分,如果在拷贝这个对象的时候,只对基本数据类型进行了拷贝,而对引用数据类型只是进行...原创 2020-03-01 16:19:08 · 73 阅读 · 0 评论 -
jdk1.8新特性
java8允许我们给接口添加一个非抽象的方法,实现只需要使用default关键字即可,这个特征又叫做扩展方法。lambda表达式是一种简洁的语法,实际上是一个匿名函数,所有的lambda表达式都是用新的lambda运算符 “ => ” , 可以叫他“ 转到 ”或者“ 成为 ”。运算符将表达式分为两部分,左边指定指定输入参数,右边是lambda的主体,lambda表达式返回右边表达式的...原创 2020-02-18 08:28:30 · 103 阅读 · 0 评论 -
使用HashMap,如果key是自定义的类,就必须重写hashcode()和equals()
hashcode()和equals()都继承于object,在Object类中的定义为:equals()方法在Object类中的定义:public boolean equals(Object obj){return (this == obj); }hashCode()的定义为:public native int hashCode();是一个本地方法,返回的对象的地址值。1.h...原创 2020-02-17 22:45:18 · 469 阅读 · 0 评论 -
简述Java中的CopyOnWriteArrayList
CopyOnWriteArrayList是ArrayList的一个线程安全的变体,其所有可变操作(add、set等)都是通过对底层数组进行一次新的复制来实现的。这一般需要很大的开销。但是当遍历操作的数量大大超过可变操作的数量的时候,这种方法可能比其他替代方法更有效。ArrayList在多线程时容易出错,在多线程环境下,list集合无法在迭代的同时另一线程写入新元素。而CopyOnWriteArr...原创 2020-02-17 21:13:48 · 139 阅读 · 0 评论 -
ConCurrentHashMap如何实现?采用什么锁?
采用 reentranlock 锁,在 Put()方法中写入前会先通过 reentranlock 申请锁,不可获得则休眠。ConcurrentHashMap所采用的锁分段技术首先将数据分成一段一段的存储,然后给每一段数据配一把锁,每个segment利用reentranlock实现,当一个线程占用锁访问其中一个段数据的时候,其他段的数据也能被其他线程访问到。一个ConcurrentHashMap里...原创 2020-02-17 11:02:29 · 2669 阅读 · 2 评论 -
ArrayList和LinkedList的区别
ArrayList使用一个内置的数组来存储元素,这个数组的起始容量是10,当数组需要增长时,新的容量按如下公式获得:新容量 = (旧容量*3) / 2。也就是说每一次容量大概都会增长50%。这意味着如果你有一个包含大量元素的ArrayList对象,那么最终将有很大的空间会被浪费掉,这个浪费是由ArrayList的工作方式本身造成的。ArrayList和Linkedlist在性能上各有优缺点,都有...原创 2020-02-16 23:14:16 · 136 阅读 · 0 评论 -
HashMap与HashTable的区别?
一、继承不同,HashTable 继承自 Dictionary 类,而 HashMap 是 Java1.2 引进的 Map interface 的一个实现。二、Hashtable中的方法是同步的,而Hashmap中的方法在缺省情况下是非同步的。在多线程并发的环境下,可以直接使用Hash table。Hashtable的实现方法里面都添加了synchronized关键字来确保线程同步。但是使用Ha...原创 2020-02-16 21:50:00 · 102 阅读 · 0 评论 -
Hash是线程安全的吗?哪些是线程安全的容器?
不是。如果多个线程同时访问一个哈希映射。而其中至少一个线程从结构上修改了该映射,则它必须保持外部同步。这一般通过对自然封装该映射的对象进行同步操作来完成。如果不存在这样的对象,则应该使用collections.synchronizedMap的map方法来包装该映射。最好在创建时完成这一动作,以防止对应社进行意外的非同步访问。在Hashmap中做put操作的时候会调用用到以上的方法。现在,假如A线程...原创 2020-02-16 21:23:52 · 674 阅读 · 0 评论 -
HashMap的默认长度为什么是16?
如果两个元素不相同,但是hash函数的值相同,这两个元素就是一个碰撞。为了减少hash值的碰撞,需要实现一个尽量均匀分布的hash函数,在HashMap中通过利用key的hashcode值,来进行位运算。例子公式:index = e.hash & (length - 1)长度16或者其他2的幂,,length - 1的值是所有二进制位全为1,这种情况下,index的结果等同于hashc...原创 2020-02-16 19:51:12 · 1474 阅读 · 0 评论 -
Java 中的异常结构
1、Error与ExceptionError 是程序无法处理的储物,比如 OutOfMemoryError、ThreadDeath 等。这些异常发生时, Java 虚拟机(JVM)一般会选择线程终止。Exception 是程序本身可以处理的异常,这种异常分两大类,运行时异常和非运行时异常。程序中应当尽可能去处理这些异常。2、运行时异常和非运行时异常运行时异常都是 RuntimeExcep...原创 2020-02-16 16:50:00 · 184 阅读 · 0 评论 -
jdk1.7和jdk1.8中hashmap区别
HashMap简介:HashMap基于哈希散列表实现 ,可以实现对数据的读写。将键值对传递给put方法时,它调用键对象的hashCode()方法来计算hashCode,然后找到相应的bucket位置(即数组)来储存值对象。当获取对象时,通过键对象的equals()方法找到正确的键值对,然后返回值对象。更多细节jdk1.7和jdk1.8中hashmap区别:Hashmap解决冲突是采用链表,性...原创 2020-02-15 16:57:37 · 160 阅读 · 0 评论 -
CurrentHashMap的实现原理
1.HashTable与ConcurrentHashMap的对比HashTable本身是线程安全的,写过Java程序的都知道通过加Synchronized关键字实现线程安全,这样对整张表加锁实现同步的一个缺陷就在于使程序的效率变得很低。这就是为什么Java中会在1.5后引入ConcurrentHashMap的原因。从图中可以看出,HashTable的锁加在整个Hash表上,而Concurre...原创 2020-02-15 11:14:25 · 4275 阅读 · 0 评论 -
java中散列表、树所对应的的容器类。以及HashMap如何解决冲突?
散列表、树所对应的的容器类:散列表:hashmap,hashtable,concurrentHashmap树:hashset,treemap,treeset其中treeset继承自treemap, hashset继承自hashmaptreemap性能分析:treemap底层采用一颗“红黑树”来保存集合中的Entry,这意味着TreeMap添加元素、取出元素的性能都比HashMap低。当T...原创 2020-02-12 21:57:49 · 193 阅读 · 0 评论 -
char可以存储汉字吗
Char型变量是用来存储 Unicode 编码字符的。Unicode 编码字符中包含了汉字,所以char型变量中可以存储汉字。若某个特殊的汉字没有被包含在 Unicode 编码字符集中,那么这个 char 型变量中也就不能存储这个特殊汉字。Unicode编码占用两个字节,所以 char 型变量也是占用两个字节。...原创 2020-02-12 21:10:21 · 238 阅读 · 0 评论 -
java中内部类
为什么使用内部类?每个内部类都能独立的继承一个接口的实现。无论外围类是否已经继承了该接口的实现,对内部类都没有影响,它能够很好的解决多重继承的问题。内部类的特性:1.内部类可以有多个实例,每个实例都有自己的状态信息,并且与其他外围对象的信息相互独立。2.单个外围类中,可以让多个内部类以不同的方式实现同一个接口,或者继承同一个类。3.创建内部类的时刻并不依赖于外围类对象的创建。4.内部类...原创 2020-02-12 12:14:23 · 66 阅读 · 0 评论 -
java中Object类中的方法
Object类是所有类的基类,位于java.lang包中,一共有13个方法。Object(): 即Object类的构造方法registerNatives(): java中经常调用本地方法,使用本地函数需要按照一定的格式进行命名,如果觉得本地函数的命名约定比较繁琐,那么可以使用 registerNatives 方式来注册本地函数,这样就可以随意命名函数。而且认为经过 registerNativ...原创 2020-02-11 22:35:20 · 165 阅读 · 0 评论 -
java中的泛型擦除
java里面其实没有真正的泛型,它是一种伪泛型,因为在编译的时候泛型信息会被擦除掉,所以在生成的Java字节码中不包含泛型的类型信息,而是替换为原始类型(会使用其限定类型替换,无限定的变量用object),这种伪泛型虽然不会有类型膨胀的问题,但也会引起一些新问题。比如在检查编译对象和引用传递的时候,在编译之前我们需要先检查代码中的泛型类型,再进行类型擦除,这个类型检查是针对引用的。谁用这个引用调用...原创 2020-02-11 10:58:34 · 116 阅读 · 0 评论 -
java重载与重写的区别
在Java中,重载是由静态类型确定的,在类加载的时候就可以确定,属于静态分派。而重写是是在运行时确定的,属于动态分配。动态分派由需方法表实现,虚方法表中存在着各个方法的实际入口地址。如果父类中的某个方法子类没有被重写,那么父类与子类的方法表中的方法地址相同,如果重写了,则子类方法表达地址指向重写后的地址。一般重写针对子类继承父类,重写父类的方法是通过动态绑定实现的,而重载是同一个方法名,但是参数类...原创 2020-02-10 22:11:48 · 424 阅读 · 1 评论 -
java中接口与抽象类的区别
抽象类:一个包含抽象方法的类为抽象类,抽象类需要用 abstract 修饰,抽象类内部没有构造方法,无法使用它创建对象。抽象类内部的抽象方法只包含声明,没有具体的实现。如果一个普通类继承了抽象类就要重写所有的抽象方法,不然它也是抽象类。抽象方法必须使用 public 或者 protect 修饰,不能使用 private。接口:接口里面可以含有变量和方法。接口当中的变量会自动使用 public s...原创 2020-02-09 22:04:31 · 124 阅读 · 0 评论