自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 新增表格代码

2025-12-10 09:59:04 81

原创 枚举的应用

枚举是jdk1.5提供的一个特性枚举是一个特殊的类,这个类的对象的数量是有限的。在定义枚举类的同时就已经确定了类对象及类对象的数量。枚举使用enum关键字定义在枚举类中的第一行,就需要提供枚举类的对象(名字)多个对象名之间使用逗号隔开。最后一个对象可以使用分号,也可以不用。强烈建议使用分号结束每一个对象都相当于public static final A a;(编码规范:常量的名字都大写)枚举类中也可以有属性,方法和构造方法,其中属性和方法与普通类没有任何区别。构造方法可以是无参,也可以是有参。

2024-10-20 09:00:00 271

原创 注解的使用

反射中常用的对象(Class,Field , Method , Constructor)都提供了获得注解对象的方法。以前解决方案是定义一个新注解,新注解中有一个数组属性,可以包含多个所需要注解。普通注解,在编程中经常用来作为配置的注解,包括jdk自带的注解和自定义注解。指定当前注解重复出现的时候,会自动的将重复的注解组成指定的那个@AS注解。如果注解中有属性,可以在使用注解时,类似于传参的方式为属性赋值。根据Target元注解的指定,可以在对应的类的内容上使用注解。元注解,用来说明注解的注解。

2024-10-07 17:00:20 3230

原创 反射及其应用---->2

目录1.使用类对象1.1创建对象1.2使用对象属性1.3使用方法2.反射操作数组3.反射获得泛型4.类加载器4.1双亲委派机制4.2自定义加载器1.使用类对象 通过反射使用类对象,主要体现3个部分 创建对象,调用方法,调用属性(存值,取值) 1.1创建对象利用反射创建对象有两种方式 通过构造器创建对象(推荐) 通过Class直接创建对象(只支持利用无参构造器创建对象) Object o = c.newInstanc

2024-09-29 09:27:27 1518

原创 反射及其应用---->1

在JVM加载类信息时,会经过一系列的处理,最终将类信息存在方法区,并且为之生成一个Class对象,作用方法区类信息的访问入口。类的普通方法信息(修饰符,返回类型,方法名,参数列表,异常声明,注意:没有方法体)Class对象是反射应用的基石,必须要先获得Class对象,才能完成后续的反射操作。类的构造方法信息 (修饰符,方法名,参数列表,异常声明,注意:没有方法体)类的基本信息(类名,修饰符,实现接口,继承的父类,所属的包,使用的注解)如果不同的使用者,有不同的类操作需求,就会应用到反射了。

2024-09-29 09:14:36 1116

原创 网络编程的应用

我们在生活中使用的绝大多数的程序(应用,软件,app),都可以基于网络,与其他主机的程序进行数据交互,又不同的主机程序完成不同的业务功能。之前编写的程序都是单机程序,所有的业务功能实现及数据存储都在一个主机上完成,我们称为单机程序。IPV4 : 32bit,平均分成4分,来表示ip , 每一份8bit , 0~255。随着程序启动,系统会自动的为程序的物理端口,分配一个数字标识,称为逻辑端口。如果一个程序的逻辑端口号,与另一个程序的逻辑端口号相同,我们称为端口号冲突。适合广播,音频信息的传播。

2024-09-18 18:48:41 1632

原创 线程池的应用-->2

处于stop状态的线程池,完成了所有任务处理工作,自动调用terminated()当需要自定义线程的名字,线程的优先级,精灵线程状态时,需要自定义线程工厂。处于整理状态的线程池,执行完terminated方法,自动进入终结状态。状态效果:线程池不再接收新任务,清除队列中的任务,中断正在执行的任务。状态效果:线程池不再接收新任务,但会执行完先有的任务及队列中的任务。状态效果:运行时的线程池,可以接收任务,处理任务,缓存任务。实现,当前线程池能力不足时,交给另一个线程池来执行。

2024-09-12 18:23:21 945

原创 线程池的应用-->1

1.线程的执行机制1.线程的执行机制线程分为用户线程 和 内核线程内核线程就是系统级别的线程,与cpu逻辑处理器数量对应的用户线程就是使用java代码创建的Thread对象用户线程必须与内核线程关联(映射),才能执行任务当用户线程多于内核线程时,内核线程就需要不停的上下文切换,使得多个用户线程都能得以执行上下文会影响性能,消耗资源。大量的创建用户线程,消耗用户线程,也会影响性能,消耗资源。所以我们希望,创建合适数量的线程,不要频繁的创建新线程和销毁线程,希望创建的线程可以反复利用。

2024-09-09 18:15:03 2439

原创 多线程的使用-->5:并发编程的特性

并发编程是一种程序设计概念或设计目标,在多线程开发环境中,同一系列的程序设计与机制的使用,确保多线程开发环境是稳定的,快速的,性能优秀的。jvm在运行过程中,会产生很多的数据(对象,属性,变量等),这些数据都会存储在jvm内存中随着作用及特点不同,会存储在不同的区域。我们就会尽可能的解决上述问题,使得我们的程序具有原子性,可见性,有序性。在多线程开发时,如果程序设计不是特别的完美,有可能会出现原子性问题,可见性问题,有序性问题。加锁 ,每次加锁前,都会从主内存备份数据,每次释放锁时,都会向主内存更新数据。

2024-09-05 19:16:19 1088

原创 多线程的使用-->4

synchronized锁的形式单一, lock锁的形式多样化(可重入锁,排他锁,共享锁,读写锁,公平锁,非公平锁)早先版本(1.6-) , synchronized属于重量级锁,因为他直接使用系统级别的互斥锁。排它锁又称为 互斥锁,也称为 独享锁,当一个线程获得该锁, 其他线程无法获得锁,需要等待。synchronized通过触发的是系统级别的锁机制, lock是API级别的锁机制。synchronized自动获得锁,自动释放锁。lock锁在整个锁应用过程中,有一部分是在用户态完成的,少量在内核态完成。

2024-09-03 09:00:00 2536

原创 多线程的使用-->3

在线程同步过程中,因为多线程争抢锁资源,所以有些线程会执行,有些线程会等待。如果线程A和线程B分别需要 X和Y两个锁资源恰好A获得了X资源,准备争抢Y , 而B获得了Y资源,准备争抢X,此时A和B就进入了一中死锁状态。如何解决死锁问题?①从业务逻辑层面解决让它们随机抢资源 让它们抢资源时间不同②从技术层面给它们添加一把锁 可以使用lock锁 trylock(5)

2024-09-02 18:24:12 1449

原创 多线程的使用-->2

在操作数据时,如果发现状态发生了变化,基于新状态重新操作 ​ JDK针对于数字计算,提供了原子类,底层使用的是CAS + 自旋机制。是,在set设置新值之前,先用原始值与当前变量中的值做比较,相等说明这个过程中没有其他线程操作变量,也就相当于当前线程占有变量。:在比较时原始值与当前变量中的值相等,不能说明这个过程中变量没有被其他线程操作,因为有可能另一个线程将变量中的值,从A改成了B又改回成了A。如结发生了变化,说明这个过程中被其他线程捷足先登了,其他的线程获得锁,当前线程等待。

2024-08-27 19:46:05 1162

原创 多线程的使用-->1

如果主线程执行完毕,但用户线程没有执行完毕,主线程会等待用户线程执行完后在关闭程序。如果(手动)主动的调用run方法,那不属于线程操作,只属于简单的面向对象操作。当线程对象执行并能够处理代码指令时,也就说明线程对象获得了CPU(操作系统)可以根据设计需求,由主线程产生更多的子线程,共同完成程序的执行过程。main方法是由主线程自动调用的, run方法就有子线程自动调用。这里我们所谓的启动线程,不是执行线程,是让线程开始争抢cpu。线程抢到cpu会执行,执行一会就回释放cpu,再重新争抢。

2024-08-26 09:00:00 694

原创 IO流的分类及使用2

jdk在反序列化对象时(读对象,组装对象),会将读到的对象的序列化号,和要组装的对象的序列化号做对比,相同才能完成序列化, 不相投,会报错。如果当时写对象时,和现在读对象时, 对象结构发生了变化,默认的序列化号就会发生变化。在序列化和反序列化对象时,jvm底层要求对象所属的类是支持序列化的。如果文件中还没有写过对象(文件是空的),此时随着对象流的创建就会报错。jdk在序列化对象时(写对象,拆对象),会为对象生成一个序列化号。序列化:使用对象流写对象,底层将对象按照某种格式拆成一堆字节。

2024-08-24 14:21:43 1088

原创 方法的应用

有些情况下,方法功能执行完毕后不需要提供返回数据,但依然要有返回类型 这个类型是固定的,void。方法参数列表中的变量,只能在方法被执行时完成初始化赋值,并使用方法调用语法完成赋值。方法中定义的变量,可以在定义的同时就初始化,并且使用=完成初始化赋值。逻辑层面理解: 方法表示一个功能,一个行为, 一个操作,一个动作。:除了初始化的时机与方法中变量不同,其他的与方法中的变量都相同。本质就是变量的定义,用来存储方法执行时,使用者提供的外部数据。:Java中本身没有全局变量的概念,目前可以这么错误的理解。

2024-08-21 19:46:27 967

原创 面向对象应用及this关键字

对象内部的方法中,可以根据this变量中存储的自己这个对象的地址,调用自己这个对象的属性和方法。对象内部的方法中,调用对象内部的其他方法和属性时,可以不使用this。对象外部,主方法可以根据变量中存储的这个对象地址,调用对象的属性和方法。2.在jvm运行的过程中,对象内部的方法执行时,都会自动的使用this。类与对象的关系:类是对象的抽象(概念,模板) 对象是类的具体实例。是一堆对象的抽象概念。所以使用对象,其实就是使用对象中的属性和方法。成员变量就是类对象中的变量,对于类对象中的所有方法是共享的。

2024-08-20 19:16:57 1018

原创 IO流的分类及使用1

需要使用flush或close方法,将过程流中处理后的内容,推入节点流,从而写入文件。写数据时,先将数据写入缓冲区,再将缓冲区中的数据一次性写如文件,理论上速度更快。读取数据时,会将文件中的输入读入缓冲区,再冲缓冲区读取数据,理论上性能更好。注意3:对于缓冲输出流而言,当缓冲的数据超过缓冲区时,会自动推入节点流。本质上,与文件读写操作的就是文件字节流,文件字符流的本质是字符转换流。如果只是输出中文本身的化,不需要是字符流,直接用字节流就可以了。写入的数据超出缓冲区的范围,不会缓冲,直接写入节点流。

2024-08-15 18:34:06 310

原创 File的创建及应用

File对象中真正存储的是文件(文件夹)的抽象路径。File对象用来表示一个系统中的文件或文件夹。File对象与文件(文件夹)不是一一对应关系。2.File的常用方法。

2024-08-15 18:15:05 237

原创 基本数据类型的转换及运算符

所谓的基本类型转换,就是将a类型空间中的数据,移动到b类型空间中,基本数据类型有8种,但能够转换的只有7种, boolean不能参与转换。,如果有不同类型的数据进行运算,会自动转换成高类型,再运算。:条件运算最终会从两个结果中返回其中的一个结果,具体返回哪一个,需要有一个条件,这个条件是一个boolean结果。对于byte,short,int,long这些整形而言,其数字转换成的二进制,按位存储在对应的bit空间中。:将数据从小空间,移动到大空间,数据没有任何变化, 不需要任何额外的编码。

2024-08-10 19:48:10 444

原创 集合及其应用

增强for循环的本质就是使用Iterator迭代器,所有实现了Iterable接口的类都可以使用增强for循环。常用的实现类:HashMap , TreeMap , Hashtable。遍历不是map的强项。有多种集合,底层使用不同的存储结构存储元素,适合不同的存储场景。存储元素的特点是 键值存储, 一个元素由2部分组成。存储元素的特点是 无序 不可重复的(唯一的)存储元素的特点是 无序(存取顺序) 可重复。键的存储特点是 无序 不可重复的。存储元素的特点是 有序 可重复。值的存储特点是 无序 可重复的。

2024-08-08 15:11:28 324

原创 包装类及其应用

1.包装类:8种基本类型对java面向对象的特性有所破坏,jdk就提供了8种基本类型所对应的类的表示,称为:包装类(类属性使用包装类定义,方法中的局部变量使用基本类型定义 )2.3.创建包装类:除Character以外,其它7种包装类,提供了至少2种构造方法4.装箱以及拆箱①.将基本类型变成对应的包装类对象的过程,称为装箱②.从包装类对象中取出对应基本类型的过程,称为拆箱装箱和拆箱又分为两个发展阶段(1).手动装箱 和 手动拆箱(2).自动装箱 和 自动拆箱。

2024-08-03 21:20:48 534

原创 API及其正则表达式应用

String不可变特性:String底层使用一个char[]存储字符串内容,同时这个字符数组是用final修饰的,final修饰的变量不能被改变(常量),因为final修饰,所以这个地址不能变,数组一旦创建长度不能变,所以String长度不能变。使用双引号包含的字符串,会优先在常量区中找,存在就返回找到的字符串对象,不存在会创建新对象。StringBuilder是一个新版本的可变字符串,非线程同步,安全性较低,性能较高。StringBuffer是一个早期版本的可变字符串,线程同步,安全性高,性能较低。

2024-07-29 20:26:47 595

原创 异常及应用

所有Exception父类的异常,属于Exception异常(问题不太严重可以在程序运行时给与解决方案 ):用try—catch处理(try捕捉异常,catch处理异常),如有多种异常,可以多几个catch,()一般异常的名字就体现了错误的情况(通过有参构造方法,为异常提供更为详细的描述信息 ): 所有继承Error父类的异常,属于Error异常(问题严重,不好解决)使用异常时要具体分析异常的根本原因,更要注意继承关系,根据具体情况具体分析。3.自定义异常:自定义异常类 , 继承异常相关的父类(

2024-07-25 20:00:00 230

原创 数据结构(数据储存结构)以及克隆

数据连续的存放 , 一个挨一个的存放,数据删除时,要依然保证连续性, 需要数据移动,插入数据时,也需要数据移动,每一个数据有存放的序号(下标),可以根据下标快速找到对应的元素。:高阶版的链式结构,会按照一定的大小规则摆放数据,存放的数据与第一个节点比较,小就准备放左边,大就准备放右边,继续跟左边或右边比较。在克隆B的时候,新的B对象中,a属性 地址是一个新的A对象的地址,也就是说,不仅仅将B对象做了克隆,还将B对象包含的A对象也做了克隆,深克隆需要手动实现。:最终的存储结构是有序的。

2024-07-21 20:55:20 213 2

空空如也

空空如也

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

TA关注的人

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