
Java 入门系列
文章平均质量分 82
Java 入门内容
冰糖心书房
这里是Java技术实践的宝藏库!记录了我多年来在Java开发领域的实战经验和心得体会。从企业级项目架构设计、高并发处理到微服务架构的落地实施,每一个案例都是真实的项目沉淀。我会分享在项目中遇到的各种挑战以及如何巧妙解决它们的方法,希望能为同行们提供有价值的内容
展开
-
Java 为什么不支持多继承?
Java 放弃类的多重继承,主要是为了避免菱形问题带来的方法调用歧义和状态管理的复杂性,保持语言的简洁和健壮。它通过支持实现多个接口以及带有冲突解决规则的默认方法,提供了一种更安全、更清晰的方式来达到类似多重继承所追求的灵活性和代码复用目标。原创 2025-04-08 17:12:40 · 391 阅读 · 0 评论 -
责任链模式详解和在Spring Boot 项目中的使用场景
责任链模式 (Chain of Responsibility Pattern) 是一种行为型设计模式。它将请求的发送者和接收者解耦,允许你将请求沿着处理者链进行传递,直到有一个处理者处理它为止。每个处理者都包含对下一个处理者的引用,形成一条链。原创 2025-03-03 10:11:23 · 953 阅读 · 0 评论 -
Java volatile 作用和使用场景
JDK1.5 之前,即使是使用了双重检查,由于volatile 关键字语义不完善, DCL仍然不能保证安全。是 Java 并发编程中一个重要的关键字,它可以提供轻量级的同步机制,保证可见性和禁止指令重排序。的原理、作用、使用场景和局限性,是编写正确的并发程序的基础。在实际开发中,要根据具体情况,合理使用。是 Java 中的一个关键字,用于修饰变量。、原子类、锁等同步机制,构建高效、可靠的多线程应用程序。和 CAS操作来实现原子性、可见性和有序性。(禁止指令重排序)的一种轻量级同步机制。原创 2025-03-03 09:54:56 · 1328 阅读 · 0 评论 -
Spring Boot 项目中,JDK 动态代理和 CGLIB 动态代理的使用
在 Spring Boot 项目中,JDK 动态代理和 CGLIB 动态代理都是实现 AOP (面向切面编程) 的重要技术。它们的主要区别在于代理对象的生成方式和适用范围。在实际开发中,Spring AOP 会自动选择合适的代理方式。如果没有特殊需求,可以使用默认配置。如果需要强制使用 CGLIB 动态代理,可以设置。默认情况下,Spring AOP 会根据目标类是否实现了接口来选择使用 JDK 动态代理或 CGLIB 动态代理。属性来强制使用 CGLIB 动态代理。原创 2025-02-24 09:48:40 · 1426 阅读 · 0 评论 -
反射机制在项目中的应用场景
AOP 是一种编程范式,用于将横切关注点(例如日志记录、安全检查、事务管理)从核心业务逻辑中分离出来。需要将 Java 对象转换为字节流,以便进行网络传输或持久化存储。在反序列化时,需要将字节流转换为 Java 对象。Spring 框架使用反射来实现依赖注入,在运行时动态地将依赖对象注入到目标对象中。框架需要在运行时动态地加载类、创建对象、调用方法,而不需要在编译时知道这些信息。MyBatis 使用反射来将数据库查询结果映射到 Java 对象。需要测试类的私有方法或私有字段,但无法直接访问这些成员。原创 2025-02-24 09:41:13 · 1140 阅读 · 0 评论 -
Java 注解 (Annotations)的定义和使用规则
Java 注解是一种强大的元数据机制,它可以在代码中嵌入补充信息,并在编译时或运行时被处理。理解注解的定义、元注解、内置注解、自定义注解以及使用场景,可以帮助你编写更简洁、更灵活、更易于维护的 Java 代码。Java 注解(Annotations)是 Java 5 引入的一种元数据(Metadata),它提供了一种在源代码中嵌入补充信息的方式,这些信息可以被编译器、JVM 或其他工具在编译时、运行时进行处理。元注解是用于修饰注解的注解,用于指定注解的特性。指定该注解可以被子类继承。原创 2025-02-23 13:27:18 · 746 阅读 · 0 评论 -
Java IO 和 NIO 的基本概念和 API
Java IO 和 NIO 都是 Java 平台提供的用于进行输入和输出操作的 API。Java IO 基于流的模型,使用简单但性能较低;Java NIO 基于通道和缓冲区的模型,提供高性能、非阻塞的 I/O 操作。表示文件或目录的抽象表示。原创 2025-02-22 09:50:18 · 1220 阅读 · 0 评论 -
Java 反射 (Reflection) 详解
Java 反射是一种强大的语言特性,它为我们提供了在运行时动态地获取类信息和操作类成员的能力。在使用反射时,需要谨慎权衡其优缺点,并采取相应的措施来提高性能和保证安全。反射可以用来获取类的属性信息,动态生成 SQL 语句,并将查询结果映射到 Java 对象。换句话说,反射可以让你在程序运行过程中“动态”地获取类的信息并操作类的成员。反射可以用来读取类、方法和字段上的注解信息,并根据注解信息执行相应的操作。Java 反射的实现依赖于 JVM 的类加载机制和 Class 对象。原创 2025-02-20 17:33:02 · 970 阅读 · 0 评论 -
Java Collections 类中方法详解
类是 Java 集合框架的一个工具类,它包含一系列静态方法,用于操作和处理各种类型的集合。通常使用归并排序 (Merge Sort) 或 TimSort (一种混合排序算法,结合了归并排序和插入排序的优点),具有较好的平均性能和最坏情况性能。类提供了一组静态方法,用于将非线程安全的集合转换为线程安全的集合。返回指定集合中的最大元素,使用指定的比较器进行比较。返回指定集合中的最小元素,使用指定的比较器进行比较。集合中查找指定的元素,使用指定的比较器进行比较。使用指定的随机源随机排列指定的。原创 2025-02-20 09:46:39 · 948 阅读 · 0 评论 -
Java 集合框架 (Collections Framework) 大纲
Java 集合框架 (Collections Framework) 是 Java 平台提供的一组接口、实现类和算法,用于存储、操作和管理对象集合。Java 集合框架是 Java 编程中非常重要的一个部分,它提供了一组强大、灵活、高效的工具来处理对象集合。在多线程环境下,使用线程安全的集合类,或者使用同步机制来保护非线程安全的集合。不同的集合实现类具有不同的性能特征,了解这些特征可以帮助我们选择最合适的集合。等基于数组的集合,在创建时指定一个合适的初始容量,可以减少扩容操作,提高性能。可以通过索引访问元素。原创 2025-02-19 11:10:32 · 333 阅读 · 0 评论 -
java 面向对象编程 (OOP)之 封装的概念
封装是面向对象编程的核心原则之一,它通过将数据和操作数据的方法绑定在一起,并隐藏对象的内部实现细节,来实现数据隐藏、提高代码的可维护性、可重用性和安全性。在 Java 中,封装主要通过访问修饰符(绑定在一起,形成一个独立的单元(类),并对外部隐藏对象的内部实现细节,只暴露必要的接口。封装是面向对象编程的基本原则,几乎在所有面向对象程序中都会用到。封装是面向对象编程的四大基本特征之一(另外三个是继承、多态和抽象)。、默认)和 getter/setter 方法来实现。原创 2025-02-18 17:47:56 · 956 阅读 · 0 评论 -
java 面向对象编程 (OOP)之 多态的概念
多态是面向对象编程的核心特征之一,它允许我们使用统一的接口操作不同类型的对象,实现代码的灵活性、可扩展性和可维护性。Java 通过继承(或实现)、方法重写和向上转型来实现运行时多态。多态 (Polymorphism) 的字面意思是 “多种形态” 或 “多种形式”。接口,Web 容器 (例如 Tomcat) 通过多态来调用不同 Servlet 实现类的。用户可以通过实现接口或继承抽象类来扩展框架的功能,而无需修改框架的源代码。来决定调用哪个方法,而不是根据引用变量的类型。框架通过多态来调用用户自定义的实现。原创 2025-02-18 11:23:55 · 931 阅读 · 0 评论 -
java 面向对象编程 (OOP)之 继承的概念
在 Java 中,继承是面向对象编程(OOP)的一个核心概念,它允许一个类(子类,也称为派生类)继承另一个类(父类,也称为基类)的属性和方法。通过继承,子类可以重用父类的代码,并且可以在此基础上添加新的功能或修改现有的功能,从而实现代码的复用和可扩展性。谨慎使用继承,优先考虑组合,遵循面向对象设计原则,可以使你的代码更健壮、更易于维护和扩展。继承是 Java 面向对象编程的核心概念之一,它允许子类继承父类的属性和方法,实现代码复用和扩展。关键字在子类中用于引用父类的成员(变量、方法)或调用父类的构造方法。原创 2025-02-17 09:45:12 · 769 阅读 · 0 评论 -
java 面向对象编程 (OOP): 之接口的定义
理解接口的定义、特性、使用场景、与抽象类的对比以及最佳实践,可以帮助我们更好地设计和编写 Java 程序,提高代码的可维护性、可扩展性和可重用性。接口是一种规范,是一种契约 (Contract),它规定了实现类必须遵循的规则。可以通过接口引用指向不同的实现类对象,并调用相同的方法,实现不同的行为。当某个事件发生时,另一个对象调用接口的回调方法,通知实现类对象。接口最核心的作用是定义规范,它规定了一组类应该具有的行为。接口可以将接口的定义与实现分离,降低代码之间的耦合度。将接口的实现类对象传递给另一个对象。原创 2025-02-16 12:15:40 · 813 阅读 · 0 评论 -
Java 面向对象编程 (OOP): 之对象
对象是 Java 面向对象编程的核心概念,它是类的实例,具有状态、行为和标识原创 2025-02-15 11:01:15 · 696 阅读 · 0 评论 -
java 面向对象编程 (OOP)之 类的概念
在 Java 中,类是创建对象的模板或蓝图。它定义了一类对象共有的属性(状态)和行为(方法)。 类是一种抽象的数据类型,它封装了数据和操作数据的方法。原创 2025-02-14 09:55:02 · 978 阅读 · 0 评论 -
CAS的使用场景
在更新数据时,会检查数据是否被其他线程修改过,如果没有被修改过,则更新成功;理解 CAS 的原理和适用场景,可以帮助你更好地进行并发编程,编写出更高效、更可靠的多线程应用程序。但需要注意 CAS 的 ABA 问题、循环开销等问题,并根据实际情况选择合适的解决方案。CAS(Compare-and-Swap,比较并交换)作为一种无锁(乐观锁)的原子操作,在并发编程中有着广泛的应用。) 提供了一系列原子类,它们内部使用 CAS 来实现原子操作,为开发者提供了方便、高效的线程安全工具。Java 并发包 (原创 2025-02-13 12:29:28 · 839 阅读 · 0 评论 -
CAS 的工作原理
CAS (Compare-and-Swap) 本身并不是一个独立的项目或软件,而是一种底层的硬件指令和并发编程概念原创 2025-02-13 10:37:59 · 605 阅读 · 0 评论 -
HttpServletRequest 作用
通过 `HttpServletRequest` 对象我们可以方便的获取到所有与客户端请求相关的信息,并根据这些信息来处理请求、生成响应。 它是 Servlet 与客户端之间沟通的桥梁。原创 2025-02-12 10:12:45 · 814 阅读 · 0 评论 -
java 把一个整型数组倒着输出来方式
在 Java 中,可以通过多种方式将一个整型数组倒序输出。原创 2025-01-26 10:20:19 · 260 阅读 · 0 评论 -
Java 从数组中查找重复元素的几种方法
HashSet和 HashMap是常用的数据结构,适合处理重复元素的问题。双重循环方法简单直接,但效率较低,适合小规模数据。Stream API提供了更方便的编程方式,代码简洁但可能需要更多的资源。根据开发的需求和数组的大小,可以选择合适的方法来找出重复元素。原创 2025-01-26 10:02:50 · 419 阅读 · 0 评论 -
Spring AOP 实现原理
Spring AOP 是通过代理方式来实现的,能够在方法执行前后动态插入代码。使用 AOP 可以帮助我们解耦横切关注点(如日志、事务管理、权限控制等),使得代码更简洁易维护。原创 2025-01-17 10:41:10 · 553 阅读 · 0 评论 -
springboot 开发
1、Get请求语法 restful的请求方式,使用 @PathVariable @RequestMapping(value = "/queryUserById/{name}") public User queryUserById(@PathVariable String name){ return userMapper.queryUserByI...原创 2020-01-22 14:30:36 · 118 阅读 · 0 评论 -
Java 拷贝文件内容
说明:把d盘下a.txt 中的内容复制到e盘下e.txt文件中 private static void copyDataBase() { try { File f1 = new File("d:/a.txt"); File f2 = new File("e:/e.txt"); InputStream in = new FileInputStream(f1);原创 2014-12-16 13:59:03 · 925 阅读 · 0 评论 -
Java 中LocalDate 的使用
LocalDate的使用: LocalDate localDate = LocalDate.now(); LocalTime localTime = LocalTime.now(); LocalDateTime localDateTime = LocalDateTime.now(); System.out.println("l...原创 2019-09-16 10:41:51 · 639 阅读 · 0 评论 -
Java 类型操作
1、在java中把两个整形变量赋值给byte类型的变量,并且做加的操作,如果用byte类型来接收就会发生错误。例:byte b1 = 10;byte b2 = 20;byte b3 = b1 + b2;这样第三行代码就会出现编译错误,因为b1和b2会自动转换为int类型,计算结果为int,int赋值给byte需要强制类型转换。解决的方式有两种:1、使用int来接收:int ...原创 2019-09-23 16:15:42 · 165 阅读 · 0 评论 -
Java 常用Api 汇总
1、StringJoiner : JDK1.8开始 用于构建由分隔符分隔的字符序列,并且可选择从提供的前缀开始,并以提供的后缀结尾。 字符串"[George:Sally:Fred]"可以被构造如下: StringJoiner sj = new StringJoiner(":", "[", "]");sj.add("George").add("Sally").add("...原创 2019-10-11 15:11:09 · 219 阅读 · 0 评论 -
Android进阶之大话设计模式
一般来说,常用的设计模式有以下八种:单例、工厂、观察者、代理、命令、适配器、合成、访问者单例模式:目的是为了让系统中只有一个调用对象,缺点是单例使其他程序过分依赖它,而且不同单例运行在不同进程中,使得维护困难;工厂模式:生产固定的一些东西,如抽象类,缺点是产品修改麻烦;如喜欢动作片和爱情片的人分别向服务器发出同一个请求,就可以得到他们想看的影片集,相当于不同对象进行同一请求,需求均转载 2013-11-29 16:31:36 · 812 阅读 · 0 评论 -
Java 中数据类型的转换
1、把一个十进制的数转换成其它进制的数可采用: int x = 25; String a = Integer.toBinaryString(x); String b = Integer.toHexString(x); String c = Integer.toOctalString(x);2、其它进制转换成十进制:原创 2013-06-20 14:26:16 · 485 阅读 · 0 评论 -
java 中的编码与解码
package com.sunplus.app;import java.io.UnsupportedEncodingException;import java.net.URLDecoder;import java.net.URLEncoder;public class Encode { public static void main(String[] args) {原创 2013-06-20 15:12:01 · 601 阅读 · 0 评论 -
Java 第一个程序的解释
对下面这段代码作一下解释:public class Demo01{public static void main(Stirng[] args){System.out.println("Hello world");}}(1)Java程序都是以类的形式出现,一个程序中可以定义若干个类,但只能定义一个public类(内部类除外)。定义类必须用关键字class作为标志。如果在一原创 2013-04-16 15:11:09 · 623 阅读 · 0 评论 -
Java 中的多态
java多态,如何理解父类引用指向子类对象1、要理解多态性,首先要知道什么是“向上转型”。 我定义了一个子类Cat,它继承了Animal类,那么后者就是前者是父类。我可以通过 Cat c = new Cat(); 实例化一个Cat的对象,这个不难理解。 但当我这样定义时: Animal a = new Cat(); 这代表什么意思呢?原创 2013-06-20 15:09:40 · 559 阅读 · 0 评论 -
Java 的特点
Java的特点 Sun公司在“Java白皮书”中对Java的定义是:“Java: A simple, object-oriented, distributed, interpreted, robust, secure, architecture-neutral, portable, high-performance, multi-threaded, and dynamic lan转载 2013-04-17 19:04:34 · 1241 阅读 · 0 评论 -
Java虚拟机
Java虚拟机 由Java源程序编译生成的字节码不能直接在一般的操作系统平台上运行,而必须在一个称为Java虚拟机的操作系统之外的平台上运行。这就是说在运行Java程序时,首先应启动Java虚拟机,然后由Java虚拟机来负责执行Java的字节码。 Java虚拟机JVM(Java Virtual Machine)是可以运行Java字节码的假想的计算机。利用Jav原创 2013-04-16 15:15:47 · 713 阅读 · 0 评论 -
Struts2 的开发(环境的搭建)
1. 从 官网 http://struts.apache.org 下载 struts 的开发包(struts-2.3.8-all.gz)2.利用winrar 软件把下载下来的包解压开,struts-2.3.8,解压之后有四个文件夹,分别是 apps ,docs,lib ,src 3.在MyEclipse 中新建一个Javaweb 项目(project ---->MyEclipse----原创 2013-03-18 13:52:50 · 756 阅读 · 2 评论 -
tomcat 中配置虚拟目录
1. 打开tomcat根目录下conf文件夹,找到server.xml文件并且打开,在的上一行写入 内容中的pah:表示浏览器中输入的内容,docBase此路径对应着你硬盘上的真实目录。2. 在conf 文件夹下找到 web.xml文件: default org.apache.catalina.servlets.DefaultServ原创 2013-03-30 15:38:52 · 503 阅读 · 0 评论 -
Java 中 String 类方法的使用
1、String 类是一个最终类,说白了就是不能被子类所继承,下面就看一下它里面的一些方法的使用:a、String 类中常用的构造方法: String(byte[] bytes) 通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的String。 String(byte[] bytes, int offset, int length)通过使用平台的默认字符集解码指原创 2013-09-30 17:30:39 · 774 阅读 · 0 评论 -
Java 开发环境的搭建
Java 开发环境的搭建1.要想开发Java 程序,首先需要Java Jdk 的支持,jdk 的下载可以从www.sun.com 官网上直接下载安装2.安装完之后,需要进行环境变量的配置: a. 我的电脑右键——属性——高级——环境变量,此时会弹出一个环境变量对话框,选择系统变量下的新建 变量名:可以随意,但一般开发人员喜欢这样规定原创 2013-03-18 15:34:34 · 528 阅读 · 0 评论 -
Java 中把一个字符串反转
方法一:原创 2013-07-29 15:28:40 · 764 阅读 · 0 评论 -
Java 中的构造方法与构造代码块的区别
1. public class Dev{static{System.out.println("静态代码块");}{System.out.println("构造代码块"); }public Dev(){System.out.println("我是一个无参构造方法");}public Dev(String name){System.out.print原创 2013-06-20 14:56:20 · 6172 阅读 · 2 评论