自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 111广泛广泛豆腐干的

【代码】111广泛广泛豆腐干的。

2024-03-06 14:01:36 357

原创 第 3 章 ReentrantLock锁的用法及基本原理(随笔)

1. 锁的一些基本分类公平锁:多个线程申请锁时是相对公平的,在申请锁时如果有其它线程已经占用了锁,则进行排队等待处理(排队先进来的先获取到锁,能够避免线程饥饿)。非公平锁:多个线程申请锁时相对不公平,与公平锁相同,都会存在排队的情况,但对于一个新线程需要获取锁时不是先排队等待,而是先尝试获取锁,不成功时再进入队列排队等待(谁抢到就是谁的,抢不到就排队)。悲观锁:每次更新和读取都加锁,对于读多写少这种场景不利,适用于于写多读少的场景。

2023-12-04 22:44:27 1396

原创 第 2 章 多线程的并发问题(随笔)

由此可见,调用lock方法给代码加锁可以实现比synchronized更加细粒度的加锁操作,减少了线程开销,其中的lock()方法属于阻塞等待获取锁,当一个线程调用ReentrantLock对象中的lock()方法获取锁成功之后,该线程不可被手动中断,其他线程需要阻塞等待,如果想要创建可中断的锁,则需调用lockInterruptibly()方法。1. 如果修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象;如何解决这个问题呢?

2023-12-04 22:42:27 199 2

原创 第 24 章 Java的静态代理模式和动态代理模式(随笔)

但是静态代理也有很明显的缺点,静态代理在编译时就已经确定了接口,委托类(目标类),代理类等,如果代理接口内的方法发生改变,所有接口相关的代理类和委托类的方法都要改变,代码的维护成本比较高,而且在实际的业务逻辑中,业务类的接口通常是不一样的,委托类也差异较大,可能很简单的需求因此需要写很多个不同的代理类和不同的接口,这样很容易造成代码和架构冗余。如何实现JDK动态代理呢?这样做的优点显而易见,同一个代理类可以代理多个相似属性的委托类来处理业务请求,同时又兼有代理类的3大优点(见上文列出的代理模式优点)。

2023-11-17 12:51:22 86

原创 第 1 章 Java多线程基础(随笔)

而调用start方法会调用start0方法,start0底层C++代码逻辑也会调用run方法同时启动线程,因此,多线程场景通常调用start()方法来启动线程,这样子线程和主线程由CPU调度并行交替执行。实现Runnable 接口启动线程逻辑:实现Runnable 接口,重写run()方法,执行线程需要传入Runnable 接口实现类,然后调用start()方法启动线程。1. 创建 Callable 接口的实现类,并实现 call() 方法,该 call() 方法将作为线程执行体,并且有返回值。

2023-11-10 12:10:58 59

原创 第 23 章 Java泛型(随笔)

和泛型方法一样,泛型类的类型参数声明部分也包含一个或多个类型参数,参数间用逗号隔开。一个泛型参数,也被称为一个类型变量,是用于指定一个泛型类型名称的标识符。因为他们接受一个或多个参数,这些类被称为参数化的类或参数化的类型。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数,这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。要声明一个有界的类型参数,首先列出类型参数的名称,后跟extends关键字,最后紧跟它的上界。泛型类型用于类的定义中,被称为泛型类。

2023-11-04 11:32:25 57

原创 第 22 章 输入输出流(I/O流)(随笔)

输入与输出简述输入流(Inout Stream)与输出流(Output Stream)合称为数据流(Data Stream)输入输出流的来源和接收者可以是文件、内存、网络连接等写入数据的原理:Java程序→JVM→OS→OS调用写入数据的方法→写入成功→手动释放OS资源读取数据的原理:Java程序→JVM→OS→OS调用读取数据的方法→读取成功→手动释放OS资源▊ Java流顶层父类它们都是抽象类,是所有相关类的超类。定义了输入流的一些共性方法:read(), close()

2023-11-01 22:34:23 55

原创 第 21 章 Java常用的集合类(随笔)

Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射。Collection 接口又有 3 种子类型,List、Set 和 Queue,再下面是一些抽象类,最后是具体实现类,常用的有ArrayListLinkedListHashSetHashMap、LinkedHashMap 等等。集合框架是一个用来代表和操纵集合的统一架构。是代表集合的抽象数据类型。例如 Collection、List、Set、Map 等。

2023-09-16 10:54:58 82

原创 第 20 章 异常处理(随笔)

1.异常介绍Java所有的异常类是从 java.lang.Exception 类继承的子类。异常类的继承关系如下图:Exception 类是 Throwable 类的子类,除了Exception类外,Throwable还有一个子类Error。Java 程序通常不捕获错误,错误一般发生在严重故障时,它们在Java程序处理的范畴之外。Error 用来指示运行时环境发生的错误,异常和错误的区别是:异常能被程序本身可以处理,错误是无法处理。例如,JVM 内存溢出、线程死锁、虚拟机错误。

2023-06-24 17:13:50 89 1

原创 第 19 章 内部类(随笔)

由于内部类权限为private,所以除了它的外部类OuterClass可以访问该内部类其它类都不能访问,但其它类可以访问doit()方法,同时由于该方法返回一个外部接口类型,该接口可以作为外部使用的接口,接口的f()方法可供外部调用,但具体实现过程是在内部类中,这种对外隐藏实现过程增加了代码的可维护性和安全性。内部类可以随意使用外部类的成员方法和成员变量,包括修饰为private的方法和变量,但外部类不能直接使用内部类的成员变量和方法。如果在一个类中再定义一个类,再定义的类称为内部类。使用内部类实现接口。

2023-06-13 23:58:28 69

原创 第 18 章 final关键字(随笔)

具体来说 final string 在编译的时候,值已经确定,a可替换成"world",所以就是 "world"+"2",这个形式的初始化会被编译器优化成"world"存在字符串常量区,由于str已经被初始化为"world",这个字符串已经存在于常量区,所以直接返回其引用,str==a。final 变量在声明时没有初始化,那么它必须在声明它的类的静态初始化块中初始化。b的值在编译时不确定,不能编译优化,所以d=b+"2",jvm会在堆中生成一个值为"world2"的对象,返回引用给d,所以str不等于d。

2023-06-11 21:41:51 76

原创 第 17 章 接口(随笔)

一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。另外,在 Java 中,接口类型可用来声明一个变量,他们可以成为一个空指针,或是被绑定在一个以此接口实现的对象。一个类通过继承接口的方式,从而来继承接口的抽象方法。接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法,接口则包含类要实现的方法。所有的变量必须给出初始值,且绝对不会被修改,因为隐藏的修饰符为 public static final。Java 接口中,使用变量的时候,变量必须被赋值。

2023-06-08 23:10:37 49

原创 第 16 章 抽象类(随笔)

2)当父类知道子类一定要完成某些行为,但是每个子类该行为的实现又不同,于是该父类就把该行为定义成抽象方法的形式,具体实现交给子类去完成。在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果。注意:一个类如果继承了抽象类,必须重写抽象类中的所有方法,或者同样定义为抽象类,否则会报错。抽象类中的抽象方法只是声明,不包含方法体,就是不给出方法的具体实现也就是方法的具体功能。抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类。

2023-06-07 22:54:31 45

原创 第 15 章 多态(随笔)

父类的属性变量(例如变量 int a)可以被继承,同时在子类中也会同时继承该变量(super.int a,继承的变量),子类中也可以再次声明一个同名(可以同类型)的变量(double a,自己声明的同名变量),两者可以同时存在,在输出时候根据对象的引用名输出。注意:当子类对象调用重写的方法时,调用的是子类的方法,而不是父类中被重写的方法。当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;可以简单的理解为一种事物的多种形态,多态是面向对象编程的一个重要特性,它指的是一个。

2023-06-06 12:25:58 46

原创 第 14 章 重载与重写(随笔)

方法的重写(Overriding)和重载(Overloading)是java多态性的不同表现,重写是父类与子类之间多态性的一种表现,重载可以理解成多态的具体表现形式。(1)方法重载是一个类中定义了多个方法名相同,而他们的参数的数量不同或数量相同而类型和次序不同,则称为方法的重载(Overloading)。(2)方法重写是在子类存在方法与父类的方法的名字相同,而且参数的个数与类型一样,返回值也一样的方法,就称为重写(Overriding)。

2023-06-04 22:48:54 64

原创 第 13 章 类的继承(随笔)

继承并不只是扩展父类的功能,还可以重写父类的成员方法,重写就是在子类中保留父类成员方法的名称,重写成员方法的实现内容,更改成员方法的存储权限。在Java中,Object类是所有类的父类。其他类均继承于Object类,由于所有类都是Object类的子类,所以在定义类时省略了extends Object关键字,正因为如此,任何类都可以重写Object类中的方法。继承的基本思想是基于某个父类的扩展,制定一个新的子类,子类可以继承父类的属性和方法,也可以增加原来父类不具备的属性和方法,或者重写父类中的某些方法。

2023-06-03 16:21:23 68

原创 第 12 章 类的对象(随笔)

对象的属性和行为在类中是通过类成员变量和成员方法的形式来表示的,所以当对象被实例化之后,也获得了相应的属性和行为。str也是一个对象,虽然代码中没使用new关键字实例化,但Java虚拟机再创建字符串的同时,也创建了字符串的匿名对象给str引用。下例的book是Book类的一个对象,严格来说book应该是Book类对象的一个引用,真正的对象实体是new Book()。由以上代码可以看出,两个对象的产生是相互独立的,改变t2的i值,并不会影响t1的i值。对象都是由类抽象出来的,对象可以操作类的属性和方法。

2023-05-17 22:31:28 74

原创 第 11 章 类的静态变量和方法(随笔)

在Java代码中,静态代码块总是会在非静态代码块之前运行,先运行静态代码块,然后再运行非静态代码块,然后再运行构造方法和成员方法,这个顺序也是Java代码区域运行的顺序。通常情况下如果想要使用类中的成员方法,需要先将这个类实例化,有些时候我们不想或者无法创建类的对象时,还要调用类中的方法才能够完成业务逻辑,此时我们就可以使用静态方法。注意:同一个类的不同实例对象,共用一个静态变量时,如果一个对象将其更改,另一个对象的静态变量也会更改(静态变量在内存中共享)。//类中定义静态常量。//类中定义静态变量。

2023-05-14 08:07:05 88

原创 第 10 章 类的定义及使用(随笔)

当子类对象调用重写的方法时,会执行子类的实现,而不是父类的实现。构造方法是一个与类同名的方法,对象的创建就是通过构造方法完成的,每当类实例化一个对象时,类都会自动调用构造方法。子类继承了父类的特点,同时子类又有自己的特点即是多态,多态指的是一个类的实例(对象)可以表现出多种形态。继承:当处理一个问题时,可以将一些有用的类保留下来,这些类通常有相同的属性甚至相同的方法,当遇到同样的问题时可以拿来复用。this表示类本身的对象。对象:表示任意存在的事物,对象是事物存在的实体,如书桌,电脑等(世间万物皆对象)。

2023-05-09 17:09:44 532

原创 第9章 数组(随笔)

数组是一组相同数据类型元素的集合。在Java中数组属于引用类型,即数组是一个对象。

2023-04-12 22:53:05 55

原创 第8章 字符串常量和变量(随笔)

而StringBuffer及StringBuilder与String类不同,每次操作改变都是对自身对象进行操作,不会生成新的对象,其所占空间会随着内容的增加而自动扩充,在做大量的修改操作时,不会因为生成大量匿名对象而影响系统性能。String只能赋值一次,每一次改变内容都会重新在堆中创建新的对象,原有的对象会引用新的对象,而每一次在内存中创建新的对象会对系统性能产生影响,降低JVM的效率。创建一个新的StringBuffer对象必须使用new方法,不能像String对象一样直接引用字符串常量。

2023-04-10 00:04:22 158

原创 第7章 字符串String类(随笔)

char类型只能表示单个字符,不能表示由多个字符连接而成的字符串。可以通过java.lang包中的String类来创建字符串。String str;//相当于String str = null;

2023-03-25 15:22:30 131

原创 第6章 循环控制(随笔)

continue也只作用于内层循环,如果想要控制外层循环也可以使用标签,如图所示。控制循环跳转关键字:break和continue。continue使用场景:用于执行下一次循环。注意:switch中不需要使用continue。当有循环嵌套时,break只会跳出最内层循环。Java标签功能,可让break跳出外层循环。代码:continue通过标签作用于外层循环。代码:continue作用于内层循环。break使用场景:用于中断循环。

2023-03-21 22:00:52 63

原创 第5章 for循环语句(随笔)

foreach语句是for语句的特殊简化版本,不能完全取代for语句,foreach并不是一个关键字。

2023-03-21 20:48:56 51

原创 第4章 数据类型转换(随笔)

低精度数据放入高精度类型中系统可自动转换,高精度的数据放入低精度类型会有数据丢失。高精度类型转换为低精度类型,在高精度变量赋值给低精度变量时使用。原则:不要将高级类型转换为低级类型,即“勿以小杯盛大物”自动转换,程序员无须进行任何操作。显式类型转换(强制转换)强转可能导致以下问题。

2023-03-20 22:28:59 65

原创 第3章 运算符(随笔)

使用逻辑运算符&会判断两个表达式,而逻辑运算符&&则是针对Boolean类型的类进行判断,当第一个表达式为false时则不会判断第二个表达式,直接输出结果从而节省计算机判断的次数。从左端表达式就能推断整个表达式的值称为短路,&&属于短路运算符,&属于非短路运算符。注意:无符号右移不适合byte及short类型,byte及short属于低精度类型,做无符号右移会产生溢出,因此不适合做无符号右移操作。无符号右移:高位补0,低位溢出。正数右移:高位补0,低位溢出。负数右移:高位补1,低位溢出。

2023-03-20 21:27:43 94 1

原创 第2章 变量与常量(随笔)

注意:static变量的有效范围可以跨类,可达整个应用程序之内。static变量除了能在该类中存取,其它类也可通过“类名.静态变量”的方式直接使用。Java标识符以字母、下划线(_)、美元符号($)和数字组成,且不以数字开头,标识符不能是Java保留的关键字。局部变量在类的方法中定义,只在当前代码块中有效。当该方法调用结束,局部变量占用的内存空间释放,局部变量也将销毁。类中定义变量称为成员变量,有效范围为整个类。成员变量又可分为静态变量和实例变量。Java中的标识符和关键字区分大小写。

2023-03-20 20:06:23 57

原创 第1章 JAVA常用类型(简单易懂)

浮点类型系统默认为double类型,double类型计算时可能不精准。对于判0,使用最小值对比法,数学认为一个值的绝对值小于1e-6即为0。1)long类型需要在数字后面加L或l,表示该数值为长整型。2)float类型需要在数字后面加f,表示该数值为浮点整型。3)char类型在定义字符型变量时需要加单引号。-2的32次方~2的32次方-1。-2的64次方~2的64次方-1。-2的32次方~2的32次方-1。-2的64次方~2的64次方-1。例如:char a = 'a';整型类型系统默认为int类型。

2023-03-19 22:14:57 48

空空如也

空空如也

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

TA关注的人

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