Java
文章平均质量分 78
别急,还差一行代码
放弃不难,但坚持一定很酷!
展开
-
Java进阶——锁(悲观锁、乐观锁、偏向锁、轻量级锁、重量级锁)与锁的膨胀
一、Java的锁1. 悲观锁和乐观锁首先我们需要明白一个概念,资源或者变量如果只是并发读是不会产生冲突的,我们所遇到的并发冲突都是并发写,或者既有读又有写。悲观锁是指当对一个资源进行加锁时,默认这个资源是并发不安全的,即默认所有并发操作都会导致冲突,可以理解为悲观锁认为所有对资源或变量的并发操作都是写操作。一旦有一个线程拿到资源,其他线程都会被直接阻塞等待,synchronized和ReentrantLock都是悲观锁的具体实现,乐观锁正好相反,默认所有资源都是并发安全的,乐观锁在获取资源时不会阻塞原创 2022-04-21 16:52:28 · 1010 阅读 · 0 评论 -
Java基础知识点总结系列(十)——集合及其常用方法
概述Java中集合整体上分为两大类:Collections和Map一、CollectionCollection是一个接口,他没法直接进行实现,它定义了集合类一些公有的方法,比较常用的方法包括:① int size(); 返回集合汇总元素的数量(集合的大小);② boolean isEmpty(); 返回集合是否为空,true表示空;③ boolean contains(Object o); 返回集合中是否包含特定的对象o,为true表示包含;④ Iterator iterator(); 返回遍原创 2020-12-10 22:17:39 · 224 阅读 · 0 评论 -
Java基础知识点总结系列(十一)——多线程与同步
一、线程状态原创 2020-11-29 19:48:14 · 133 阅读 · 0 评论 -
Java基础知识点总结系列(九)—— 指针碰撞与TALB
一、 Java中的指针碰撞与TLAB1. 指针碰撞Java中提到指针碰撞主要是在GC中,GC的标记/整理(标记/压缩)算法在每次执行完之后会通过一个指针将堆内存分为两个区域,分别是已用区域和未用区域。指针的左边已用区域内存满了对象(其实就是经过上一次GC之后存活下来的对象),指针的右边为可用区域。之后当需要new一个对象时,JVM会在当前指针所指位置为新对象分配内存,并将指针向后移动对象所对应size位。比如new的对象需要128字节的内存空间,那么JVM将会从当前指针所指位置开始,之后的128字节分配原创 2020-11-23 22:23:23 · 2073 阅读 · 1 评论 -
Java基础知识点总结系列(八)——Java内存管理与垃圾回收
一、基础知识储备1. Java内存划分Java内存包括五个部分:堆内存,方法区、栈内存、程序计数器、本地方法栈1.1 堆内存(线程共享)堆内存是Java内存区域最大的一块,所以也是GC垃圾回收的重点关照对象。Java中所有的对象实例都存储在堆内存上(new Object())1.2 方法区(线程共享)1.3 栈内存(线程共享)1.4 程序计数器(线程私有)与每个线程关联,每创建一个线程,系统都将为其创建一个程序计数器,用来存储当前线程中下一条指令的位置,以便在多线程切换时能保证...原创 2020-11-23 22:21:48 · 277 阅读 · 0 评论 -
Java基础知识点总结系列(六)——Java反射机制与动态代理
一、反射机制反射给程序提供了一种在程序运行时动态获取类的属性、构造器、方法,并且不需要生成对象,且不受到访问符的限制(可以获取私有属性和方法);反射作用①二、动态代理原创 2020-11-02 22:09:52 · 225 阅读 · 0 评论 -
Java基础知识点总结系列(五)——Error与Exception(Java异常处理机制)
一、Error和Exception继承关系Error和Exception都继承自Throwable原创 2020-10-28 21:30:16 · 340 阅读 · 1 评论 -
Java基础知识点总结系列(四)——equals()与hashCode()
一、 equals与====对于基本数据类型(int, float, double, short, long, boolean, char, byte),==比较的是他们的值,而对于引用类型,返回的使他们引用的比较(也就是地址的比较);equalsequals()是Object类下的一个方法,默认其内部实现就是通过==实现的。public boolean equals(Object obj) { return (this == obj);}二者区别equals()只能对对象使用原创 2020-10-24 13:32:18 · 114 阅读 · 0 评论 -
Java基础知识点总结系列(三)——Int与Integer(其他包装类类似)
一、 int和Integer1. Integer的初始化Integer a = new Integer(100);Integer b = 100;a == b; //false2. Integer的比较① 一个new的Integer和直接赋值的Integer之间的比较Integer a = new Integer(100);//a指向堆上的值为200的Integer对象Integer b = 100; //b指向常量池a == b; //false,地址不同② 一个Integer和一原创 2020-10-23 15:24:20 · 237 阅读 · 1 评论 -
Java基础知识点总结系列(一)——Java面向对象
多态1. 重载和重写重载:(overloading)是同一个函数名,实现不同功能,重载的函数参数表列一定不同,且重载的函数在一个类中,比如“+”运算符针对数字对应的是数学上的加,而对于字符串则是连接;重写:(override)子类重写父类的方法,发生在继承过程中,子类重写的方法参数表列与父类相同;/***重载*/public class OverLoadingClass{ public int add(int a,int b){ return a + b; } public S原创 2020-10-22 19:53:05 · 102 阅读 · 0 评论 -
二叉搜索树相关总结(Java实现)--学习笔记
前言数组和链表作为比较基础的数据类型,二者均有各自优点。数组本身适合查找,对于一个元素数量为n的数组,其查找时间复杂度为O(1),但是如果需要插入或删除元素,则意味着插入位置的元素需要全部后移,删除则意味着删除位置元素位置全部前移一位,两种操作时间复杂度均为O(n);链表适合插入或删除,只需要修改指针指向即可实现插入和删除,在已知插入或删除位置的情况下,时间复杂度为O(1),而查找某个元素时间复杂度为O(n).那么有没有一种数据结构能同时实现数组的查找和链表的插入删除呢?有,那就是二叉搜索树。一原创 2020-09-18 21:17:15 · 185 阅读 · 1 评论 -
Java多线程下载时线程启动异常或无法启动的问题
最近在开发一个跨平台通用下载器,然而在第一步多线程测试时就遇到了一个莫名其妙的问题,因为是测试,所以我就从网上随便找了一张图片,关于为什么选择图片,是因为其实最初我是拿QQ电脑版安装包做测试的,但是文件下载总是有问题,由于exe文件只要任何一个字节的错误都会导致文件无法使用,所以无法定位错误到底有多大以及错误出现具体线程,而图片本身丢失一部分数据依旧可以显示,丢失的数据对应的部分会显示异常,这样可...原创 2020-02-19 22:40:10 · 1913 阅读 · 0 评论 -
Java中 HashMap和HashTable区别
线程安全方面HashMap线程不安全,效率高,自JDK1.2之后可以使用;HashTable线程安全,效率低,自JDK1.0之后可以使用;键值对空值相关HashMap键值均可为null;HashTable键值均不可为null;...原创 2019-10-24 00:55:37 · 1298 阅读 · 0 评论 -
Java 中Object类中方法
Object类是所有类的最终父类,其内部封装了一些方法,之前了解不够,专门总结如下。1. hashCode()此方法通过哈希映射,通过对象的相关信息(对象存储物理地址,字段信息等)映射为一个数值,这个数值称之为散列值。这个散列值通常同于在集合中对象的重复性检查,因为集合中不允许出现重复的对象,所以再添加前通常要检查集合内是否已存在对象,一种方案是通过equals,与集合中元素逐个比较,但当集...原创 2019-10-23 21:09:18 · 1339 阅读 · 0 评论 -
Android下自己实现依赖注入框架
在博客开始之前,我们先来介绍几个东西。什么是注解?注解简而言之就是对程序加上的一种标签,这个标签本身对源代码没有任何影响,我没有扯淡,注解本身对源代码确实没任何影响,实际上,是通过**APT(Annotation Processing Tool)**对程序中的注解进行检测并执行一些操作,比如检测到@Deprecated注解时,认为这个函数已被淘汰,于是APT会在函数上加上删除线,提醒开发者此...原创 2019-05-23 20:57:48 · 2702 阅读 · 0 评论 -
基于Java从零开始实现设计模式(三)——观察者模式
首先先来介绍一下什么是观察者模式:观察者模式是一种行为型模式,也被叫做发布/订阅模式,其内容就是通过定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。观察者模式主要解决的就是在易用和低耦合的前提下实现对象状态的同步。其实这种设计模式在Android下运用早已十分广泛,如控件的监听、数据与UI的同步、Broadcast以及其他一些框架RxJa...原创 2019-07-01 15:53:45 · 2047 阅读 · 0 评论 -
基于Java从零开始实现设计模式(二)——Builder模式
Builder模式:此模式下,用户不用知道内部构建细节,可以更好的控制构建流程。一个复杂对象可以有很多参数、部件,Builder模式就是为了将创建这个复杂对象的过程和对象的众多参数部件分开,已达到解耦的目的。一般过程:1、私有化构建方法,使其只能通过内部类Builder的build方法创建2、静态内部类作为桥梁,可以设置所有参数3、通过build的方法创建Person实例。4、由于Bui...原创 2019-07-01 15:59:22 · 1172 阅读 · 0 评论 -
Java知识点汇总之ArrayList和LinkedList区别
本文非原创,原文地址:传送门ArrayList和LinkedList都是我们常用的泛型集合ArrayList可以看做是一种支持扩容的数组,或者称之为动态数组,所以其具备数组的基本特征,因此ArrayList基于下标的随机查询效率非常高,在数组尾部添加元素也比较快,但是在对ArrayList进行删除或者增加时,其效率就会比较低,最坏情况下当删除第一个元素或者在第一个元素后添加元素时,需要对整个数...转载 2019-09-21 18:55:26 · 1188 阅读 · 0 评论 -
Java基础知识点回顾之String
String对象算是我们接触到的最多的Java对象之一了,虽然大家天天使用,但是一次基础知识点可能并非完全熟悉,今天就对String的一些相关基础知识点进行一个总结。一、 String的创建了解String创建方式之前,我们有必要先了解一下String常量池,参考这篇文章:Java String常量池理解String的创建方法有两种1. 通过字符串常量进行创建String str1 = ...原创 2019-09-30 20:57:43 · 1473 阅读 · 0 评论 -
基于Java从零开始实现设计模式(一)——单例模式
1.单例模式(singleton):每个类只允许一个实例,提供一个全局的访问点,即通过将其构造方法设计为private类型,使其无法通过new方法拿到其实例,只能通过类中定义的get方法拿到类的实例。1.1:fina式1.1.1 第一步:私有构造1.1.2 第二步:定义公有静态成员类package designPattern;public class Demo01_SingletonF...原创 2019-04-27 20:22:37 · 2887 阅读 · 0 评论