java
文章平均质量分 63
徐乙
这个作者很懒,什么都没留下…
展开
-
类加载器
学习自https://blog.csdn.net/jiangwei0910410003/article/details/17733153在新建一个Java对象的时候,JVM会把字节码加载到内存中(ART不是,会在安装的时候把字节码转化成机器码)。字节码一开始是存在于.class文件中的,类加载需要把.class文件中的字节码导入到硬盘中,经过一段时间后把字节码加载到内存中。一个例子,分别看看这个类...原创 2018-05-07 15:06:50 · 130 阅读 · 0 评论 -
Integer常量池
int i = 1Integer j = 1;这个时候i==j成立,因为j会进行一个自动拆箱Integer i = new Integer(1);Integer j = new Integer(1);i==j不成立,地址不一样Integer i = 1;Integer j = 1;i==j成立Integer i = 128Integer j = 128i == j不成立why?其实Integer ...原创 2018-02-15 13:55:29 · 258 阅读 · 0 评论 -
多线程使用场景
1.不阻塞主线程(UI线程)2.为了更快的速度。主线程专门用来监听请求,子线程专门用来处理请求,可以获得大的吞吐量。web服务3.某种虽然优先级很低的服务,但是却要不定时去做。比如Jvm的垃圾回收。4.某种任务,虽然耗时,但是不耗CPU的操作时,开启多个线程,效率会有显著提高。比如读取文件,然后处理。 磁盘IO是个很耗费时间,但是不耗CPU计算的工作。 所以可以一个线程读取数据,一个线程处理数据。...原创 2018-02-15 13:29:41 · 718 阅读 · 0 评论 -
Java集合框架
本文应付面试足够1.List、Set都继承Collection接口2.List元素放入有序、可重复,查询效率高(因为地址连续);Set元素放入无序(位置由HashCode决定,实际固定)、重复会覆盖,加入Set的对象必须定义equals方法以确保对象的唯一性,只可以用迭代器来遍历,增删效率高3.线程安全LinkedList、ArrayList、HashSet是非线程安全的,Vector是线程安全的...原创 2018-02-15 13:18:18 · 160 阅读 · 0 评论 -
类的编译、加载、执行过程
菜鸟版我们写了一个Book.java的类编译:执行javac test.java命令,就可以成功把Book.java转化成Book.class编译有3步:词法分析和输入到符号表注解处理语义分析和生成字节码细化一点:源代码文件*.java -> 词法分析器 -> tokens流 -> 语法分析器 -> 语法树/抽象语法树 -> 语义分析器 -> 注解抽象语法树 -...原创 2018-02-15 00:09:11 · 1403 阅读 · 0 评论 -
Java线程通信
借鉴自https://www.cnblogs.com/hapjin/p/5492619.html1.synchronizedA对象有两个方法X,Y。如果希望X执行完后再执行Y,可以给这两个方法前增加synchronized锁住这个对象,线程1先访问方法X,线程2再访问Y(因为锁住了对象),可以实现同步(同步:按一定顺序)执行。2.while 1 import java.util.ArrayList...原创 2018-02-14 18:34:57 · 222 阅读 · 0 评论 -
volatile
推荐一篇厉害的文章http://ifeve.com/java-memory-model-1/讲的很底层 适合在看完本文后看本文借鉴自http://www.cnblogs.com/hapjin/p/5492880.html1.volatile的可见性内存模型(每个线程都有自己的私有内存,都共享着主内存。)每个线程的操作:1.从主内存读取变量,成为一份拷贝变量,放在私有内存中(私有内存是抽象的概念,实...原创 2018-02-14 15:29:24 · 316 阅读 · 0 评论 -
synchronized
借鉴自http://blog.csdn.net/zwan0518/article/details/8725704但是不推荐看 讲的非常绕 我是分析了老半天才明白了他要讲的意思第一点,有个常见的误区,锁住了方法还是锁住了当前对象?synchronized public void test() { }等价于public void test() { synchronized (this...原创 2018-02-14 14:41:22 · 184 阅读 · 0 评论 -
Java内存模型
转载自http://ifeve.com/java-memory-model-1/并发编程模型的分类在并发编程中,我们需要处理两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发执行的活动实体)。通信是指线程之间以何种机制来交换信息。在命令式编程中,线程之间的通信机制有两种:共享内存和消息传递。在共享内存的并发模型里,线程之间共享程序的公共状态,线程之间通过写-读内存中的公共状态来隐...转载 2018-02-14 13:35:49 · 128 阅读 · 0 评论 -
java.util.concurrent
转载自:http://raychase.iteye.com/blog/1998965《四火的唠叨》java.util.concurrent包的类都来自于JSR-166:Concurrent Utilities,官方的描述叫做“The JSR proposes a set of medium-level utilities that provide functionality commonly ne...转载 2018-02-13 20:37:42 · 206 阅读 · 0 评论 -
IO.flush
转载自http://blog.csdn.net/dabing69221/article/details/16996877就是一句话,表达一个完成,写入底层输入流,结束。前言: 大家在使用Java IO流中OutputStream、PrintWriter ……时,会经常用到它的flush()方法。一.为什么要flush: 与在网络硬件中缓存一样,流还可以在软件中得到缓存,即直接在Java代码...转载 2018-02-17 22:23:37 · 355 阅读 · 0 评论 -
胡扯一波java的引用的设计思想
(我猜很多书籍可能有java引用的解读,这里纯粹胡扯,见谅)在看java的引用的设计思想前,先考虑这样一个问题,为什么非静态内部类不可以定义静态成员?其实内部类不是不可以定义静态内部成员最终发现,只有第一行成功的通过了编译器的检查。但是和他相似的一行private static final User u = new User();却发现,不行!这是为什么?因为String只有可能存放在两个地方1....原创 2018-02-22 11:12:23 · 235 阅读 · 0 评论 -
静态代码块的加载时机及JVM的理解
学习自:http://blog.csdn.net/jiese1990/article/details/40154329class MyClass1 { static {//静态块 System.out.println("static block "); } } public class Main { Class[] classArray = ...原创 2018-03-16 00:29:02 · 2038 阅读 · 0 评论 -
风趣探讨:为什么需要一个接口,一个接口的实现类,而不是直接调用类里的方法
之所以叫风趣探讨,我觉得这个话题非常有意思,也非常重要。知乎上有个老哥说:能问这个问题,说明(1)你很会思考(2)编程水平还是处于起步阶段。(https://www.zhihu.com/question/20111251)我觉得他说的很有道理。那么,这个问题,我们弄懂了,透彻了,并且身体力行了,我们的面向接口思想或许就能提升。这样写的第一个作用:“不如直接就在这个类中写实现方法岂不是更便捷”,你怎...原创 2018-03-23 23:04:06 · 5935 阅读 · 2 评论 -
匿名内部类为什么有时候引用外部成员需要final
这里草草讲一下是生命周期的问题比较容易出现在listener中runnable中原因:生命周期的问题listener的代码,和runnable的代码,就算你放在方法的局部,他脱离了方法,依然可以执行。但是另外的代码不行,他们的生命周期就停留在这个方法作为栈帧在方法栈的时候,方法执行完了就要挂掉了所以解决方法采用final。栈帧内有一个局部变量表,在栈帧出栈时就不复存在。如果不采用final,引用和...原创 2018-03-20 16:25:06 · 316 阅读 · 0 评论 -
面向对象之get、set和直接获取public字段的区别?
http://blog.csdn.net/llittlebird001/article/details/52725245#reply这哥们也在探寻这个问题,引发了我的一些感触,这里也总结下为啥别人都在set get获取对象,有没有人曾思考过这个问题背后的本质原因呢?我想说,大部分的人都会给你举个生动形象的例子,可是他们还是不能使发问者真正弄懂,或者说他们自身就不懂下面谈下我的理解:get、set的...原创 2018-03-13 15:21:32 · 2312 阅读 · 0 评论 -
接口的作用之一,定义规范
以Deque举例Deque是双向队列Deque 按照我们一般的理解,Deque是一个双向队列,这将意味着它不过是对Queue接口的增强。如果仔细分析Deque接口代码的话,我们会发现它里面主要包含有4个部分的功能定义。1. 双向队列特定方法定义。 2. Queue方法定义。 3. Stack方法定义。 4.Collection方法定义。第3,4部分的方法相当于告诉我们,具体实现Deque的类...原创 2018-03-19 09:18:59 · 905 阅读 · 0 评论 -
阿里巴巴fastjson 包的使用解析json数据
转载自:https://www.cnblogs.com/Ant-soldier/p/6339426.htmlFastjson是一个Java语言编写的高性能功能完善的JSON库。由阿里巴巴公司团队开发的.主要特性主要体现在以下几个方面:1.高性能fastjson采用独创的算法,将parse的速度提升到极致,超过所有json库,包括曾经号称最快的jackson。并且还超越了google的二进制协议pr...转载 2018-03-04 21:42:28 · 521 阅读 · 0 评论 -
正确理解volatile关键字
volatile3个特点:1.强制刷新主内存2.不保证原子性3.防止指令重排序这3点之前我也学习过,我也认为自己搞懂了,但是在看了JVM后我对其原理产生了质疑,最后终于理清楚了,特此记录。 1 public class RunThread extends Thread { 2 3 private boolean isRunning = true; 4 5 public ...原创 2018-03-17 11:45:49 · 277 阅读 · 0 评论 -
Android开启Lambda,瞬间让你的代码量缩小99%!
Android会有这样的缩进原来试着修改原来的,按他的缩进形式去写会提示Lambda未开启alt-enter,点选第二个自动配置好lambda后,接下来再看另一个例子已经变成灰色了我们再在new Runnable()附近alt-enter什么 还能简化?再来!亏我还学了一段时间Lambda,现在有了AS,瞬间白学了啊啊!!...原创 2018-03-11 13:25:47 · 666 阅读 · 0 评论 -
Java集合框架知识及HashMap和HashSet的区别
HashMap和HashSet的区别HashSet实质(1)HashSet是set的一个实现类,hashMap是Map的一个实现类,同时hashMap是hashTable的替代品(为什么后面会讲到). (2)HashSet以对象作为元素,而HashMap以(key-value)的一组对象作为元素,且HashSet拒绝接受重复的对象.HashMap可以看作三个视图:key的Set,value的Col...原创 2018-03-17 00:10:26 · 762 阅读 · 1 评论 -
HashCode
就是给数组设定一个容量,不同的哈希码%这个容量,取得序号,放到数组里。如果发现有重复了,通过链表的形式,增加一个元素。对于HashMap,键是不允许重复的。如果可以重复的话,可以用两个ArrayList打造出来。如果不允许重复,就是需要进行一个比较。然而equals的比较效率太低,HashCode会很高,原理如上所述。只需要在发现重复的时候(别人称之为碰撞),进行equals的比较即可。Think...原创 2018-02-12 17:53:03 · 249 阅读 · 0 评论 -
java停止线程的3种方法
1.设置标记位,是一种不错的方式static class MyThread extends Thread { WeakReference weakReference; private boolean mRunning = false; public MyThread(MainActivity mainActivity) { weakReferen原创 2018-02-04 22:02:11 · 606 阅读 · 0 评论 -
内部类为什么不可以定义静态成员,对静态的真正理解
从语法层面来讲比如外部类是Book,他定义了一个成员变量i当然只能实例化Book,Book book = new Book();book.i只能通过这种形式来访问但是把i弄成静态的就可以直接Book.i内部类也一样 上面的肯定不能直接访问Book.Book1那又怎么能访问Book.Book1.i呢?他定义了这个i为静态,那肯定应该是支持直接通过类名来访问的,但是这里非静态的class却是不可直接通...原创 2018-02-01 15:36:43 · 6812 阅读 · 3 评论 -
java动态代理和静态代理
先讲静态代理接口public interface People { void doSomething();}接口实现类public class PeopleImpl implements People{ @Override public void doSomething() { System.out.println("-原创 2017-12-24 16:08:02 · 192 阅读 · 0 评论 -
java使用new和newInstance()创建对象的区别
转载自:https://www.cnblogs.com/liuyanmin/p/5146557.html在初始化一个类,生成一个实例的时候,newInstance()方法和new关键字除了一个是方法,一个是关键字外,最主要有什么区别?它们的区别在于创建对象的方式不一样,前者是使用类加载机制,后者是创建一个新类。那么为什么会有两种创建对象方式?这主要考虑到软件的可伸缩、可扩展和可重用等软转载 2017-12-24 02:29:35 · 2998 阅读 · 0 评论 -
深入理解Java中的final关键字
转载自http://www.importnew.com/7553.htmlJava中的final关键字非常重要,它可以应用于类、方法以及变量。这篇文章中我将带你看看什么是final关键字?将变量,方法和类声明为final代表了什么?使用final的好处是什么?最后也有一些使用final关键字的实例。final经常和static一起使用来声明常量,你也会看到final是如何改善应用性能的转载 2017-12-06 14:08:36 · 169 阅读 · 0 评论 -
深入理解java拷贝机制(clone)
其实clone的作用很简单 直接看例子吧Book book = new Book();try { Book b = book.clone();} catch (CloneNotSupportedException e) { e.printStackTrace();}你看 Book b = book.clone() 你把上面new出来的那个book对象直接赋值给b。原创 2017-12-23 15:39:17 · 637 阅读 · 0 评论 -
java引用传递和对象传递的区别(对象在方法中传递时,仅仅传的是地址的副本)
对象在方法中传递时,仅仅传的是地址的副本-这句话需要深刻理解public class MainActivity extends AppCompatActivity { Book book; @Override protected void onCreate(Bundle savedInstanceState) { super.onCrea原创 2017-12-23 15:23:28 · 998 阅读 · 0 评论 -
正确理解ThreadLocal
一开始看了一篇文章,发现确实是写错了。ThreadLocal的get方法public T get() { Thread t = Thread.currentThread(); ThreadLocalMap map = getMap(t); if (map != null) { ThreadLocalMap.Entry e = map.ge原创 2017-12-22 22:03:25 · 1984 阅读 · 2 评论 -
弱引用和软引用WeakReference,SoftReference,最简讲解,以及一个应用场景
他讲的很好,但是我看了一下,有些地方讲的不是很清楚,导致我当时困惑了一会。这里简单加点内容。实际上,Car car = new Car(22000,"silver");WeakReference weakCar = new WeakReference(car);第一行就是new了一个实例,属于强引用,这个还是很好理解的。下面那一行说是弱引用,可实际上又是怎么用的呢?其实他就是原创 2017-11-16 13:09:51 · 11593 阅读 · 2 评论 -
面试题-Integer和int的区别
Integer和int的区别:前者是对象,可以调用许多方法,具体可以看源码,后面则是基本数据类型比较1:int 和integer的比较int i = 1;Integer j = 1;System.out.println((i == j) + "");这里是相同的,因为Integer会被自动拆箱成int去和i比,这里就变成了基本数据类型之间数值的比较原创 2017-11-18 00:39:00 · 574 阅读 · 0 评论 -
java中的问号与冒号(?:)表达式——简化代码
这个表达式很好,emojiFragment = (emojiFragment == null ? new EmojiFragment() : emojiFragment);如果对了,就赋前者给引用,如果错了,就赋后者给引用。所以,我们通常可以用这个表达式来减少代码量。(而且源代码中也是经常这么做的)接下来简化一下(别管是代码干什么的,简化就是了)if (moreMsgTypeF原创 2017-12-30 21:03:43 · 5720 阅读 · 0 评论 -
Android Handler、非静态、匿名内部类的内存泄漏,用静态内部类+弱引用或handler.removeCallbackAndMessages(null)解决
借鉴自:https://www.jianshu.com/p/63aead89f3b9为啥要用内部类呢,很方便,可以直接访问外部类的东西。所以,非静态、匿名内部类会隐式持有外部类的引用。但是,仅仅持有引用并不会引起内存泄漏,但是如果有什么延时的操作,而且进行某个延时操作的对象还必须以持有外部类为基础才能进行的,这个时候就内存泄漏了。静态内部类可以解决这个问题,后面讲。比如Ha原创 2018-01-01 16:13:32 · 2710 阅读 · 0 评论 -
Java final的作用和基本数据类型对象存放位置的缺省机制
看到一个很有意思的代码public class Test { publicstatic void main(String[] args) { String a ="hello2"; finalString b = "hello"; String d ="hello"; S原创 2018-01-02 18:51:55 · 742 阅读 · 0 评论 -
面试必考-static、final和单例模式
static那天我朋友问了我个问题,static和单例模式有什么区别,所以我觉得static可以讲一下他的问题是,把对象弄成static是不是就不变了显然,这是还没弄清楚引用和对象的区别其实存放在静态区中的是引用,而不是对象。而对象是存放在堆中的。如果有这样一句话public static final Book book = new Book();意思就是b原创 2018-01-09 17:22:20 · 4134 阅读 · 5 评论 -
接口回调,用最简单的一个匿名内部类来讲解(附接口回调高级应用场景,让你对接口的了解登堂入室)
接口回调,是Java开发者必须要学的一个东西,可是他呢,书上没有,大神博客里也没有,所以导致了有部分小伙纸并不了解这个知识,所以这里做一个最简单的讲解。(先不牵扯什么异步回调、同步回调)首先,只需要记住一点,接口回调的含义就是把代码换个地方写。正常我们是这样写的public class Data3 extends MyData { Data3(原创 2018-01-05 16:59:22 · 2073 阅读 · 2 评论 -
java内存泄漏原因(从内存角度分析,而不是从语法角度)
昨天面试官大哥问了我JVM的垃圾回收算法,我答不上来,然后大哥说,内存泄漏是基于JVM的垃圾回收算法之上的。我当时还理解的还不太深刻,说了一串引用仍持有等等的东西来解释内存泄漏。其实不是的,我说的只是从语法层面出发的东西,正确的答案应该是,从内存的角度去分析啊。所以感兴趣可以先看看http://blog.csdn.net/qq_36523667/article/details/7893原创 2017-12-30 17:19:44 · 325 阅读 · 0 评论 -
JVM入门,java环境基础+理解内存+垃圾判定、回收算法
(借鉴自:https://www.cnblogs.com/aspirant/p/6841955.html)jvm就是java虚拟机(包含一套字节码指令集,一组寄存器,一个栈,一个垃圾回收堆和一个存储方法域),之所以可以跨平台,是因为你可以认为我们的代码仅仅是在虚拟机上跑,和不同的操作系统适配是整个java平台的任务。(不过最终还是需要经由他把字节码转化成不同平台的机器指令再执行的)原创 2017-12-30 16:24:09 · 228 阅读 · 0 评论 -
Java代码编译和执行的整个过程
转载自 http://blog.csdn.net/cutesource/article/details/5904542Java代码编译是由Java源码编译器来完成,流程图如下所示:Java字节码的执行是由JVM执行引擎来完成,流程图如下所示: Java代码编译和执行的整个过程包含了以下三个重要的机制:Java源码编译机制类加载机制转载 2017-12-30 14:32:06 · 213 阅读 · 0 评论