- 博客(24)
- 收藏
- 关注
原创 枚举的应用
枚举是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关注的人
RSS订阅