Java
文章平均质量分 85
Gdeer
这个作者很懒,什么都没留下…
展开
-
Java 中的锁:悲观锁、乐观锁、自旋锁、偏向锁、公平锁、可重入锁、独享锁...
文章目录一、悲观锁、乐观锁二、自旋锁、适应性自旋锁三、偏向锁、轻量级锁、重量级锁四、公平锁、非公平锁五、可重入锁、不可重入锁六、独享锁、共享锁一、悲观锁、乐观锁这里的锁,是一种多线程同步操作资源的方式,即悲观方式与乐观方式。悲观方式:加锁,如:synchronized、ReentrantLock乐观方式:不加锁,如:concurrent 包的原子类不加锁是如何保证多个线程...原创 2020-03-04 11:44:26 · 922 阅读 · 0 评论 -
Java 获取泛型对象的参数类型
文章目录一、类中有 class 信息二、父类中有 class 信息2.1 子类2.2 匿名子类三、持有者中有 class 信息由于类型擦除,java 中的泛型对象在运行时是不知道自己类型参数的类型的。但有几种特殊情况,能够获取泛型对象的参数类型:1、类中有 class 信息(类中有一个 Class 字段)2、父类中有 class 信息(父类是泛型类,并指定了参数类型)3、持有者中有 c...原创 2020-03-01 13:48:28 · 4514 阅读 · 0 评论 -
Java 基础:泛型
文章目录一、为什么要有泛型二、泛型的分类三、泛型的关键字3.1 T3.2 ?四、泛型类、方法的定义4.1 泛型类的定义4.2 泛型方法的定义五、泛型类、方法的使用5.1 泛型实现类5.2 通配类5.2.1 AClass<?>5.2.2 AClass<? extends BClass>5.2.3 AClass<? super BClass>六、代码示例一、为什么...原创 2019-10-25 11:16:23 · 469 阅读 · 0 评论 -
一句话讲清楚双亲委托模型
双亲委托模型,其实就是递归调用。把原本的按优先级顺序调用,改为递归调用。优先级:A > B > C顺序调用:D#loadClass()public Class loadClass(String name) { if (name == "a") { return A.findClass(); } else if (name == "b") { return B.fi...原创 2019-04-09 18:34:47 · 353 阅读 · 0 评论 -
Retrofit 源码解析
本文基于 Retrofit 2.5Retrofit :改造改造了什么呢?把一个 Http 请求转化为一个 Java 接口的调用。文章目录一、简单使用二、一次调用2.1 InvocationHandler.invoke()2.1.1 创建 ServiceMethod2.1.1.1 创建 requestFactory2.1.1.2 创建 callFactory2.1.1.3 创建 call...原创 2019-04-14 23:06:21 · 196 阅读 · 0 评论 -
设计模式:概述
本文介绍 23 种设计模式文章目录一、概述二、详解2.1 六大原则2.1.1 单一职责一、概述六大原则:单一职责里式替换接口隔离依赖倒置迪米特原则开闭原则23种设计模式:口诀:四者三器两工厂装饰策略作门面代理享元搭桥梁单例命令变状态备忘录上现原型模板组合责任链二、详解2.1 六大原则2.1.1 单一职责...原创 2019-04-23 20:59:51 · 239 阅读 · 0 评论 -
一种更直观的二叉树非递归遍历方法
二叉树:class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}中序遍历:递归:public void printTreeMid(TreeNode...原创 2019-05-05 11:01:01 · 217 阅读 · 0 评论 -
自定义 ellipsize 后缀的 TextView
左:正常的 ellipsize 效果右:带 “>>” 后缀的 ellipsize 效果<com.gdeer.gdtesthub.textView.EllipsizeTextView android:id="@+id/tv_special" android:layout_width="58dp" android:layout_height="wrap_...原创 2019-05-30 23:00:52 · 1582 阅读 · 0 评论 -
Android Studio 运行 java,找不到或无法加载主类
运行 java 的过程可参考这里:https://blog.csdn.net/Gdeer/article/details/83062523升级 Android Studio 3.5 后,运行 java,报错:18:12:57: Executing task 'Jk.main()'...* What went wrong:A problem occurred configuring proj...原创 2019-09-03 09:04:21 · 9938 阅读 · 2 评论 -
Java 基础:枚举
枚举的写法enum Shape { Circle, Rectangle, Triangele}实际生成的类// 反编译 Shape.classfinal class Shape extends Enum { // 编译器为我们添加的静态的 values() 方法 public static Shape[] values() { r...原创 2019-09-29 13:06:39 · 244 阅读 · 0 评论 -
Java 基础:Annotation
注解(Annotation)就是一种程序可识别的注释。本文介绍注解的使用。文章目录一、概述二、注解的分类2.1 JDK 自带注解2.2 元注解2.3 自定义注解三、注解的语法3.1 定义注解3.2 定义元素3.3 使用注解四、注解的处理4.1 注解处理器4.1.1 定义注解4.1.2 定义注解处理器4.1.3 使用注解4.1.4 注解处理器执行4.2 反射一、概述注解:程序可识别的注释...原创 2019-04-03 15:34:07 · 205 阅读 · 0 评论 -
[Ljava.lang.String;@6d6f6e28 是什么意思
文章目录一、问题二、初探三、深入一、问题打印 String[]String[] strs = new String[]{"a", "b", "c"};System.out.println(strs);输出[Ljava.lang.String;@6d6f6e28java.lang.String;、@6d6f6e28 我都能理解,[L 是什么意思呢?二、初探看一下 System....原创 2019-04-08 17:56:46 · 5123 阅读 · 1 评论 -
JavaPoet 的使用
JavaPoet 用来生成 .java 文件,本文介绍它的用法。JavaPoet 官方文档:https://github.com/square/javapoet文章目录一、引用二、HelloWorld三、控制流四、通配符4.1 \$L、$S(字面值、字符串)4.3 $T (类、接口、枚举)4.4 $N(方法名、变量名)一、引用implementation ‘com.squareup:...原创 2019-04-01 09:53:19 · 694 阅读 · 0 评论 -
RxJava-1 指南
本文基于扔物线的 给 Android 开发者的 RxJava 详解 提炼简化,感谢。RxJava 是什么一个词:异步。说到根上,它就是一个实现异步操作的库,而别的定语都是基于这之上的。RxJava 好在哪里一个词:简洁。能把什么复杂逻辑都能穿成一条线的简洁。API 介绍和原理解析1.概念:扩展的观察者模式四个基本概念:Observable、O...原创 2018-05-03 10:54:39 · 184 阅读 · 0 评论 -
Android 中的 ClassLoader
ClassLoaderClassLoader 是用来加载 class 的类,它是一个抽象类。通过一个类的二进制名,一个 classLoader 会尝试去定位或生成组成一个类需要的数据。一个典型的策略是把类名转化为文件名,然后从文件系统读取这个文件名的 class 文件。二进制名:&quot;java.lang.String&quot;&quot;javax.swing.JSpinner$DefaultEditor...原创 2018-04-29 18:26:43 · 509 阅读 · 0 评论 -
Kotlin 笔记:基本数据类型和其他数据类型
基本数据类型:Int、Boolean 及其他整数类型——Byte、Short、Int、Long浮点数类型——Flost、Double字符类型——char布尔类型——Boolean在底层,像 Int 这样的 Kotlin 类型,会编译成 Java 对应的基本数据类型,因为两者都不能存储 null 值。反过来也一样,Java 的基本数据类型会被当做非空类型(而不是平台类型),因为他们都...原创 2018-10-25 17:24:19 · 645 阅读 · 0 评论 -
java 基础:反射
理解反射:从一个对象获取到它的类信息。Class 类和 java.lang.reflect 类库一起对反射的概念进行了支持。一个类的信息主要包括属性、方法、构造器,对应 java.lang.reflect 类库中的 Field、Method、Constructor,通过 Class 类的 getFields()、getMethods()、getConstructors() 来获取。对于 F...原创 2018-10-21 22:10:19 · 189 阅读 · 0 评论 -
Android 中 FLAG 的操作(位运算)
总结一下:添加 FLAG:mGroupFlags |= FLAG清除 FLAG:mGroupFlags &amp;amp;= ~FLAG包含 FLAG:(mGroupFlags &amp;amp; FLAG) != 0不包含 FLAG:(mGroupFlags &amp;amp; FLAG) == 0在 Android 源码中,有很多的 FLAG 常量,这些常量用二进制来表示时,只有一位是 1。有一个变量...原创 2019-03-02 23:42:16 · 1276 阅读 · 0 评论 -
JVM 基础:内存分区
文章目录运行时数据区1 程序计数器2 Java 虚拟机栈3 本地方法栈4 Java 堆5 方法区6 运行时常量池7 直接内存运行时数据区Java 虚拟机运行时数据区包括:堆、方法区;虚拟机栈、本地方法栈、程序计数器1 程序计数器程序计数器是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器。代码的分支、循环、跳转、异常处理、线程切换等操作都需要用到程序计数器。每个...原创 2019-03-03 22:11:12 · 170 阅读 · 1 评论 -
Java 基础:ThreadLocal 解析
ThreadLocalThreadLocal,用于为线程提供线程私有变量。换句话说,它能为线程增加新的成员变量。实现方式:Thread 中提前放置一个成员变量 ThreadLocalMap,可以将它看作一个 ThreadLocal-&amp;gt;Object 的 Map(内部实现是一个数组)。当需要为 Thread 增加一个类型为 T 的成员变量时,声明一个 ThreadLocal&amp;...原创 2019-03-03 22:59:40 · 202 阅读 · 0 评论 -
JVM 基础:垃圾回收
一、标记垃圾1.1 引用计数法每个对象记录一个被引用值,被引用一次加一次,引用取消减一次。进行垃圾回收时,如果被引用值是0,就说明是垃圾。问题:循环引用当 A 引用 B,B 引用 A 时,他们都不会被回收。1.2 可达性分析从一系列根节点进行遍历,找到能到达的每个点。不在这些点内的对象就是垃圾。解决了循环引用问题。可达性分析的根节点:虚拟机栈中引用的对象方法区中的静态对象方...原创 2019-03-24 22:29:36 · 197 阅读 · 0 评论 -
java 基础:多线程
一、什么是线程要说线程,先说进程,就像手机上的 App,每个 App 都有一个进程,它的所有操作都在这个进程里进行。线程是进程里处理任务的单位。通常一个进程有一个主线程,多个子线程。如一个浏览器里,界面的显示就是它的主线程,当我们开始下载一个东西,如果在主线程下载,用户就不得不等到下载完成后再进行别的操作,这时就要将下载放在子线程中进行。所以子线程,就是用来处理耗时任务的。1.1 线程的执...原创 2019-03-26 23:06:01 · 222 阅读 · 0 评论 -
线程的生死
与人一样,线程的一生,不过是出生,活着,死去,活着才有那么多故事,求不得,等不到。线程的状态: New(新创建) Runnable(可运行) Blocked(被阻塞) Waiting(等待) Timed waiting(计时等待) Terminated(被终止) 新创建线程new Thread(),此线程还没有开始运行; 可运行线程一旦调用 start原创 2016-10-30 11:06:58 · 340 阅读 · 0 评论