java基础相关
文章平均质量分 75
stormCoderStorm
做一个谦卑的人,一个没有脱离低级趣味的人
展开
-
java中的静态内部类与非静态内部类的联系
java中的静态内部类与非静态内部类的联系区别1. 从使用上说:静态内部类中才能有静态属性和静态方法,非静态内部类中不能有静态属性和静态方法。2. 从生命周期上说:静态内部随着外部类的加载而加载,不是伴随着外部类的对象产生而产生的。外部类的实例与静态内部类的实例没有任何关系的。而非静态内部类的实例是需要依赖外部类实例才能创建的。换句话说非静态内部类是附属在外部类实例基础之上的,需要先创建一个外部类的原创 2017-03-08 16:07:06 · 1017 阅读 · 1 评论 -
java集合之ArrayList解析
ArrayList是基于动态数组实现增删改查操作,进行顺序存储的,在内存中各个元素的地 址是连续的.ArrayList组织结构图:根据上面的结构图知道ArrayList继承AbstractList并实现了RandomAccess,Cloneable,Serializable这三个标记接口,所以AbstractList具有如下特性:AbstractList:实现了增删改查的集合操作,并可以对原创 2017-09-13 15:05:34 · 676 阅读 · 0 评论 -
java集合之LinkList解析
LinkeList是基于双向链表的实现,同时它也实现了Queue队列,Deque栈的实现,使得我们可以进行双向队列的实现,上一节java集合之ArrayList解析中说过ArrayList查询效率比较高,添加和删除集合中的元素效率比较低,而LinkList正好相反.LinkList组织结构图 LinkList继承自AbstractSequentialList(ArrayList继承Abstract原创 2017-09-13 17:36:58 · 2200 阅读 · 0 评论 -
java中数据结构(一)单链表总结
单链表是用若干在地址上面分散内存单元存储数据元素的,在逻辑上面相邻的元素在物理上不一定相邻.因此对于每个数据元素除了存储自身的元素数据以外,还要存储指向下个数据元素的地址。数据元素结构如下:上面包含了自身元素数据data和指向下个数据元素地址的next.数据元素存储结构: 单链表是顺序存储结构,不是随机存储结构,因此查询节点的时候每次都是从头节点开始查找,因此对于select和updata操作性能原创 2017-09-07 11:15:05 · 1485 阅读 · 0 评论 -
java多线程(3)之join与countDownLatch
join是Thread中的类,一般用于一个A线程需要等到另一个B线程的结果才可以继续执行的情形, 这是一种有序的执行方式,比如说主线程需要等到子线程返回的结果后才可以继续执行. eg.public class TestThread extends Thread { public TestThread(String name) { super(name); } @原创 2017-08-30 14:18:32 · 381 阅读 · 0 评论 -
java中数据结构(二)双链表总结
上面文章介绍了单链表的总结java中数据结构(一)单链表总结,双链表在单链表结构的基础上增加了一个指向前驱节点的元素地址,它的优点根据一个节点很容易就可以得到前后节点的数据元素,而不再向单链表一样每次从头节点开始查找才可以,缺点是相对单链表增加了内存开销。下面的代码实现了双链表的增删改查:双链表中的Node节点public class Node<E> {//双链表节点 public E dat原创 2017-09-08 09:35:49 · 337 阅读 · 0 评论 -
java中Serializable与Parcelable的使用
java序列化:保存内存对象的状态,包括对象的属性值,但不包括方法和static变量(因为static修饰的变量是属于类而不隶属于对象),以及用transient关键字修饰的变量(transient是禁止序列化的标识,效果等同于static修饰的变量).java反序列化:是与java序列化相对的,表示从磁盘或者其他介质中读取序列化对象的内容.java序列化的应用场景:内存中的对象保存到磁盘文件中原创 2017-09-08 15:58:20 · 3074 阅读 · 1 评论 -
java多线程(2)之CAS操作
CAS:Compare and Swap即比较交换技术,它在高并发开发中是很重要的技术,在了解什么是CAS操作之前我们首先需要简单了解下sun.misc.UnSafe类。UnSafe类中的很多方法都是Native方法,没法直接调用,只能通过JNI操作调用本地方法,这里列举个里面的本地方法:public native long objectFieldOffset(Field var1);获取对象中给原创 2017-08-29 17:03:20 · 352 阅读 · 0 评论 -
java多线程(4)之FutureTask
java多线程(4)之FutureTaskFutureTask是一个执行异步任务并可以取消及获得任务结果的实现类,类关系如下:public class FutureTask<V> implements RunnableFuture<V>{...}public interface RunnableFuture<V> extends Runnable, Future<V> { void run(原创 2017-08-31 17:57:37 · 347 阅读 · 0 评论 -
java中的线程及interrupt操作后状态的变化
java中线程的状态包括“新建状态”,”就绪状态”,”运行状态”,”阻塞状态”以及”死亡状态”.下面是java的状态变化图1.新建状态:线程被创建后进进入了新建状态Thread t=new Thread().2.就绪状态:线程调用start()方法启动线程就进入了就绪状态,又被称为可执行状态.3.运行状态:线程获取CPU执行,就由就绪状态进入了运行状态。4.阻塞状态:因某些原因造成线程放弃cpu执行原创 2017-09-01 17:30:58 · 2126 阅读 · 0 评论 -
java多线程之LockSupport及ReentrantLock
目前java语言层面能够实现线程的阻塞与唤醒,主要包含两个组合对wait/notify以及park/unpark。wait/notify这组组合中wait必须发生在notify前面,否则很可能造成线程会一直阻塞,而park与unpark则不必,但是如果unpark先执行,后面执行park操作将不会阻塞。JDK并发中的AQS框架使用的就是LockSupport中的park/unpark操作,实际上调用原创 2017-09-02 10:27:10 · 1463 阅读 · 0 评论 -
java多线程(5)之线程池概念理解
Executor说明Executor接口,是从JDK1.5开始就有的,里面只有一个接收参数为runnable的execute方法,若runnable为null,该方法回抛出NullPointerException,若这个任务无法被执行就会抛出RejectedExecutionException异常,execute方法可以在一个新线程,也可以在调用者线程中执行。* @since 1.5public原创 2017-09-02 20:53:49 · 330 阅读 · 0 评论 -
java中多线程(1)之sleep与wait的区别
sleep是Thread中的函数,JDK中对应的源码如下:public static void sleep(long millis) throws InterruptedException { Thread.sleep(millis, 0); }public static void sleep(long millis, int nanos) throws Interr原创 2017-08-25 17:31:12 · 275 阅读 · 0 评论 -
final修饰符
final修饰符final修饰符可以修饰类,方法,成员变量: 修饰类 修饰方法 修饰成员变量 表示类不可以被继承 表示方法不可以被重写 表示是常量,只可以被赋值一次,此后不允许更改1.final修饰类表示类不可以被继承,比如String,Math等系统类,不允许子类去继承,默认情况下final类中的方法都是final方法。2.final修饰方法表示方法不可以被覆盖,如果一个方原创 2017-06-29 11:44:54 · 304 阅读 · 0 评论 -
java中int和Integer的理解
前言java中的数据类型分为基本数据类型和复杂数据类型.int是基本数据类型,Integer是复杂数据类型.所以int的默认值为0,而Integer的默认值为null,即Integer可以区分出未赋值和值为0的区别,int则无法表达出未赋值的情况。java中为什么要引入Integer?个人认为很多java api的调用包括方法的传旨或者范型的使用都是基于Object的,所以引入了Integer,引入原创 2017-03-06 17:25:26 · 493 阅读 · 0 评论 -
java中的数据存储结构
java中的数据存储结构在java中数据的存储结构可以分为六种:寄存器存储区堆栈区堆区静态存储区常量存储区非RAM数据存储区 寄存器存储区由于位于处理器cpu的内部,所以其是最快的存储区,然而寄存器的空间极其珍贵有限,所以程序开发者无法直接控制寄存器空间的分配,它的分配工作是由编译器自行分配的.特点:最快的存储区, 由编译器根据需求进行分配,开发者在程序中无法进行控制.堆栈存储区位于通用原创 2017-03-07 17:14:52 · 5495 阅读 · 0 评论 -
java中的堆和栈的区别
Java中的堆和栈的区别转载自:http://droidyue.com/blog/2014/12/07/differences-between-stack-and-heap-in-java/当一个人开始学习Java或者其他编程语言的时候,会接触到堆和栈,由于一开始没有明确清晰的说明解释,很多人会产生很多疑问,什么是堆,什么是栈,堆和栈有什么区别?更糟糕的是,Java中存在栈这样一个后进先出(Last转载 2017-03-07 17:30:43 · 261 阅读 · 0 评论 -
java中关于string的理解
java中关于String的理解前言这是一个老生常谈的问题了,也是技术面试中针对初学者经常被问到的问题,这里就根据自己的理解做下规整,希望可以帮助更多的人,如果觉得哪里说得不对,请在下方留言,验证问题后我会及时更正。String的特征在讲解String特征之前,需要介绍一下关于String至关重要的概念:字符串常量池。 在上篇的文章中讲述了java中的数据存储结构,不明白的童鞋可以看下: java原创 2017-03-07 19:45:07 · 507 阅读 · 0 评论 -
java中是值传递还是引用传递?
java中是值传递还是引用传递?最近无意中看到了一篇博客对这个命题进行了阐述,但是讲解的有不少问题,没有从本质上抓住问题所在,所以就写了这篇文章.java中方法参数传递方式是按值传递。如果参数是基本类型,传递的是基本类型的字面量值的拷贝。 如果参数是引用类型,传递的是该参量所引用的对象在堆中地址值的拷贝。参数是基本类型解析: @Test public void test2(){原创 2017-03-07 21:17:36 · 327 阅读 · 0 评论 -
java四种引用包括强引用,软引用,弱引用,虚引用。
Java四种引用包括强引用,软引用,弱引用,虚引用。在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象。也就是说,只有对象处于可触及(reachable)状态,程序才能使用它。从JDK 1.2版本开始,把对象的引用分为4种级别,从而使程序能更加灵活地控制对象的生命周期。这4种级别由高到低依次为:强引用、软引用、弱引用和虚引用。强引用只要引用存在,垃圾回收器永远不会原创 2017-03-13 16:41:04 · 269 阅读 · 0 评论 -
jvm运行时的数据区
JVM运行时的数据区以下内容转载自JVM运行时的数据区.理解JVM运行时的数据区是Java编程中的进阶部分。我们在开发中都遇到过一个很头疼的问题就是OutOfMemoryError(内存溢出错误),但是如果我们了解JVM的内部实现和其运行时的数据区的工作机制,那么前面的问题就会迎刃而解。在这片文章中,我们将简单了解JVM中有哪些运行时数据区以及这些数据区的工作机制。JVM运行时数据区分类1.程序计数转载 2017-03-13 17:58:45 · 204 阅读 · 0 评论 -
jvm中如何判定对象需要回收?
jvm中如何判定对象需要回收?引用计数法每个对象上都有一个引用计数,对象每被引用一次,引用计数器就+1,对象引用被释放,引用计数器-1,直到对象的引用计数为0,对象就标识可以回收这个可以用数据算法中的图形表示,对象A-对象B-对象C 都有引用,所以不会被回收,对象B由于没有被引用,没有路径可以达到对象B,对象B的引用计数就就是0,对象B就会被回收。 但是这个算法有明显的缺陷,对于循环引用的情况下,转载 2017-03-13 19:33:55 · 2654 阅读 · 0 评论 -
多线程安全(-)之正确使用_volatile_变量
多线程安全(-)之正确使用 Volatile 变量volatile 变量使用指南本篇文章转载自:Java 理论与实践: 正确使用 Volatile 变量Java™ 语言包含两种内在的同步机制:同步块(或方法)和 volatile 变量。这两种机制的提出都是为了实现代码线程的安全性。其中 Volatile 变量的同步性较差(但有时它更简单并且开销更低),而且其使用也更容易出错。在这期的 Java 理论转载 2017-03-16 17:56:52 · 1152 阅读 · 0 评论 -
多线程安全(二)之单例模式
多线程安全(二)之单例模式转载自单例这种设计模式随着我们编写代码的深入,我们或多或少都会接触到设计模式,其中单例(Singleton)模式应该是我们耳熟能详的一种模式。本文将比较特别的介绍一下Java设计模式中的单例模式。概念单例模式,又称单件模式或者单子模式,指的是一个类只有一个实例,并且提供一个全局访问点实现思路1.在单例的类中设置一个private静态变量sInstance,sInstance转载 2017-03-16 19:01:59 · 286 阅读 · 0 评论 -
java中的浅拷贝和深拷贝
java中的浅拷贝和深拷贝转载自:浅拷贝和深拷贝(谈谈java中的clone)clone顾名思义就是复制, 在Java语言中, clone方法被对象调用,所以会复制对象。所谓的复制对象,首先要分配一个和源对象同样大小的空间,在这个空间中创建一个新的对象。那么在java语言中,有几种方式可以创建对象呢?1. 使用new操作符创建一个对象2. 使用clone方法复制一个对象那么这两种方式有什么相同和不同转载 2017-03-17 10:31:13 · 241 阅读 · 0 评论 -
java中cloneable的使用
什么是java中的浅克隆和深克隆?浅克隆:克隆对象中的变量与之前对象的值相同,并且对象中的引用类型变量仍然指向原来对象引用类型变量的地址.深克隆:克隆对象中的变量与之前对象的值相同,并且对象中的引用类型变量指向了新的对象的引用变量的地址.要想实现克隆,只需定义的类声明下cloneable这个标记性接口,并且衍生重写Object类中就有的clone()方法即可.为什么类要首先声明cloneab原创 2017-09-12 15:33:40 · 2316 阅读 · 0 评论