java基础
文章平均质量分 57
以千
这个作者很懒,什么都没留下…
展开
-
java基础语法
java static final原创 2022-09-22 11:28:53 · 139 阅读 · 0 评论 -
java队列 出入队的几种方法比较
插入系列addXXX :插入不成功 抛出异常offerXXX:插入不成功返回false,否则返回trueputXXX:插入不成功,阻塞线程offerXXX(xx,xx,xx):插入不成功,阻塞一定时间后被打断删除系列removeXXX:删除不成功 抛出异常pollXXX:删除不成功返回false,否则返回truetakeXXX:删除不成功,阻塞线程pollXXX(xx,xx,xx) :删除不成功,阻塞一定时间后被打断修剪:element() =...转载 2020-09-02 08:17:31 · 1283 阅读 · 0 评论 -
虚拟机崩溃文件解读hs_err_pidxxxx.log
一. 如何得到这个日志文件如果有一个严重的错误引起Java进程非正常退出,我们叫Crash,这时候会产生一个日志文件。缺省情况下,这个文件会产生在工作目录下。但是,可以在Java启动参数通过下面的设置,来改变这个文件的位置和命名规则。例如:java -XX:ErrorFile=/var/log/java/java_error_%p.log就将这个错误文件放在/var/log/java下,并且以java_error_pid.log的形式出现。# A fatal error has been d原创 2020-08-25 14:15:04 · 1941 阅读 · 0 评论 -
jdk32位与64位切换
1.系统path添加或者改名(系统找不到了就相当于删除,方便恢复)C:\ProgramData-切换\Oracle\Java\javapath\2.目录改名(同上,系统找不到了方便恢复)C:\ProgramData\Oracle\Java\javapath-切换原创 2020-08-13 23:13:58 · 4548 阅读 · 1 评论 -
double和float的精度和取值范围
(1)占用字节不同float占4个字节(32位)内存空间,其数值范围为3.4E-38~3.4E+38。double占8 个字节(64位)内存空间,其数值范围为1.7E-308~1.7E+308。(2)float只能提供七位有效数字。double可提供16位有效数字。float的范围 2^-128到 2^127...原创 2020-02-27 13:42:37 · 39528 阅读 · 0 评论 -
抽象类与接口区别
接口 抽象类私有方法和变量 不能有可以有继承和实现 实现多个 继承1个数据成员和方法 成员必须是static final的且必须赋初值可以有数据成员,也可以有非abstarct的成员方法成员方法默认都是 public abstract 类型 数据可以在子类中重新定义和赋初值设计理念 has-a is-a实现 必须实现接口里所有方法有选择地实现需要的方原创 2018-03-20 23:17:18 · 98 阅读 · 0 评论 -
java四种引用类型
⑴强引用(StrongReference)强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题。⑵软引用(SoftReference)如果一个对象只具有软引用,则内存空间足够,垃圾回收器就不会回收它;如果内存空间不足转载 2018-04-04 09:25:15 · 108 阅读 · 0 评论 -
java中抽象类和接口
Java 中,抽象类和接口有很多不同之处,但是最重要的一个是 Java 中限制一个类只能继承一个类,但是可以实现多个接口。抽象类可以很好的定义一个家族类的默认行为,而接口能更好的定义类型,有助于后面实现多态机制。抽象类抽象类不可以实例化对象, 实际上抽象类除了被继承以外没有任何意义, 只要类中有一个方法是抽象方法, 此类就是抽象类. 子类集成抽象父类, 那么子类必须重写父类的抽象方...原创 2019-04-16 22:51:55 · 122 阅读 · 0 评论 -
CountDownLatch原理
1.源码 public CountDownLatch(int count) { if (count < 0) throw new IllegalArgumentException("count < 0"); this.sync = new Sync(count); } 2.Sync对象 private s...转载 2019-06-14 16:57:57 · 2373 阅读 · 0 评论 -
hashmap中的key
static final int hash(Object key){ int h; //异或:^ //对应位相同为0,不同为1 //使用key的hashcode,保留高16位,然后高16位和低16位做异或计算低16位。 return (key == null)?0:(h=key.hashCo...原创 2019-07-22 15:10:02 · 689 阅读 · 0 评论 -
CyclicBarrier和CountDownLatch
CountDownLatch假设有这样一个场景:两个runner等待起跑,枪响, 然后观众等待比赛结束. 高声喊出谁是冠军. 同时裁判(主线程)也宣布比赛结束.class Player implements Runnable{ private CountDownLatch begin; private CountDownLatch end; Player(...原创 2019-08-05 15:31:11 · 221 阅读 · 0 评论 -
wait和notify和semaphore实现生产者消费者
1.wait和notifyConsumer public class Consumer extends Thread{ private int num; private Storage storage; public void run(){ consume(num); } p...原创 2019-08-07 11:20:22 · 397 阅读 · 0 评论 -
java对象的生命周期
在JVM运行空间中,对象的整个生命周期大致可以分为7个阶段:创建阶段(Creation)、应用阶段(Using)、不可视阶段(Invisible)、不可到达阶段(Unreachable)、可收集阶段(Collected)、终结阶段(Finalized)与释放阶段(Free)。上面的这7个阶段,构成了 JVM中对象的完整的生命周期。下面分别介绍对象在处于这7个阶段时的不同情形。1.创建阶转载 2018-02-24 20:10:42 · 130 阅读 · 0 评论 -
文件点击apk安装过程
转自:http://blog.csdn.net/sgzy001/article/details/44857057使用PackageInstaller安装app流程学习小结前言首先本文不是做PackageManagerService学习总结,PackageManagerService这货有1万2千多行代码,学习起来颇费劲,并且这货功能强大,本文只会总结其中一个小小的功能为何要做这转载 2018-02-08 17:24:49 · 16543 阅读 · 0 评论 -
App启动时间统计
转自:http://www.jianshu.com/p/c967653a9468一 启动类型工欲善其事,必先利其器。想要优化 App 的启动速度,必须有准确衡量启动时间的方法,否则优化完之后效果怎样,自己都不知道,说出去别人也不信服不是。在做 App 启动时间统计之前,当然必须弄明白有哪些启动类型,每种启动类型的特点。通常来说,在安卓中应用的启动方式分为以下几种:冷启动:当启动应用时,转载 2017-12-08 15:44:31 · 1082 阅读 · 0 评论 -
ThreadLocal的原理
转自:https://www.cnblogs.com/dolphin0520/p/3920407.html1.对ThreadLoacl的理解ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。class ConnectionManager { private static Connection connect = n转载 2017-12-11 15:56:12 · 147 阅读 · 0 评论 -
关于ClassLoader的原理
1. Class文件的加载过程Java虚拟机类加载过程是把Class类文件加载到内存,并对Class文件中的数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的java类型的过程。在加载阶段,java虚拟机需要完成以下3件事:a.通过一个类的全限定名来获取定义此类的二进制字节流。b.将定义类的二进制字节流所代表的静态存储结构转换为方法区的运行时数据结构。c.在java原创 2017-12-12 11:21:25 · 2864 阅读 · 0 评论 -
java虚拟机到底是什么
转自:http://blog.csdn.net/zhangjg_blog/article/details/20380971虚拟机是一种抽象化的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机有自己完善的硬体架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。JVM屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),转载 2017-12-07 16:24:09 · 18958 阅读 · 3 评论 -
hashmap的原理
转自:简单介绍:(1)由一个数组+若干个链表组成(2)put计算hash值对key的hashcode进一步计算,确保散列均匀,得到2次hash值根据2次hash值和数组长度计算出真正的存储位置存储,新增一个entry, 把这个entry放到数组中.(当size超过临界阈值threshold,并且即将发生哈希冲突时进行扩容)注:扩容一定是2的次转载 2018-01-30 17:26:14 · 175 阅读 · 0 评论 -
SparseArray介绍
结构方面:它内部则是通过两个数组来进行数据存储的,一个存储key,另外一个存储value,为了优化性能,它内部对数据还采取了压缩的方式来表示稀疏数组的数据只是觉得SparseArray比HashMap更省内存, 至于存储效率, 只能说在特定情况下才能比hash快(很有限, 比如顺序插入).限制方面:SparseArray只能存储key为int类型的数据查找用的是2分法.原创 2018-01-31 11:12:34 · 257 阅读 · 0 评论 -
ConcurrentHashMap原理
转自:http://www.importnew.com/16142.html一.Java并发基础当一个对象或变量可以被多个线程共享的时候,就有可能使得程序的逻辑出现问题。 在一个对象中有一个变量i=0,有两个线程A,B都想对i加1,这个时候便有问题显现出来,关键就是对i加1的这个过程不是原子操作。要想对i进行递增,第一步就是获取i的值,当A获取i的值为0,在A将新的值写入A之前,B转载 2018-02-02 14:48:46 · 114 阅读 · 0 评论 -
cas介绍
1.什么是cas在JDK 5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁锁机制存在以下问题:(1)在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题。(2)一个线程持有锁会导致其它所有需要此锁的线程挂起。(3)如果一个优先级高的线程等待一个优先级低的线程释放锁会导致优先级倒置,引起性能风险。volatile是不错的机制转载 2018-02-26 10:27:17 · 259 阅读 · 0 评论 -
synchronized用法
1.同时修饰方法和修饰对象thisjava的内置锁:每个java对象都可以用做一个实现同步的锁,这些锁成为内置锁。线程进入同步代码块或方法的时候会自动获得该锁,在退出同步代码块或方法时会释放该锁。获得内置锁的唯一途径就是进入这个锁的保护的同步代码块或方法。 java内置锁是一个互斥锁,这就是意味着最多只有一个线程能够获得该锁,当线程A尝试去获得线程B持有的内置锁时,线程A必须等待或者阻转载 2018-02-26 11:49:00 · 143 阅读 · 0 评论 -
List中Collections.synchronizedList和synchronized
1. 一个简单的例子public class MultiThread { public static final List list = Collections.synchronizedList(new ArrayList()); public static void main(String[] args) { for(int i = 1;原创 2018-02-06 14:22:17 · 1583 阅读 · 0 评论 -
关于String.format("%5.2f", )
String a = String.format("%5.2f",123456.556);System.out.println(a);String a1 = String.format("%8.2f",6.556);System.out.println(a1);String a2 = String.format("%8.2f",12.5);System.out.println(原创 2016-12-29 10:10:40 · 4027 阅读 · 0 评论