java基础学习
Zero_Darker
多闻数穷,不如守中。持而盈之,不如其已
展开
-
ThreadLocal一篇将从底层到原理讲清
ThreadLocal1.是什么一个存储结构,可以定义一个变量,每一个线程都可以拥有这个变量的副本,每个线程对于这个变量的修改,都只在本线程内有效,让共享变量不会出现多线程问题2.内部结构底层由一个Entry数组构成,key的类型为弱引用,(弱引用,只能生存到下一次gc前,由次可能发生内存泄漏问题),value为set传入的值。不同的线程会有不同的threadmap,而key的值为当前threadlocal,一个线程有多个threadlocal时,就会根据不同的threadlocal对象的hash原创 2020-07-01 13:31:53 · 202 阅读 · 0 评论 -
ReentrantLock从结构底层到原理一篇讲清
ReentrantLock1.是什么Reetrantlock是一个可以重复获得锁的一个互斥锁,它的加锁与解锁都是需要手动执行,也可以多次加锁,同时它还可以指定是由公平锁还是非公平锁实现。2.内部实现构造方法: public ReentrantLock() { sync = new NonfairSync(); }public ReentrantLock(boolean fair) { sync = fair ? new FairSync() : ne原创 2020-07-01 11:30:35 · 1905 阅读 · 0 评论 -
线程的五种状态
(1) 新建:新创建了一个线程对象。(2)可运行:线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取cpu 的使用权 。(3) 运行:可运行状态(runnable)的线程获得了cpu 时间片(timeslice) ,执行程序代码。(4) 阻塞:阻塞状态是指线程因为某种原因放弃了cpu 使用权,也即让出了cpu ti...原创 2018-06-06 19:38:44 · 203 阅读 · 0 评论 -
异常的注意事项
try、catch和finally这三个关键字不能单独使用,否则编译出错。(2)try语句块后既可以只使用catch语句块,也可以只使用finally语句块。当与catch语句块一起使用时,可以存在多个catch语句块,而对于finally语句块只能存在一个。当catch与finally同时存在时,finally必须放在catch后面。(3)try只与finally语句块使用时,可以使程序在发生异...原创 2018-06-06 19:40:07 · 240 阅读 · 0 评论 -
进程和线程
1.定义进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.2.关系一个线程可以创建和撤销另一个线程...原创 2018-06-06 19:40:43 · 118 阅读 · 0 评论 -
基本数据类和包装类的区别
(1)声明方式不同,基本类型不适用new关键字,而包装类型需要使用new关键字来在堆中分配存储空间; (2)存储方式及位置不同,基本类型是直接将变量值存储在堆栈中,而包装类型是将对象放在堆中,然后通过引用来使用; (3)初始值不同,基本类型的初始值如int为0,boolean为false,而包装类型的初始值为null (4)使用方式不同,基本类型直接赋值直接使用就好,而包装类型在集合如Collec...原创 2018-06-06 19:41:29 · 793 阅读 · 0 评论 -
java中this和super的区别
super(参数):调用基类中的某一个构造函数(应该为构造函数中的第一条语句) this(参数):调用本类中另一种形成的构造函数(应该为构造函数中的第一条语句)super: 它引用当前对象的直接父类中的成员(用来访问直接父类中被隐藏的父类中成员数据或函数,基类与派生类中有相同成员定义时如:super.变量名 super.成员函数据名(实参)this:它代表当前对象名(在程序中易产生二义性之处...原创 2018-06-09 13:43:09 · 766 阅读 · 0 评论 -
Java中关键字(abstract,static,final,this,super)
1,abstract:可以修饰类和方法。修饰后就变成了抽象方法,抽象类(1)如果修饰类的话,此类必须被继承使用,abstrcat最大程度的将子类的共性抽出来。abstract虽然不能生成对象,但可以声明,作为编译时类型,final与abstract不能同时出现。(2)一个有抽象方法的类,一定是抽象类,但一个抽象类的不一定有抽象方法。(3)抽象类不可创建对象,但可以有构造函数(子类可以继...原创 2018-07-26 22:00:59 · 1687 阅读 · 0 评论 -
String,stringBuffer,StringBuilder总结
一,String 底层是char数组(1)如:直接赋值:String s1 = "HelloWorld"通过new关键字来创建:String s3 = new String("HelloWorld") 上面的两种赋值方式必然是不同,如s1它这种赋值方式会让s1引用指向jvm中的方法区的常量池中的“HelloWorld”,而s3则是在堆空间中new String(”HelloWorld“...原创 2018-07-26 22:03:59 · 296 阅读 · 0 评论 -
接口和抽象类的区别
(1)多继承:一个类可以实现多个接口,一个类只能继承一个抽象类。(2)默认实现:接口只包含接口签名,抽象类可以提供默认实现,子类可以重载抽象类方法。(3)访问修饰符:接口默认所有的方法均为public, 抽象类可以包含protected修饰符。(4)属性与常量:接口中不允许定义任何属性,抽象类中允许定义属性和常量。...原创 2018-06-06 19:35:06 · 130 阅读 · 0 评论 -
使用运算符“==”和equals()方法的区别
(1)==操作符只能用于判断两个比较对象是否属于同一个引用,如果属于同一个引用则返回true,如果不是则返回false,而在equals方法中除了可以判断两个比较对象是否属于同一个引用之外还可以对equals方法进行重载。(2)其次,在对String类型的对象进行比较时,如果采取==操作符,则只有两个变量属于同一对象的引用时才会返回true,而equals方法的比较原理则是只要两个变量的内容相同则...原创 2018-06-06 19:34:43 · 1280 阅读 · 0 评论 -
Static的特点
(1)它随着类的加载而加载,随着类的消失而消失(2)优先于对象存在(3)静态变量数据存储在方法区的静态区(4)被所有对象共享(5)可以被类名直接调用...原创 2018-04-20 01:08:16 · 215 阅读 · 0 评论 -
类与类,类与接口,接口与接口的关系
(1)类与类:继承关系,单继承,可以多层继承。(2)类与接口:实现关系,非抽象类实现接口时,必须将接口中的方法实现。抽象类实现接口时,可以实现也可以不实现方法。(3)接口与接口:继承关系,一个接口可以继承多个接口。...原创 2018-04-20 01:10:03 · 604 阅读 · 0 评论 -
final finally finalize区别
(1)final用于修饰类,成员变量和成员方法,final修饰的类不能被继承,其中所有的方法不能被重写,也即abstract与final不能同时用。final修饰的方法不能被重写,但子类可以用父类的final方法。Final修饰的成员变量是不可变得,初始化后其中的值或引用不可变。(2)Finally通常与try catch一起使用,保证在有误异常的情况下,这一步都能被执行。(3)Finalize ...原创 2018-04-20 01:11:26 · 188 阅读 · 0 评论 -
什么是多态,多态的好处和弊端
(1)多态:允许将子类型的指针赋给父类类型的指针,子类类型对象转变为父类类型对象。(2)好处:隐藏了子类类型,提高了代码的可扩展性。(3)弊端:只能使用父类的功能,无法使用子类的特有的功能,功能有限制。...原创 2018-04-20 01:31:11 · 3470 阅读 · 0 评论 -
局部变量和成员变量的区别
(1)成员变量:在类体内定义的变量,可以不显式初始化,可以在类加载时初始化,存于堆内存中。(2)局部变量:在方法内定义的变量,形参,代码块中定义的变量,必须设定初始化值,存于栈内存空间中。...原创 2018-06-06 19:31:40 · 143 阅读 · 0 评论 -
同步代码块和同步函数的区别
(1)同步代码块可以绑定任意对象,而同步函数只能绑定该类对象this,static同步函数只能绑定字节码类名.class(2)如果多个线程使用同一个锁的话,那么两者均可以使用,如果存在多个锁的话,只能使用同步代码块...原创 2018-06-06 19:32:18 · 1066 阅读 · 0 评论 -
StringBuffer和StringBuilder的区别
(1)在执行效率方面比较:stringbuilder > stringbuffer(2)在线程安全上,StringBuilder是线程不安全的,而StringBuffer是线程安全的。(3)使用方面来讲:.单线程操作字符串 下操作大量数据 用stringBuilder。多线程操作字符串 下操作大量数据 用stringBuffer...原创 2018-06-06 19:33:27 · 113 阅读 · 0 评论 -
String和StringBuffer的区别
(1)String:是对象不是原始类型.为不可变对象,一旦被创建,就不能修改它的值.对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去.String 是final类,即不能被继承(2)StringBuffer:是一个可变对象,当对他进行修改的时候不会像String那样重新建立对象。它只能通过构造函数来建立对象被建立以后,在内存中就会分配内存空间,并初始保存一个nul...原创 2018-06-06 19:34:02 · 22947 阅读 · 0 评论 -
Abstract与哪些关键字不能共存,为什么?
Finally:abstract修饰的类继承后,该类的方法需要重写,而finally修饰的类不能继承,也不能有子类,方法更不能重写,相互冲突。Private:方法子类的方法不能被继承,就不能被重写,而abstract就是要方法重写。相互冲突。Static:static能被实例化可直接调用,abstract是不能被实例化,相互冲突。...原创 2018-04-20 01:06:52 · 1699 阅读 · 0 评论