
Java基础
文章平均质量分 83
Java学习笔记整理
-代号9527
逢山开路,遇水搭桥!纸上得来终觉浅,绝知此事要躬行。
展开
-
【Java设计模式】二十五、自定义Spring IoC
根据上面xml的特点,定义类,用于封装bean标签下的property标签的各个属性。property.name即对象的属性名property.ref即引用参考对象property.value即对象属性为基本类型或String时的赋的值//对象的属性名//引用参考对象//对象属性为基本类型或String时的赋的值return ref;一个bean标签可以有多个property子标签,一个property子标签对应一个PropertyValue对象,所以再定义一个。原创 2024-03-17 10:00:00 · 2121 阅读 · 0 评论 -
【Java设计模式】二十四、Spring重要接口回顾
Spring包含约20个模块,1300多个文件。主要架构:Spring面向Bean编程,Bean即受Spring容器管控的对象,而核心容器则是由beans、core、context、express(Spring Expression Language,SpEL)4个模块组成。1)spring-beans 和 spring-core是核心,包含了控制反转IoC和依赖注入DI。核心接口BeanFactory。原创 2024-03-17 09:00:00 · 976 阅读 · 0 评论 -
【Java设计模式】二十三、解释器模式
如果把运算符和数字看作一个个节点,逐个去读取和解析,则可适配所有。即定义一个解释器去解释表达式。解释器模式常用于SQL解析、符号处理引擎。计算一个表达式的值,比如1+2-3+4-7,单纯的定义方法或函数很难适配所有,因为数值和运算符可以有无数种组合。环境角色类,定义一个Map集合,用来存储变量及对应的值。定义抽象表达式类,定义一个解释的方法,聚合环境类对象。将左边表达式和右边表达式的结果相加。定义终结符表达式(变量类)原创 2024-03-16 07:30:00 · 458 阅读 · 0 评论 -
【Java设计模式】二十二、备忘录模式
提供了状态恢复机制来恢复对象数据黑箱模式下,除了发起人,其他对象均不可更改或者访问备份对象的信息简化了发起人角色类,它自己不需要去保存其内部各个状态的备份,而是信息存备忘录对象后,交给管理者对象统一管理很明显,如果保存状态很多,则管理者类存储的备份者对象就很多,会占用大量内存需要保存和恢复中间数据,如游戏中间数据的临时存档需要提供一个可回滚的场景时,如撤销。原创 2024-03-15 07:30:00 · 1152 阅读 · 0 评论 -
【Java设计模式】二十一、访问者模式
优点:扩展性好在不修改对象结构中的元素的情况下,为对象结构中的元素添加新的功能。复用性好通过访问者来定义整个对象结构通用的功能,从而提高复用程度。分离无关行为通过访问者来分离无关的行为,把相关的行为封装在一起,构成一个访问者,这样每一个访问者的功能都比较单一。缺点:对象结构变化很困难在访问者模式中,每增加一个新的元素类,都要在每一个具体访问者类中增加相应的具体操作,这违背了“开闭原则”。违反了依赖倒置原则访问者模式依赖了具体类,而没有依赖抽象类。原创 2024-03-15 07:30:00 · 468 阅读 · 0 评论 -
【Java设计模式】二十、迭代器模式
优点:支持以不同的方式遍历一个容器,如以上的一个具体迭代器是按顺序依次取,可定义个新的迭代器实现类去用(按需写next方法逻辑)引入迭代器,聚合类(容器类)不用再自行提供数据遍历的方法有抽象层的存在,再加个新的迭代器依旧符合开闭需为容器类提供多种遍历方式(多个迭代器的实现类)需为遍历不同结构的容器类提供一个统一的接口当访问一个容器对象的元素,而不能暴露其内部结构细节。原创 2024-03-14 07:15:00 · 429 阅读 · 0 评论 -
【Java设计模式】十九、中介者模式
松散耦合,在中介者对象这里集中控制同事对象的交互。但当同事类太多时,中介者类会复杂而庞大。原创 2024-03-14 07:00:00 · 473 阅读 · 0 评论 -
【Java设计模式】十八、观察者模式
降低了主题和观察者的耦合,没有完全解耦合,但面向抽象。当新增主题时或者观察者,也满足开闭实现了广播机制观察者很多时,集合中排后面的观察者收到消息的耗时较长对象之间存在一对多关系 + 一个对象状态的改变会影响到其他对象。原创 2024-03-13 09:30:32 · 981 阅读 · 0 评论 -
【Java设计模式】十七、状态模式
将状态的转换逻辑与状态对象合成一体,而不再用大块的switch或者if-else当一个对象的行为取决于它的状态,并且它必须在运行时根据状态改变它的行为时,考虑使用状态模式一个操作中含有庞大的分支结构,并且这些分支决定于对象的状态时,考虑使用状态模式。原创 2024-03-13 09:12:16 · 486 阅读 · 0 评论 -
【Java设计模式】十六、责任链模式
三个请求处理者(领导)连成一条线,现在张三来请假,只需找其部分负责人即可,部门负责人看张三请假的天数,自己能批准就批准,不能批准就找他自己的上级(副总经理),以此类推。需求:请假流程控制,一天以下只需小组长同意,1到3天需要部门经理同意,3到7天需要总经理同意。责任链模式,即:为了避免请求发送者和多个请求处理者耦合在一起,让所有请求处理者通过下一对象的引用连成一条链。如此实现,扩展性强很强:如果以后要加个总监审批,那就再定义个具体处理者类,set进责任链即可。定义具体的处理者,继承抽象处理:小组长。原创 2024-03-12 09:04:14 · 1525 阅读 · 0 评论 -
【Java设计模式】十五、命令模式
需要将调用者和请求者解耦,使二者不直接交互(如服务员类调用命令类,命令类里调用接收者结合备忘录模式,支持命令的撤销和恢复操作。原创 2024-03-12 09:03:57 · 460 阅读 · 0 评论 -
【Java设计模式】十四、策略模式
策略之间可自由切换(策略类都实现了同一个接口)好扩展,有新的实现策略时,新加个子实现类就可避免了多重条件选择 if else客户端必须了解所有的策略类,并自行选择(上面案例中的,什么节日用什么策略,是客户端自己set的)会产生很多的策略类一个系统需要动态地选择几种算法中的一种,可将每个实现算法封装到策略类中一个类定义了多种行为,且以多个 If 语句的形式对应使用,可将每个if分支改成一个策略类,代替多重if各种算法彼此独立,且要求对客户隐藏具体算法实现细节。原创 2024-03-11 18:16:53 · 1052 阅读 · 0 评论 -
【Java设计模式】十三、模板方法模式
代码复用性:复用抽象类的通用逻辑方法反向控制整体实现步骤固定,个别步骤易变,将易变的部分抽象出来通过子类来决定父类算法中的某个步骤是否执行,实现子类对父类的反向控制(钩子函数)原创 2024-03-11 18:10:24 · 1264 阅读 · 0 评论 -
【Java设计模式】十二、享元模式
减少内存中相似对象的数量,节约空间将对象分离为内部状态和外部状态,逻辑变复杂了系统中有大量的相似对象。原创 2024-03-07 09:10:03 · 479 阅读 · 0 评论 -
【Java设计模式】十一、组合模式
组合模式为树形结构而生,可以方便的增加树枝节点和叶子节点,而无须对现有代码做任何修改。原创 2024-03-07 09:09:35 · 426 阅读 · 0 评论 -
【Java设计模式】十、外观模式(门面模式)
外观模式(门面模式)提供了一个统一的接口,用来访问子系统中的一群接口定义了一个高层接口,让子系统的使用更加容易举个例子:去医院看病需要询问、挂号、门诊、开药、取药等操作,比较复杂,如果医院对外提供一个接待人员,病人只需把自己的情况告诉接待人员,自己坐等拿药,就会很方便。再比如Java里的mapper、Service、Controller三层模式,Controller就是对外的一个门面。原创 2024-02-27 10:23:22 · 448 阅读 · 0 评论 -
【Java设计模式】九、桥接模式
开发一个跨操作系统的视频播放器,操作系统要支持Windows和Mac,视频格式要支持AVI和RMVB格式。这是两个维度的变化,可用桥接模式。现要创建不同的图形,图形的形状有圆、长方形、正方形,且它们有不同的颜色。两个维度在变,使用类的继承可以实现,也符合开闭原则,但会类爆炸。,用组合代替继承,将两部分连接起来。写视频文件的实现类(具体的实现化角色)定义抽象操作系统类(抽象化角色),将抽象与实现分离,使它们可以。定义视频文件类(实现化角色)原创 2024-03-06 11:22:11 · 777 阅读 · 0 评论 -
【Java设计模式】八、装饰者模式
后续如果需求变动,要加一个新配料:火腿,那就定义一个类去继承Garnish类即可。且任何配料可以自由搭配任何主食(组合不同的装饰者对象),这比排列组合写出n个子类好多了。继承是静态的附加责任,装饰者则是动态的附加责任。有个快餐店,里面的快餐有炒饭FriedRice 和 炒面FriedNoodles,且加配菜后总价不一样,计算麻烦。JDK中BufferedWriter等包装类,用到了装饰者模式,对Writer类进行了增强。总之,用于动态扩展一个类的功能(增强目标对象),而非使用继承。原创 2024-03-06 10:22:59 · 644 阅读 · 0 评论 -
【Java设计模式】七、适配器模式
最后,适配器是对已经开发完的系统的一种改造思路,新设计尽量一次设计好,或者时间充裕就重构。三孔插座上插两孔插头,不能直接插,中间可加个适配器,适配器一头可对接三孔插座,一头可对外提供两孔入口。适配器类之所以总是实现(或者继承)原有的类,是因为其一端要能插进电脑的SD入口,即要保证其是SD入口这一端的子类。适配器模式的实现方式:定义一个适配器类来实现目标接口,同时继承或聚合现有的待适配的类。有电脑只能读取SD卡,现在要读TF卡的信息,中间就得插个适配器。接下来为了让电脑能读TF卡,开始开发适配器类,原创 2024-02-27 10:23:51 · 975 阅读 · 0 评论 -
【Java设计模式】六、代理模式:静态代理、JDK + CGLIB动态代理
代理模式在客户端与目标对象之间起到了一个中介作用 + 保护目标对象代理对象中可以扩展目标对象的功能(上面代售点加服务费、AOP增强)代理模式将客户端和目标对象解耦增加了复杂度。原创 2024-03-05 14:32:39 · 1872 阅读 · 0 评论 -
【Java设计模式】五、建造者模式
摩拜单车和ofo单车。Bike是产品,包含车架,车座等组件;Builder是抽象建造者,MobikeBuilder和OfoBuilder是具体的建造者,Director是指挥者。再有新的单车公司加入,只需实现一个新的建造者类即可,符合开闭原则。但如果创建的产品组成部分差异很大,则不适合用建造者模式,比如要再造个电脑对象。如,主机这个负责对象的构建,分离承诺内存条、主板这些部件,再组装构建。内存条替换一个别的,出来就是一个不同的对象。此时就可链式编程创建这个对象(原创 2024-03-04 20:34:36 · 682 阅读 · 0 评论 -
【Java设计模式】四、原型设计模式
到这儿有个想法:既然主要是为了方便批量创建对象,不用重复set一些属性。那你把一样的属性定义成static不是更好吗?但其实克隆有自己的场景,比如一批一批的对象的一些属性是相同的:全市竞赛,同一学校的三好学生,其属性只有名字不一样,但各个学校来看属性就都不一样,此时你Student类的属性不能定义成static吧。注意,默认的浅克隆下,引用属性指向的对象是同一个,后面set的引用属性的值,自然是会覆盖前面set克隆对象的引用属性值。采用原型设计模式后:实体类实现Cloneable接口。原创 2024-03-04 15:03:09 · 696 阅读 · 0 评论 -
【Java设计模式】三、简单工厂、工厂方法模式、抽象工厂模式
模拟咖啡店点餐。咖啡有多种,抽象类,子类为各种咖啡。咖啡店类聚合咖啡类。类图如下:定义咖啡抽象类:各种咖啡:咖啡屋类,聚合咖啡抽象类:以上代码的缺陷是咖啡类和 + 咖啡屋内耦合太高。下面用工厂模式解耦合。即由一个工厂决定创建哪一种产品类型的实例。 包括:改进上面的咖啡案例,引入工厂类,让咖啡屋不再自己创建咖啡对象,而是直接从工厂获取,类图:到这儿,有个疑惑,咖啡抽象类或子类变时,SimpleCoffeeFacroty类不还得变?这和直接咖啡屋类有啥区别?不都是改一个类?多此一举?其实不然,如果有原创 2024-02-26 15:34:30 · 1531 阅读 · 0 评论 -
【Java设计模式】二、单例模式
没有重写readResolve方法时,会通过反射创建一个新的对象,从而破坏了单例模式。IF 这一行,被挂起,再被唤醒时继续往下执行,就会创建出两个不同的实例对象。通过流将单例对象,序列化到文件中,然后再反序列化读取出来。发现通过反序列化方式创建出来的对象内存地址,和原对象不一样,单例模式被破坏。如此,再有A、B两个线程同时执行到第一个IF,只能有一个成功创建对象,另一个获取到锁后,第二重判断会告诉它已经有对象实例了。静态内部类在被加载时,不会立即实例化,而是在第一次使用时才会被加载并初始化。原创 2024-02-26 19:43:54 · 1260 阅读 · 0 评论 -
【Java设计模式】一、软件设计的七个原则
设计模式即一种解决问题的最佳实践。原创 2024-02-28 09:44:44 · 1301 阅读 · 0 评论 -
【JDBC下篇】PreparedStatement类 && JDBC事务
之前有的网站,当输入上面这种非法密码的时候,会直接锁定这个用户账户。但这样带来的问题是:如果我知道某人的账户名,再输入非法密码,岂不是可以锁别人的账户。被分成了两块,一块放在获取(预编译的)数据库操作对象前,一部分放在了执行SQL前,即setString传值。但实际的业务中,通常都是N条DML语句共同联合才能完成一个业务,因此,必须保证这些DML语句在同一个事务中同时成功或者同时失败。因此,Statement极少用,只有当业务方面要求支持SQL注入,或者要进行SQL拼接的时候,才用Statement。原创 2022-12-13 23:45:13 · 647 阅读 · 0 评论 -
【JDBC上篇】什么是JDBC
既然是一套接口,接口都有调用者和实现者,面向接口调用,面向接口写实现类,都属于面向接口编程。面向接口编程的优势是解耦合,降低程序的耦合度,提高程序的扩展力。数据库的驱动大多以jar包的形式存在,解压后得到很多class文件,这些class文件就是对JDBC接口的实现,驱动由各大数据库厂家提供。getString方法传入列名的时候,传入的是查询结果集的列名。getString方法可以传入列的下标(JDBC中下标从1开始),也可以传入列名,但后者更加健壮。实际开发中,不要把数据库的信息写死在Java程序中。原创 2022-12-12 20:25:33 · 672 阅读 · 0 评论 -
【Java进阶篇】第八章 反射与注解
通过Java中的反射机制,可以操作字节码文件,即读和修改字节码文件.class注释,注解,Annotation注解Annotation是一种引用数据类型,编译后也生成xx.class文件定义的语法格式为:[ 修饰符列表 ] @ interface 注释类型名 {}注解的使用语法是:@注解类型名注解可以出现在类上、属性上、方法上、变量上等,还可以出现在注解类型上,默认情况下,注解可以出现在任意位置//带括号,看着像方法,但这是MyAnnotation的一个属性 String name();原创 2022-12-10 17:13:40 · 543 阅读 · 0 评论 -
【Java进阶篇】第七章 多线程
举个例子:DOS窗口运行java HelloWorld,先启动JVM,JVM是一个进程,JVM启动一个主线程调用main方法,同时再启动一个垃圾回收线程来负责看护、回收垃圾。(也就是说Java程序至少两线程并发,main方法对应的主线程+GC)把进程看作是现实生活中的公司,如京东。线程则可看作是其下的某一个职能部门,负责完成某任务,如开发部门。如启动了10个线程,就会有10个栈空间,每个栈和每个栈之间互不干扰,各自执行各自的,这就是多线程并发。🍁Java中的多线程机制,目的就是为了提高程序的处理效率, 如原创 2022-12-06 22:59:28 · 1009 阅读 · 0 评论 -
【Java进阶篇】第六章 IO流
以内存为参照,读进内存为输入,反之为输出。对于经常变动的数据,可以单独写到一个文件中(即配置文件),使用程序动态读取。后续修改只需改配置文件,不用改代码,不用重新编译。==当配置文件的内容格式是key=value的时候,称为属性配置文件,文件名常以.properties结尾。=也可用:且=左右两边最好别加空格。Properies是专门存放属性配置文件内容的一个类。原创 2022-11-29 23:32:55 · 617 阅读 · 0 评论 -
【Java进阶篇】第五章 集合(下)--Map集合
Map和Collection没有继承关系Map集合以key和value的方式存储数据,即键值对,key和value都是引用数据类型,key和value都是存储对象的内存地址。key起主导地位,value是key的一个附属品。实现Comparable接口,即重写其CompareTo方法,在CompareTo方法中编写比较的逻辑或者说比较的规则int age;} //调用则是this.compareTo(p) public int compareTo(Person p) {return 0;原创 2022-11-24 23:36:37 · 606 阅读 · 0 评论 -
【Java进阶篇】第五章 集合(上)--Collection集合
集合实际可理解成是一个容器,可以用来容纳其他类型的数据,数组其实就是一个集合。集合做为一个载体,在实际开发中,将从数据库中查询到的多条数据封装成多个对象,并将他们通过集合传到前端,然后遍历集合,展现数据。集合不能直接存储基本数据类型,也不能直接存储Java兑现,集合当中存储的都是Java对象的内存地址(引用)。//这里的中的T是标识符,随便写,但和常用些 public class GenericTest < T > {原创 2022-11-22 21:59:26 · 856 阅读 · 0 评论 -
【Java进阶篇】第四章 异常处理
😉 catch后,写确切的类型、写其父类型、父父类型也可以try {//这里写的是FileNotFoundException的父类IO Exception } catch(IO Exception e) {System . out . println("文件不存在");}😉 catch可以写多个,当这些异常父类一样时,直接写一个他们的父类也行,但建议精确catch,方便调试try {. . . //出现异常时,从上往下匹配catch } catch(xx e) {. . . }原创 2022-11-20 17:27:08 · 799 阅读 · 0 评论 -
【Java进阶篇】第三章 常用类
String表示字符串类型,属于引用数据类型在Java中,随便使用双引号括起来的都是String对象,如"abc"、"Hello world!"就是两个String对象Java中,字符串是不可变的JDK中,双引号括起来的字符串,如"abc"都是直接存储在方法区的字符串常量池中(因为字符串在实际开发中使用频繁,为了执行效率)enum 枚举类型名 {//引用数据类型 枚举值 1 ,枚举值 2 ,枚举值 3 //常量 }原创 2022-11-18 23:35:54 · 901 阅读 · 0 评论 -
【Java进阶篇】第二章 Java数组(下篇) 二维数组
二维数组是一个特殊的一维数组,特殊在这个一维数组当中的每一个元素都是一维数组。用index属性模拟栈帧指向,和数组的下标做对比。------for遍历---->------for遍历---->原创 2022-11-13 23:28:18 · 251 阅读 · 0 评论 -
【Java进阶篇】第二章 Java数组(上篇) 一维数组
/定义 int [ ] array1;静态初始化一维数组: int [ ] array = {动态初始化一维数组: int [ ] array = new int [ 5 ];//5表示元素个数是5,元素值默认是0 String [ ] names = new String [ 6 ];//6个元素,默认值null。原创 2022-11-09 23:26:13 · 518 阅读 · 0 评论 -
【Java进阶篇】第一章 面向对象(下篇)
Java中,基本数据类型的比较用==,引用数据类型用equals来判断原创 2022-11-09 21:01:33 · 364 阅读 · 0 评论 -
【Java进阶篇】第一章 面向对象(上篇)
⭐⭐⭐⭐⭐⭐🍁🍁🍁🍁🍁🍁🍁🍁🍁🍁🍁🍁🍁🍁在以上的基础上,接着开始整理Java进阶篇后续章节的笔记。原创 2022-11-03 08:15:02 · 242 阅读 · 0 评论 -
【Java基础篇】第十四章 super
😉。原创 2022-11-01 08:13:29 · 411 阅读 · 0 评论 -
【Java基础篇】第十三章 方法的覆盖和多态
软件开发的原则之一就是OCP原则,即开闭原则,对扩展开放,对修改关闭,直白的说就是软件扩展的过程中,对之前的东西修改的越少越好。子类继承父类后,当继承过来的方法无法满足当前子类的业务需求时,子类有权利对这个方法进行重新编写,有必要进行“方法的覆盖”软件在扩展新需求的过程中,修改的越少越好,修改的越多,系统的稳定性就越差,未知风险就越多,还可能得重新测试。当子类对从父类继承过来的方法进行“方法覆盖”以后,子类对象调用该方法的时候,一定是执行覆盖之后的方法。方法的功能相似的话,建议将方法名定义成一样的。原创 2022-10-27 23:32:51 · 921 阅读 · 5 评论