自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 收藏
  • 关注

原创 单例模式

单例模式:单例模式(Singleton Pattern)是 Java 中的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。特点1、单例类只能有一个实例。2、单例类必须自己创建自己的唯一实例。3、单例类必须给所有其他对象提供这一实例。实现作用:保证一个类仅有一个实例,并提供一个访问它的全局访问点。主要解决:

2020-08-04 21:00:54 126

原创 线程的生命周期,及之间的转换

在Java中,任何对象都有生命周期,线程也不列外。当Thread对象创建完成,线程的生命周期就开始了。当run()方法中代码正常执行完毕或者线程抛出一个未捕获的异常(Exception)或者错误(Error)时,线程的生命周期便会结束。线程整个生命周期可以分为五个阶段,分别是新建状态(New)、就绪状态(Runnable)、运行状态(Running)、阻塞状态(Blocked)和死亡状态(Terminated),线程的不同状态表明了线程当前正在进行的活动。在程序中,通过一些操作,可以是线程在不同状态之间转换

2020-08-04 20:38:38 240

原创 volatile关键字

volatile关键字volatile 修饰的成员变量在每次被线程访问时,都强制从共享内存中重新读取该成员变量的值。而且,当成员变量发生变化时,会强制线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。volatile是Java虚拟机提供的轻量级的同步机制volatile语义有如下两个作用可见性:保证被volatile修饰的共享变量对所有线程总数可见的,也就是当一个线程修改了一个被volatile修饰共享变量的值,新值总是可以被其他线程立即得知。有序性:禁止指

2020-08-04 20:29:16 101

原创 线程安全问题 &synchronized和Lock的区别

线程安全问题出现的原因:多个线程共用了一个数据(共享的语句有多条,一个线程使用cpu,没有使用完,cpu被抢走了,当再次抢到cpu的时候,接着执行后面的语句,造成了错误的发生)。在java中,如果使用多个Thread启动同一个Runable的线程对象,此时这些线程会共享Runable对象中的属性,就容易出现线程安全问题。线程m1和m2共享对象m;其中m对象中的id属性被共享,在运行时m1,m2;争抢运行,出现其中一方在修改id但尚未赋值的情况下另一方已经进行修改并重新赋值,之后此方将之前未赋值的值赋给

2020-08-04 20:00:52 600

原创 HashMap的put 浅谈

HashMap 的put方法在底层会调用putVal方法,其中首参数会使用hash()方法hash()方法可以将不定长的输入通过散列算法转换成一个定长的输出,这个输出就是散列值(若输入为0则返回0;其他情况与移位后的数进行异或操作作(异或操作所得的数据得到散列值))。需要注意的是,不同的输入通过散列函数,也可能会得到同一个散列值。因此我们不能使用散列函数来获取唯一值。putVal方法的工作流程:param hash key的hash值param key the keyparam value the

2020-07-28 22:43:33 157

原创 HashMap、Hashtable、ConcurrentHashMap三者间的异同

存储形式继承MapMap中的集合,元素是成对存在的(K - V 值,即键值对)。每个元素由键与值两部分组成,通过键可以找对所对应的值。HashMap:HashMap 是 Map 接口的常用实现类,数据处理时K-V值 当成一个整体进行处理,根据 Hash 算法来计算 K-V值 的存储位置,这样可以保证能快速存、取 Map 的 键值对是基于Hash表实现的一个Map结构(k-v键值对)1、jdk1.2提供的,线程不安全的2、初始化的数组长度是16,是2的幂次方3、jdk8之后,如果链表的长度大于8

2020-07-28 22:14:06 96

原创 HashSet add方法原理简单理解尝试

HashSet不能添加重复的元素,当调用add(Object)方法时候,首先会调用Object的hashCode方法判hashCode是否已经存在,如不存在则直接插入元素;如果已存在则调用Object对象的equals方法判断是否返回true,如果为true则说明元素已经存在,如为false则插入元素。HashSet去重的原理:首先判断这个的hashcode值,如果两个值的hashcode不相等,肯定不是同一个值。如果两个值的hashcode相等,则进入第二步判断:调用equals方法判断是否相等,

2020-07-27 21:38:27 523

原创 Vector、ArrayList和LinkedList的异同之处

ArrayList用法类似于数组,且其容量可按需要动态调整。LinkedList表示链表的操作类,它同时实现了List和Queue接口。它的优点在于向集合中插入、删除元素时效率比较高,可以直接对集合的首部和尾部元素进行插入和删除操作,LinkedList提供了专门针对首尾元素的方法。如果涉及到堆栈,队列等操作,应该考虑用List,对于需要快速插入,删除元素,应该使用LinkedList,如果需要快速随机访问元素,应该使用ArrayList。Vector 是矢量队列,它是JDK1.0版本添加的类。 也实

2020-07-27 20:38:11 142

原创 HashSet、TreeSet、LinkedHashSet的关系

HashSet与TreeSet同属于集合Set下,都是基于Set接口的实现类。其中TreeSet是Set的子接口SortedSet的实现类Set接口:Set是系列放在一起的数据,数据不能重复Set接口、Set不能重复。HashSet:元素不是按顺序排列、非同步;HashSet是无序,且不能重复的,因为使用是Hash表实现;HashSet的底层使用HashMap实现;当向HashSet结合中存入一个元素时,HashSet会调用该对象的hashCode()方法来得到该对象的hashCode值,然

2020-07-27 19:25:49 158

原创 ArrayList

ArrayList 类是一个可以动态修改的数组,与普通数组的区别是它没有固定大小的限制,可以添加或删除元素。ArrayList 类位于 java.util 包中,使用前需要引入(import java.util.ArrayList;)ArrayList初始化方式ArrayList<数据类型> 对象名 = new ArrayList<>(长度);在jdk8之前,ArrayList<>(); 相当于ArrayList<>(10) 会有默认长度10在jdk

2020-07-24 23:49:48 464

原创 java异常处理

异常:软件在编译或者运行过程中,因为一些原因(BUG、用户使用不当、代码处理不当),发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行或引起的程序奔溃的现象。异常处理机制能让程序在异常发生时,按照代码的预先设定的异常处理逻辑,针对性地处理异常,可以让程序继续执行并可以按照预定设计给出异常提示,提升代码的健壮性和稳定性,提升代码的容错能力。处理异常为了让后面正常的代码继续运行,提高软件的健壮性和稳定性。异常处理方式:抓捕异常尝试着将有可能存在异常的代码或者代码段进行抓捕,如果触发异常,则处理

2020-07-23 22:36:09 71

原创 final、 finalize

finalfinal是一个修饰符(关键字) 如果一个类被声明为final,意味着它不能再派生新的子类,不能作为父类被继承。因此一个类不能及被声明为abstract,又被声明为final的。声明一个final类:不能作为父类被继承:不能同时被定义为抽象类和final类:final修饰变量时此变量会变为常亮,不可被修改final修饰的方法不能被重写finalizefinalize()是Object中的方法,当垃圾回收器将要回收对象所占内存之前被调用,即当一个对象被虚拟机判定为结束时会先调用

2020-07-21 21:37:30 377

原创 String、StringBuilder、StringBuffer

String、StringBuilder、StringBuffer之间关系String、StringBuilder、StringBuffer在java中都可进行对字符串的操作。String:被final修饰,不可继承修改可以采用直接赋值的方式进行对象实例化,也可以通过构造方法完成。String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且大量浪费有限的内存空间。如在此操作中每次拼接都会新创建一个String对象;从程序开始到结束共创建 “” ;

2020-07-21 20:46:41 108

原创 继承、抽象、接口

修饰符default (默认): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。private : 在同一类内可见。使用对象:变量、方法。 注意:不能修饰类(外部类)public : 对所有类可见。使用对象:类、接口、变量、方法protected : 对同一包内的类和所有子类可见。使用对象:变量、方法。 注意:不能修饰类(外部类)。继承继承就是子类继承父类的特征和行为,使得子类对象具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。通过继承子类可以继承

2020-07-18 22:02:32 141

原创 java面向对象入门

对象对象就是存在的具体实体,具有明确定义的状态和行为,用来描述现实世界中的实体,也是完成特定任务一个封装。其本质是以建立模型体现出来的抽象思维过程和面向对象的方法。对象可定义为一个class(类),其中可以包括对象的属性,方法等;例如定义一个汽车类:其中属性可以为汽车的颜色、速度、轮胎数、重量等,使用成员变量表示;开车,加速,减速,停车等可定义为汽车的方法;定义类修饰符 class 类名{成员变量方法}此类定义中名称为 Vehicles 其中成员变量(属性)有共有的String型的bra

2020-07-18 21:15:58 79

原创 几种简单排序方法

冒泡排序冒泡排序(Bubble Sort):一种较简单的排序算法。它重复遍历过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小或从小到大)错误就把他们交换过来。遍历元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。每一轮遍历后将最大/最小的数移动到数组的一边并固定位置(在之后的遍历中不移动此数)从下面每行的结果可以看出每一轮遍历将最大数移动到数组末尾,下一轮确定此大的数;遍历由两个for循环嵌套完成 ,内层循环遍历并交换数值,每轮需要遍历的数据数量减1,外层循环

2020-07-18 20:44:40 1848

原创 函数入门

函数函数是具有名称为了实现某一特定功能的代码的集合封装代码,以提高代码的复用性。函数是java的最小代码重用单位,是为了重用代码。函数定义函数写在类中函数的定义格式:【修饰符】 返回值类型 函数名([参数列表]) {函数体return 返回值}如果没有返回值 返回值类型处为void函数的调用:调用方法: 函数名(参数)函数的分类:1.按有无返回值分为有返回值和无返回值函数有返回值:【修饰符】 返回值类型 函数名([参数列表]) {函数体return 返回值}

2020-07-18 20:01:36 103

原创 java入门数组

数组Java 语言中提供的数组是用来存储固定大小的同类型元素,可以使用数组存储相同类型的多个变量;数组必须先声明后使用;数组的声明:创建:数组类型 [] 数组名数组类型 数组名 []声明同时定义数组长度:数组类型 [] 数组名 = new 数组类型 [数组长度];数组类型 数组名 [] = new 数组类型 [数组长度];声明同时赋值:数组类型 [] 数组名 = {a1,a2,…,ax};数组类型 数组名 [] = {a1,a2,…,ax};数组的调用:访问元素通常使用下标

2020-07-14 20:46:49 113

原创 常见运算符

常见运算符常见运算符分类:算术运算符(+,-,*,/,%)算术运算符完全符合数学规则;关系(比较)运算符(>,<,>=,<=,==,!=)关系运算符的最终结果是一个boolean值;逻辑运算符(与 ,&& ,&, 或 ,|| ,|,非 ,!)其中断路与或 效率相对于单与或 略高;自加和自减运算符(i++,++i,i–,--i)前加加和后加加,本质上对应运算的变量,肯定要加1;自减也类似;前加加的优先级别特别的高,后加加的优先级别特别的低;...

2020-07-04 17:40:04 134

原创 Java入门 -- 变量和数据类型

变量 变量在程序运行过程中(运行时|runtime),可以发生变化的量。是一块具有名称的内存; 变量的定义方法: 1.先声明后赋值: ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200702184814946.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Nj

2020-07-02 19:27:55 192

原创 Java环境安装和配置

**Java环境安装和配置1.下载进入下载页面:https://www.oracle.com/java/technologies/javase-downloads.html2.点击对应版本JDK.Download进入下载界面并选择对应操作系统3.下载后安装已经安装过此版本的提示:点击下一步:更改都存储路径,不要出现特殊符号和汉字:2.安装完成后点击关闭开始进行环境变量的配置右键计算机(此电脑)->属性高级系统设置:环境变量:创建JAVA_HOME 值为jdk的...

2020-07-01 21:47:48 109

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除