![](https://img-blog.csdnimg.cn/20200814115213874.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
JAVA学习笔记
文章平均质量分 60
记录java学习知识点,方便自己和他人
Zhongyi_Li
这个作者很懒,什么都没留下…
展开
-
this理解不到位,导致十一点半还在改bug
虽然,动画执行完我们给ConversationModel对象设置了动画执行完的标示,但是这个是老对象,再滑回来后,重新从数据列表中取对象,是新对象,是没有设置过动画执行完标示的,所以动画还得再执行。我们是采用paging+room的方式实现聊天对话界面的,有一种消息类型是互动动画,类似微信的掷骰子,骰子动画只执行一遍。在paging中,为了提高消息,paging机制中使用了diff机制,通过diff机制发现,第二次的数据加载其实就是在0位置插入了一条数据,看上面的log,其它都没有变化,UI也没必要刷新。.原创 2022-08-26 11:32:56 · 108 阅读 · 0 评论 -
从一个异常堆栈学习java的lambda表达式
2021-08-13 10:22:14.464 12589-12589/com.sohu.sohuvideo E/AndroidRuntime: FATAL EXCEPTION: main Process: com.sohu.sohuvideo, PID: 12589 java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.Integer.intValue()' on a null obj原创 2021-08-13 11:15:32 · 609 阅读 · 0 评论 -
Java 8 lambda表达式学习
其实Java 8的lambda表达式也不负责,只是编译器帮程序员做了很多工作,让程序员编写简单些,最终还是类包裹函数。Java Lambda表达式 实现原理分析java8 lambda表达式究竟需要怎么用原创 2020-11-20 11:33:19 · 79 阅读 · 0 评论 -
java String转Long
首先得检查String是不是数字,然后再转,要不然不是数字的String转报NumberFormatException。Java 判断string变量是否是数字Long.getLong() 与 Long.valueOf() 的区别原创 2020-11-05 10:37:55 · 334 阅读 · 0 评论 -
File getPath()、getAbsolutePath()、getCanonical
What's the difference between getPath(), getAbsolutePath(), and getCanonicalPath() in Java?详谈java中File类getPath()、getAbsolutePath()、getCanonical的区别原创 2020-10-17 12:06:00 · 163 阅读 · 0 评论 -
构造器、构造函数、<init>和<clinit>解惑
构造函数:也叫构造方法,就是我们写代码,和类名同名没返回类型的那个函数。构造器:这个是javac编译生成的一个函数,是在字节码层面存在的“函数”。它其实对一些代码的整合后生成的函数。和都是构造器,是编译器生成的。:实例构造器,是生成对象时执行的。我们在写代码new一个对象,其实执行的就是构造器。整合了父类的实例构造器、实例代码块{}、变量初始化和构造函数的代码。:类构造器,虚拟机装载类时调用的。其实,程序员写的代码只是表象而已,方便人类理解和写,最终还是看编译器怎么“理解了”。<init>构造器原创 2020-10-09 11:01:03 · 702 阅读 · 0 评论 -
Java搜索路径CLASSPATH
我们现在做java或者Android开发都是用IDE的,IDE帮我们配置好了各种环境,包括java搜索路径classpath,所以,如果java基础不牢的话,都不知道classpath是什么东西。在学python的时候,看到有对搜索路径的讲解,所以就想了解一下java的搜索路径。这里说一下我的理解,可能有地方不对。我们在创建类文件的时候,都会用到package,这个包是和实体目录对应的,可是需要注意的是,这个只是为了区分类的不同,包名.类名,才是完整的一个类。这个类是可以拷贝到其它地方。在编译的时候原创 2020-09-23 14:20:44 · 446 阅读 · 0 评论 -
Proxy和的delegate区别
在ios中使用proxy代理模式,经常容易和delegate委托模式混淆。委托模式(delegate),是简单的强大的模式,可让一个对象扮演另外对象的行为。委托对象保持到另外对象的引用,并在适当的时候发消息给另外对象。委托对象可以在发送消息的时候做一些额外的事情 (可以理解为委派的关系)。委托只是引用被委托对象代理模式 (proxy),代理模式一般要更严格,若干对象实现一个共同的接口。对应的是设计模式的代理模式...转载 2020-09-17 15:03:46 · 1309 阅读 · 0 评论 -
java之泛型的理解(教会你怎么用)
java的泛型是在java1.5才引入的,也就是说不是天生的,是后天加入的,为了兼容之前的代码,java采用了一种擦除的方式实现了泛型。也就是因为擦除的原因,所以java的泛型使用起来很别扭。本来泛型的出现,是为了让我们的代码更加泛化一些,但是java的泛型不够泛化。如果是用不变的类型参数T定义了泛型类或者泛型方法,在泛型代码里是不能用泛型参数调用方法的,当然Object的方法除外,类型参数被擦除到了Object,也就是说泛型代码里不知道类型参数代表的具体类型的。也就是说泛化了,可是功能受限了。这个问原创 2020-09-14 13:01:05 · 997 阅读 · 0 评论 -
mixin(混入)的概念
在阅读《java编程思想》第4版15.15章节的时候,提出了一个混型,原文是mixin,比较留下的翻译是混入。目前没搞明白是什么意思,这个应该是编程语言设计中的一个概念。先记录一下,以后有机会遇到再深入研究一下。据说Dart语言中实现了这个概念,以后用到flutter的时候,再研究Mixin是什么概念?Dart:什么是mixins?...原创 2020-09-08 19:15:00 · 317 阅读 · 0 评论 -
java之异常处理机制
异常概念怎么理解异常从字面意思理解就是不正常,对于不正常的事情是需要关注的,从不同的角度看异常,看法是不一样的。在java中,有些异常是程序逻辑不完善导致的,这种异常从程序的角度来看就是错误,以程序崩溃的形式体现,这是jvm辅助完成的,让程序员修改正确。可是有些异常是外部环境导致的,比如查找的文件不存在,这种异常程序本身没有问题,所以这种异常在编译阶段会被明确告知,可能会出现,让程序关注和处理,就好像一种通知机制一样,程序需要对这种异常处理,不能因为外部因素导致程序崩溃。java中异常表现形式是一个对原创 2020-08-31 11:58:01 · 185 阅读 · 0 评论 -
java之final关键字(java和Object C闭包访问局部变量的比较)
final数据定义为final,则说明它是一个常量。定义为static,则强调只有一份。常量是永恒不变,永恒不变是相对的。有时数据的恒定不变是很有用的,比如:一个永远不改变的编译时常量。一个在运行时被初始化的值,而你不希望它被改变。编译时常量,就是说编译时就确定了常量的值,值直到运行时都不会该改变。一个在运行时被初始化的常量值,说明是在运行时才确定的值,这个值对于不同的对象可能会不一样。编译时常量:final int valueone = 9;static final int VALUE原创 2020-08-17 14:35:32 · 211 阅读 · 0 评论 -
Java之复用类
java复用类的方式组合继承组合和继承的选择组合只是复用了现有程序代码的功能,而非它的形式。继承按照现有类的类型来创建新类,无需改变现有类的形式,采用现有类的形式并在其中添加新代码。组合技术通常用于想在新类中使用现有类的工作而非它的接口。即,在新类中潜入某个对象,让其实现所需要的功能,但新类的用户看到的只是为新类所定义的接口,而非所潜入对象的接口。为了取得此效果,需要在新类中嵌入一个现有的类的private对象。有些情况需要成员对象是public的,根据实际情况来,绝大多数时候成员对象都应该是原创 2020-08-17 14:34:20 · 102 阅读 · 0 评论 -
java之多态、类实例化过程
什么是多态为什么要有多态一些理解多态的表述构造器和多态实例化一个对象的过程参考什么是多态不局限于特定编程语言中,我们先从概念上理解多态。多态是同一个行为具有多个不同表现形式或者形态的能力;也就是,同一个行为在不同情况下可以表现出不同的结果。多态分离了做什么(what)和怎么做(how),即分离了接口和实现,接口定义了做什么(行为),实现来觉得怎么做(表现形式)。具体到语言当中,多态实现的前提是继承,继承允许将对象视为它自己本身的类型或者其基类类型来加以处理。java语言中使用多态,在编译期是不知道.原创 2020-08-14 11:02:20 · 813 阅读 · 0 评论 -
java之this和super深入理解
概述this和super是java中的关键字,我们对它们既熟悉又陌生,说熟悉是因为我们在开发中经常使用它们,说陌生是因为我们对它们没有深入的了解,有些概念可能理解的都不对。这篇文章尽可能准确的描述一下这两个关键字,方便大家的理解和给进一步学习奠定一个基础。this是什么?很多文章在讲解this和super的时候,都基本在说怎么用,很少有文章说this和super到底是什么,为什么能这样用。很多文章对this的描述是,this表示对当前对象的引用,可是什么叫当前对象呢?比如定义下面一个类packa原创 2020-08-14 11:36:29 · 396 阅读 · 0 评论 -
Java中的数组
(1)数组只是相同类型的、用一个标示符名称封装到一起的一个对象序列或基本类型数据序列。(1)Java的主要目标之一安全性。从Java和C/C++的数组,我们就可以知道这一点。在C/C++中使用数组是很危险的,因为C和C++的数组就是内存块。它们不确保数组被初始化,并且可以访问数组范围之外的内存(访问超出边界,C和C++会“默默”接受,并允许访问所有内存,许多声名狼藉的程序错误由此而生)原创 2012-10-26 10:40:42 · 720 阅读 · 0 评论 -
动态类型语言和静态类型语言
动态类型语言、静态类型语言动态类型语言:在运行期才会进行数据类型检查的语言。展开来说,对于动态语言,定义的变量是没有类型的,只要到了运行期,根据实际赋值的对象才确定类型,也就是说“变量无类型变量值才有类型”;在编译期给变量赋什么类型的值都可以,变量调用什么方法都可以,这样的话,在运行期进行类型检查时就增加了出错的风险,比如,在运行期,变量根据赋给它的值确定了类型,在调用方法的时候,发现调用的方法在此类型中没有,就会报错崩溃。静态类型语言:在编译期就进行数据类型检查的语言。在编译期变量的类型就已经确定,所原创 2020-08-12 11:22:39 · 365 阅读 · 0 评论 -
java之类型信息(Type Information)
目录欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入Runtime type information (RTTI) allows you to discover and use type in原创 2020-08-12 10:22:06 · 3328 阅读 · 0 评论 -
一文让你搞懂各种虚拟机、解释器、JIT和AOT编译器
问题提出什么是字节码?为啥要有字节码的存在?不同VM的字节码一样吗?VM对字节码是怎么执行的?Dalvik和ART发展历程一些概念的解释hot spotHotSpot VM自适应编译(adaptive compilation)JIT编译动态编译(dynamic compilation)JRockit VM前端编译JIT编译和AOT编译比较ART VM中AOT/JIT混合编译Dalvik VMDVM(Dalvik VM)与JVM的区别基于的架构不同执行的字节码不同DVM允许在有限的内存中同时运行多个进程DV.原创 2020-06-04 18:16:07 · 2461 阅读 · 0 评论 -
java ThreadPoolExecutor(线程池)源码,最细节明白的分析
概述在实际开发中,线程是经常被用到的,但是线程是一种稀缺资源,不能无节制的创建,不仅会销毁系统资源还会降低系统的稳定性,而且创建和销毁线程代价很高昂,所以,为了规程线程的时候,线程池就有用武之地了。线程池创建有限的线程并对它们进行管理。分析和学习源码比较好的方式是从调用入口入手,这样不至于被上千行的代码吓到。ThreadPoolExecutor的入口方法是execute,我们从这个方法分析开始。线程池状态在分析ThreadPoolExecutor源码的时候,学习到了一个技术,就是如何用一个数表示多个原创 2020-06-02 17:23:20 · 411 阅读 · 2 评论 -
Java线程之中断(InterruptedException处理)
线程启动是为了去执行一些代码,大家有没有想过,要怎么停止一个线程呢?线程执行完任务会自动停止的,这个大家都知道,可是,要想中途停止一个线程,尤其是阻塞中的线程,要怎么做呢?Thread stop方法官方已经废弃了,这种方式太暴力,会导致数据不一致问题,而且线程也没有必要说停止就要立马停止,所以Thread搞了一个中断机制的概念。中断就是给线程设置一个标示,线程在执行过程(尤其是循环执行任务的时候)中可以查询这个标示来决定要怎么做,可以继续执行也可以停止执行退出线程。而且对于有些阻塞中的线程,会响应中断的原创 2020-05-25 18:15:17 · 878 阅读 · 0 评论 -
Java线程之基本概念(线程状态)
ThreadGroup是为了方便对Thread进行管理,ThreadGroup中可以有ThreadGroup和Thread,所以成树形结构。Thread中有很多方法都是native的,Thread实例化的时候,其实就只是简单的设置了一些变量,比如线程组、优先级、Runnable等,这个时候线程是“NEW”状态。然后调用start方法的时候,才真正执行动作,比如把线程放到线程组里、执行nativ...原创 2020-04-28 18:18:51 · 292 阅读 · 0 评论 -
Java线程之同步
在学习HandlerThread源码的时候,看到了线程同步的用法,借此机会粗浅的学习一下,为以后有机会深入学习的时候做个铺垫,要不然这块基础都是0基础,一想起就心虚。 @Override public void run() { mTid = Process.myTid(); Looper.prepare(); synchroniz...原创 2020-04-27 16:19:13 · 206 阅读 · 0 评论 -
ThreadLocal.ThreadLocalMap源码解析
采用开放寻址法设计一个ThreadLocalMap我们在分析ThreadLocalMap源码之前,我们自己先设计一个算法,看怎么给Map添加set一对值。设计前提:(1)和ThreadLocalMap源码的一样,我们也只采用数组实现,不采用数组+单链表(2)Map的key是有WeakRefrence类型的,也就是说会map中会出现key为null的元素设计思路:首先通过ke...原创 2020-04-26 15:44:42 · 272 阅读 · 0 评论 -
java(Android)类加载机制
1、Java的类加载过程加载、链接(验证、准备、解析)、初始化加载就是把class文件字节码加载进jvm内存,变成Class对象。验证class字节流中包含的信息是jvm需要且有效的。准备是给类变量分配内存并设置初始化值。解析是把符号引用变成直接引用。初始化就是执行静态初始化器(静态代码块)和静态变量初始化。2、有几种类加载器,它们有什么不同?启动(Bootstrap)类加载器、扩...原创 2020-03-29 20:06:12 · 472 阅读 · 0 评论 -
java mac 环境配置等问题
Mac 上 java 究竟在哪里,本文彻底让你搞清楚!首先看一下上面这篇文章,说的基本没问题,可是在我的机器上就有问题,具体如下:通过上面文章的问题,我们知道,直接调用的java命令,其实是/System/Library/Frameworks/JavaVM.framework/Versions/A/Commands/java,通过查看版本号,发现都是openjdk 1.8.0的版本,这...原创 2020-03-27 19:11:32 · 862 阅读 · 0 评论 -
Https应用和面试层面的理解
Http是不安全的协议,主要体现在如下三点(1)数据是明文传输的(2)不进行身份验证(3)不会验证报文的完整性(完整性是包含一致性的)Https的出现就是解决上面三个问题的加密(Encryption), HTTPS 通过对数据加密来使其免受窃听者对数据的监听,这就意味着当用户在浏览网站时,没有人能够监听他和网站之间的信息交换,或者跟踪用户的活动,访问记录等,从而窃取用户信息。...原创 2020-03-22 10:46:30 · 300 阅读 · 0 评论 -
Android(java)内存泄露(Memory Leak)
Handler导致内存泄露问题Android Handler内存泄露Android App 内存泄露之Handler原创 2020-02-17 15:43:46 · 581 阅读 · 0 评论 -
Java基础知识
java中的每个类、接口,被加载后,jvm都会给一个类生成一个Class类的对象,也就是说所有类加载进内存都会变成Class类的对象,这个Class类和Object类没有区别,就是一个类而已。Class类是支持泛型的,Class<InputStream> isClass = InputStream.class,也可以使用通配符Class<?> isClass = Input...原创 2020-02-18 17:39:49 · 134 阅读 · 0 评论 -
Java 同步相关概念(synchronized、volatile)(悲观锁、乐观锁)(可见性、原子性和有序性)
锁的目的让一系列操作能被当作“原子”,能够正确执行。锁分为悲观锁和乐观锁,悲观锁就是假设一个线程在执行某些操作时(比如读写数据)别的线程也一定会一定会执行这些操作,叫并发冲突,所以在执行前先上锁,只能当前线程先操作,别的线程要操作时发现有锁先阻塞。乐观锁就是,假设不会有并发冲突,线程该执行什么操作就执行什么操作,只有更新的时候,才会检查有没有冲突,如果有冲突,可以让用户决定怎么处理,或者重试。乐观...原创 2020-02-20 18:11:23 · 638 阅读 · 0 评论 -
java 泛型(Generic)
java 泛型详解-绝对是对泛型方法讲解最详细的,没有之一泛型的基本概念看上面文章就行,说几点看开源库中看到的泛型用法: boolean hasLoadPath(Class<?> dataClass) { return getLoadPath(dataClass) != null; } <Data> LoadPath<Data, ?, T...原创 2020-02-10 14:38:09 · 307 阅读 · 0 评论 -
Android(Java)线程使用规范
java线程池ThreadPoolExecutor类使用详解Java线程池ExecutorServicejava并发编程:Executor、Executors、ExecutorServiceExecutorService详解Thread 的源码和原理也得学习一下...原创 2020-01-22 21:57:03 · 251 阅读 · 0 评论 -
java 基础 - WeakReference 和 ReferenceQueue
java 源码系列 - 带你读懂 Reference 和 ReferenceQueue原创 2020-01-22 17:02:32 · 1158 阅读 · 0 评论 -
java基础 equals和hashCode、HashMap
我们知道equals和hashCode都是Object的方法,equals是比较对象是否相同的,默认的是比较地址值,hashCode是获取哈希码的,获取哈希码是有一套哈希算法的,具体没研究,每个版本的java都有些不一样。equals和hashCode的关系更多的是一种约定,equals相同时,hashCode一定是相同的,equals不同时,hashCode也可能是相同的。所以才会有,重写e...原创 2020-01-22 17:02:07 · 259 阅读 · 0 评论 -
Java: Subtract '0' from char to get an int… why does this work?
Java: Subtract '0' from char to get an int… why does this work?原创 2019-12-12 07:14:25 · 138 阅读 · 1 评论 -
JVM相关知识和gc过程
java虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。jvm屏蔽了与具体操作系统平台相关的信息,使java程序只需生成在java虚拟机上运行的目标代码(字节码),就可以在多平台上不加修改地运行。jvm在执行字节码时,实际上最终还是把字节码解释称具体平台上的机器指令执行。JVM由哪些部分组成1、Class Loader 类加载器类加载器的作用是加载类...原创 2019-11-15 15:58:29 · 175 阅读 · 0 评论 -
java 泛型方法
java泛型在方法的使用Java泛型方法和类型通配符的区别Java编程的逻辑 (36) - 泛型 (中) - 解析通配符原创 2019-11-15 15:17:48 · 200 阅读 · 0 评论 -
哈希表和HashMap的说明
1. 根据设定的哈希函数H(key)和处理冲突的方法将一组关键字印象到一个有限的连续的地址集(区间)上,并以关键字在地址集中的“像”作为记录在表中的存储位置,这种表便成为哈希表,这一映像的过程叫哈希造表或散列,所得的存储位置称哈希地址或散列地址。2. 在Java中,HashMap是对哈希表的一个应用实现,解决冲突的方法采用的是“链地址法”。3. 当向HashMap中put一对键值时,它会根原创 2012-09-06 09:56:12 · 1163 阅读 · 0 评论 -
ThreadLocal用法详解和原理(weakReferenc 和 内存泄露)
一、用法ThreadLocal用于保存某个线程共享变量:对于同一个static ThreadLocal,不同线程只能从中get,set,remove自己的变量,而不会影响其他线程的变量。1、ThreadLocal.get: 获取ThreadLocal中当前线程共享变量的值。2、ThreadLocal.set: 设置ThreadLocal中当前线程共享变量的值。3、ThreadLoc...转载 2019-06-05 16:40:51 · 490 阅读 · 0 评论 -
JAVA中this用法小结
我知道很多朋友都和我一样:在JAVA程序中似乎经常见到“this”,自己也偶尔用到它,但是到底“this”该怎么用,却心中无数!很多人一提起它,就说“当前对象”,可到底什么是当前对象,是什么当前对象,他自己也不清楚。现在让大家看一个小例子,给你分享一下JAVA中“this”的用法!Java关键字this只能用于方法方法体内(this关键字只能在方法内部使用,表示对“调用方法的那个对象”的引转载 2012-10-12 10:04:45 · 729 阅读 · 0 评论