- 博客(43)
- 收藏
- 关注
原创 面向对象三大特征 与 接口和抽象类有什么共同点和区别?
封装是指把一个对象的状态信息(也就是属性)隐藏在对象内部,不允许外部对象直接访问对象的内部信息。但是可以提供一些可以被外界访问的方法来操作属性。就好像我们看不到挂在墙上的空调的内部的零件信息(也就是属性),但是可以通过遥控器(方法)来控制空调。如果属性不想被外界访问,我们大可不必提供方法给外界访问。但是如果一个类没有提供给外界访问的方法,那么这个类也没有什么意义了。就好像如果没有空调遥控器,那么我们就无法操控空凋制冷,空调本身就没有意义了(当然现在还有很多其他方法 ,这里只是为了举例子)。
2024-10-31 19:02:12
685
原创 对象的相等和引用相等的区别 与 如果一个类没有声明构造方法,该程序能正确执行吗? 和 构造方法有哪些特点?是否可被 override?
这里举一个例子:输出结果:从上面的代码输出结果可以看出:构造方法是一种特殊的方法,主要作用是完成对象的初始化工作。如果一个类没有声明构造方法,也可以执行!因为一个类即使没有声明构造方法也会有默认的不带参数的构造方法。如果我们自己添加了类的构造方法(无论是否有参),Java 就不会添加默认的无参数的构造方法了。我们一直在不知不觉地使用构造方法,这也是为什么我们在创建对象的时候后面要加一个括号(因为要调用无参的构造方法)。如果我们重载了有参的构造方法,记得都要把无参的构造方法也写出来(无论是否用到)
2024-10-30 18:59:35
172
原创 什么是可变长参数?与 面向对象和面向过程的区别和创建一个对象用什么运算符?对象实体与对象引用有何不同?
从 Java5 开始,Java 支持定义可变长参数,所谓可变长参数就是允许在调用方法时传入不定长度的参数。就比如下面这个方法就可以接受 0 个或者多个参数。另外,可变参数只能作为函数的最后一个参数,但其前面可以有也可以没有任何其他参数。答案是会优先匹配固定参数的方法,因为固定参数的方法匹配度更高。我们通过下面这个例子来证明一下。ababcd另外,Java 的可变参数编译后实际会被转换成一个数组,我们看编译后生成的class文件就可以看出来了。
2024-10-29 19:10:21
689
原创 静态方法为什么不能调用非静态成员?与静态方法和实例有何不同?和重载和重写有什么区别?
编译器必须挑选出具体执行哪个方法,它通过用各个方法给出的参数类型与特定方法调用所使用的值类型进行匹配来挑选出相应的方法。静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),不允许访问实例成员(即实例成员变量和实例方法),而实例方法不存在这个限制。发生在同一个类中(或者父类和子类之间),方法名必须相同,参数类型不同、个数不同、顺序不同,方法返回值和访问修饰符可以不同。2.在类的非静态成员不存在的时候静态方法就已经存在了,此时调用在内存中还不存在的非静态成员,属于非法操作。
2024-10-28 11:37:45
671
原创 静态变量有什么作用?与字符型常量和字符串常量的区别?和
方法的返回值是指我们获取到的某个方法体中的代码执行后产生的结果!(前提是该方法可能产生结果)。返回值的作用是接收出结果,使得它可以用于其他的操作!1、无参数无返回值的方法//......// 下面这个方法也没有返回值,虽然用到了 returnif (...) {// 表示结束方法的执行,下方的输出语句不会执行return;2、有参数无返回值的方法//......3、有返回值无参数的方法//......return x;4、有返回值有参数的方法。
2024-10-26 16:55:32
257
原创 如何解决浮点数运算的精度丢失问题?与超过 long 整型的数据应该如何表示?和成员变量与局部变量的区别?
对于编译器(javac)来说,局部变量没赋值很好判断,可以直接报错。而成员变量可能是运行时赋值,无法判断,误报“没默认值”又会影响用户体验,所以采用自动赋默认值。默认值有两种设置方式:手动和自动,根据第一点,没有手动赋值一定要自动赋值。成员变量在运行时可借助反射等方法手动赋值,而局部变量不行。通常情况下,大部分需要浮点数精确运算结果的业务场景(比如涉及到钱的场景)都是通过。变量存储的是内存地址对应的任意随机值,程序读取该值运行会出现意外。基本数值类型都有一个表达范围,如果超过这个范围就会有数值溢出的风险。
2024-10-25 15:42:35
320
原创 自动装箱与拆箱了解吗?原理是什么?与为什么浮点数运算的时候会有精度丢失的风险?
这个和计算机保存浮点数的机制有很大关系。我们知道计算机是二进制的,而且计算机在表示一个数字时,宽度是有限的,无限循环的小数存储在计算机时,只能被截断,所以就会导致小数精度发生损失的情况。这也就是解释了为什么浮点数没有办法用二进制精确表示。从字节码中,我们发现装箱其实就是调用了 包装类的。关于浮点数的更多内容,建议看一下。方法,拆箱其实就是调用了。为什么会出现这个问题呢?
2024-10-24 18:37:01
292
原创 基本类型和包装类型的区别?与包装类型的缓存机制了解么?
这是因为 HotSpot 虚拟机引入了 JIT 优化之后,会对对象进行逃逸分析,如果发现某一个对象并没有逃逸到方法外部,那么就可能通过标量替换来实现栈上分配,而避免堆上分配内存。基本数据类型的存储位置取决于它们的作用域和声明方式。如果它们是成员变量,那么它们会存放在堆/方法区/元空间中。如果超出对应范围仍然会去创建新的对象,缓存的范围区间的大小只是在性能和资源之间的权衡。Java 基本数据类型的包装类型的大部分都用到了缓存机制来提升性能。直接使用的是缓存中的对象。的相应类型的缓存数据,会直接创建新的对象。
2024-10-23 19:00:10
424
原创 continue、break和return 的区别是什么? 与Java 中的几种基本数据类型了解么?
这是因为在二进制补码表示法中,最高位是用来表示符号的(0 表示正数,1 表示负数),其余位表示数值部分。所以,如果我们要表示最大的正数,我们需要把除了最高位之外的所有位都设为 1。另外,Java 的每种基本类型所占存储空间的大小不会像其他大多数语言那样随机器硬件架构的变化而变化。这种所占存储空间大小的不变性是 Java 程序比用其他大多数语言编写的程序更具可移植性的原因之一(《Java 编程思想》2.2 节有提到)。在循环结构中,当循环条件不满足或者循环次数达到要求时,循环会正常结束。
2024-10-22 16:57:04
404
原创 自增自减运算符与移位运算符
也就是说左移/右移 32 位相当于不进行移位操作(32%32=0),左移/右移 42 位相当于左移/右移 10 位(42%32=10)。由于左移位数大于等于 32 位操作时,会先求余(%)后再进行左移操作,所以下面的代码左移 42 位相当于左移 10 位(42%32=10),输出结果和前面的代码一样。移位操作中,被操作的数据被视为二进制数,移位就是将其向左或向右移动若干位的运算。掌握最基本的移位运算符知识还是很有必要的,这不光可以帮助我们在代码中使用,还可以帮助我们理解源码中涉及到移位运算符的代码。
2024-10-21 19:15:07
509
原创 为什么说Java语言“编译与解释并存“? 与 Java 语言关键字有哪些?
这是因为 Java 语言既具有编译型语言的特征,也具有解释型语言的特征。因为 Java 程序要经过先编译,后解释两个步骤,由 Java 编写的程序需要先经过编译步骤,生成字节码(这种技术混合了编译语言与解释型语言的优点,它像编译语言一样,先把程序源代码编译成。这个关键字很特殊,既属于程序控制,也属于类,方法和变量修饰符,还属于访问控制。其实这个问题我们讲字节码的时候已经提到过,因为比较重要,所以我们这里再提一下。Tips:所有的关键字都是小写的,在 IDE 中会以特殊颜色显示。是这种技术的代表产物。
2024-10-18 16:54:56
267
原创 Shiro 认证 (Authentication)
Shiro是一个强大而灵活的Java安全框架,主要用于解决认证(Authentication)、授权(Authorization)、加密和会话管理等问题。
2024-10-17 19:59:14
838
原创 Java 语言有哪些特点?与Java 语言有哪些特点?
所以, Java 程序运行时相对来说还是高效的(不过,和 C、 C++,Rust,Go 等语言还是有一定差距的),而且,由于字节码并不针对一种特定的机器,因此,Java 程序无须重新编译便可在多种不同操作系统的计算机上运行。HotSpot 采用了惰性评估(Lazy Evaluation)的做法,根据二八定律,消耗大部分系统资源的只有那一小部分的代码(热点代码),而这也就是 JIT 所需要编译的部分。JVM 会根据代码每次被执行的情况收集信息并相应地做出一些优化,因此执行的次数越多,它的速度就越快。
2024-10-17 19:52:32
559
原创 Java SE vs Java EE 与 JVM vs JDK vs JRE
它包含了 JRE(Java Runtime Environment),以及编译器 javac 和其他工具,如 javadoc(文档生成器)、jdb(调试器)、jconsole(监控工具)、javap(反编译工具)等。简单来说,JRE 只包含运行 Java 程序所需的环境和类库,而 JDK 不仅包含 JRE,还包括用于开发和调试 Java 程序的工具。也就是说,可以用 jlink 根据自己的需求,创建一个更小的 runtime(运行时),而不是不管什么应用,都是同样的 JRE。,感兴趣的可以去看看。
2024-10-11 19:10:54
781
原创 try、catch、finally、return执行顺序超详解析与throw与throws区别
【代码】try、catch、finally、return执行顺序超详解析与throw与throws区别。
2024-10-10 20:26:17
1450
原创 几种集合的区别及适用场景与哪些集合类是线程安全的?哪些不安全?
后台开发工作中经常遇到一些使用集合的场景,几种集合的优缺点又老是记不住,所以写了这篇博客。首先大的集合分为:List,Set,Map三种,其中List与Set是继承自Collection,而Map不是。List与Set的区别:List中的元素有存放顺序,并且可以存放重复元素,检索效率高,插入删除效率低,Set没有存放顺序,而且不可以存放重复元素,后来的元素会把前面重复的元素替换掉,检索效率低,插入删除效率高。(Set存储位置是由它的HashCode码决定的,所以它存储的对象必须有equals()方法,而且S
2024-10-09 18:37:25
611
原创 集合List 、Set、Map的区别与联系
TreeMap的特点在于,所得到的结果是经过排序的。类似于HashMap,但是迭代遍历他时,取得的"键值对"的顺序是其插入次序,或是最近最少使用的(LRU)的次序。具有HsahSet的查询速度,内部使用链表维护元素的顺序(插入的次序)在使用迭代器遍历Set时,结果会按元素插入的次序显示。使用"=="代替"equals()"对键进行比较的散列映射,专门解决特殊问题而设计出的。Map中存储的数据是无序的,他的键是不允许重复的,值是可以重复的。List中存储的数据是有序的,可以是重复的。一种线程安全的Map。
2024-10-08 23:13:10
400
原创 Web开发:Thymeleaf模板引擎
Thymeleaf作为一种强大的Java模板引擎,在Web开发中发挥着重要作用。它提供了丰富的模板语法和易于集成的特性,使得开发者能够高效地实现界面与数据的分离,从而提高开发效率和灵活性。
2024-09-20 19:29:13
747
原创 数据访问:MyBatis-Plus&Druid数据源
MyBatis-Plus 和 Druid 是 Java 开发中常用的两个库,它们分别用于数据库操作和数据库连接池管理。MyBatis-Plus 是 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。Druid 是一个开源的数据库连接池,它提供了强大的监控和扩展功能,是阿里巴巴开源的数据库连接池项目。
2024-09-06 21:31:29
554
原创 数据访问JPA关联&MyBatis
在Java开发中,数据持久化是一个非常重要的方面,其中JPA(Java Persistence API)和MyBatis是两个广泛使用的ORM(对象关系映射)框架。这两个框架都提供了数据访问的便捷方式,但在处理关联(或称为关系)时,它们各自有不同的特点和方法。
2024-09-04 15:08:09
563
原创 Spring Boot入门
Spring Boot 是 Spring 框架的一个扩展,它提供了大量的自动配置,使得基于 Spring 的应用开发变得更加简单和快速。Spring Boot 的设计初衷是让开发者能够“just run”,即只需很少的配置就能快速启动和运行一个 Spring 应用。
2024-08-30 19:05:08
378
原创 Spring MVC 扩展和 SSM 框架整合
开发web项目通常很多地方需要使用ajx清求来完成相应的功能,比如表单交巨或者是复杂的U设计中数据的传递等等。对于返回结果,我们一般使用ISON对象来表示,那么Sping MVC中如何处理ISON对象?
2024-08-08 17:44:57
575
原创 项目框架升级之数据校验及文件上传
在本章节中,我们深入探讨了项目框架升级中的数据校验和文件上传功能。数据校验是确保数据的准确性和完整性的重要步骤,而文件上传则是在项目框架中实现数据交流和共享的关键功能。为了提高性能和用户体验,我们可以采取一系列优化方案来实现这些功能。需要注意的是,在实现这些功能时,需要考虑到安全性和可靠性问题,确保数据的保密性和完整性。同时,也需要根据实际需求进行灵活调整和优化。
2024-08-02 15:51:52
860
原创 框架升级之单例模式及统一异常处理
在深入分析单例模式和统一异常处理在项目框架升级中的应用后,我们发现它们可以帮助我们提高代码的可维护性和可读性、减少重复的代码和异常处理逻辑、提高系统的稳定性和可靠性。例如,在日志记录中,我们可以使用单例模式来确保只有一个日志记录器实例,并使用统一异常处理来捕获和处理可能出现的异常。在缓存处理中,我们可以使用单例模式来实现缓存的统一管理,并使用统一异常处理来处理缓存操作中可能出现的异常。最后,总结了全文,强调了单例模式和统一异常处理在项目框架升级中的重要性,并展望了未来的发展趋势。三、项目框架升级中的应用。
2024-07-29 10:52:42
368
原创 SpringMVC框架
SpringMVC是基于Spring的,是Spring中的一个模块,专门用来做web开发使用的。SpringMVC 也叫 Spring web mvc。是 Spring 框架的一部分,是在Spring3.0 后发布的。基于 MVC 架构,功能分工明确、解耦合。SpringMVC也是一个容器,使用IoC核心技术,管理界面层中的控制器对象。SpringMVC的底层就是servlet,以servlet为核心,接收请求、处理请求,显示处理结果给用户。
2024-07-26 19:45:40
611
原创 Spring框架配置扩展
global session:仅在Portlet的Web应用中使用,同一个全局会话共享一个实例。Session:用于Web应用环境,同一个会话享同一个实例,不同的会话使用不同的实例。constructor:与byType的方式类似,不同之处在于,它应用于构造器参数。request:用于Web应用环境,针对每次HTTP请求都会创建一个实例。proptotype:每次从容器中获取Bean时,都会创建一个实例。byType:根据属性类型自动装配。byName:根据属性名自动装配。singleton:默认值。
2024-07-24 15:41:01
205
原创 Spring框架整合Mybatis框架
Spring框架整合其他框架的本质其实就是把其他框架交给Spring框架管理。Spring框架通过IOC、AOP等机制实现与其他框架的连接,最终建立一个低耦合的应用架构,这大大增强了系统的灵活性,便于功能扩展。
2024-07-22 10:52:28
749
原创 Spring框架深入学习
注意:当目标方法出错时,后置增强不执行,最终增强会执行;有异常执行异常增强,不报错执行后置增强前置增强使用@Befor注解标识,增强方法优先于目标方法执行。在核心功能之前执行的额外功能。后置增强(又称后置通知)的特点后置增强用@After标识,增强方法在目标方法执行后执行,无论目标方法运行期间是否出现异常。在核心功能之后执行的额外功能。环绕增强(又称环绕通知)的特点环绕增强由@Around修饰,可以实现上述@Before,@After,@AfterReturning和@AfterThro
2024-07-19 10:37:11
1883
原创 第五章Spring框架
Spring是由Rod Johnson开发的一个开源容器框架,提供了控制反转[IoC],依赖注入,面向切面[AOP],事务管理,框架整合等功能,用于简化企业级应用开发.接下来就可以在 SecureCRT 客户端工具中敲命令尽情玩耍了!
2024-07-15 09:44:05
686
原创 第四章Redis
Resid目前互联网应用广泛使用两种方式进行数据存储,关系型数据库和NoSQL数据库。 关系型数据库是指采用关系模型来组织数据的数据库,主要用于存储格式化的数据结构,大量传统数据库如MySQL,Oracle,SLQserver等都属于关系型数据库。 NoSQL数据库泛指非关系型数据库,主要服务与特定背景的专用数据库,对外提供的是特定的API,而非通用的SQL接口,数据访问更加高效。 Resid是一个高性能的缓存数据库,能够在高并发场景下为应用提供高效的数据访问能力。按照键值对的结构对
2024-07-10 20:05:39
784
原创 第二章XML
元素由开始标签,结束标签和元素内容组成。元素内容指开始标签和结束标签之间的内容,可以包含子元素,字符数据等。元素的命名规则如下名称中可以包含字母数字,或者其他符号。名称不能一数字或标点符号开始是。名称不能以字符“”XML“(或者XML,XmL)开始。名称不能包含空格。
2024-07-01 11:02:41
1190
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人