Java
Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。
阿香学编程.
平静地努力,成长的路上从来不拥挤,记录所思所学。
展开
-
Java常用语法糖
Java 中引入了许多语法糖来简化代码,让编程更加直观和高效。原创 2024-05-23 14:06:16 · 311 阅读 · 2 评论 -
迭代器 增强for循环
这里的关键是,这个操作是安全的,因为它是由迭代器自己管理的。迭代器会记录下它所在的集合的状态,并在调用 remove() 方法时进行相应的更新,以避免并发修改异常。原创 2024-05-23 13:57:51 · 1155 阅读 · 0 评论 -
Stream API 和 Lambda表达式
总结来说,Java 8 Stream API提供了一种新的数据处理方式,而Lambda表达式提供了一种新的代码表达方式。两者结合使用,可以写出更简洁、高效的代码。在这个示例中,使用Stream API和Lambda表达式来处理一个字符串列表,筛选出以"A"开头并转换为大写的字符串,并将结果收集到一个新的列表中。原创 2024-05-21 13:37:50 · 297 阅读 · 0 评论 -
flatMap方法:扁平处理流
方法就像是这样一个助手:它帮你打开每个信封,取出所有的小纸条,并把它们放在一起,形成一个没有信封的、平铺的小纸条列表。这样,你就得到了一个包含所有小纸条的单一列表,而不是之前那些装有小纸条的多个信封。flatMap是一个流操作,它接受一个函数作为参数,这个函数会被应用到流中的每个元素上,并且这个函数返回的每个结果都是一个流。flatMap然后将这些流扁平化成一个流。现在,你想要把所有的小纸条都取出来,整理成一个新的、没有信封的列表。假设有一系列的信封,每个信封里面都装着一些小纸条。这些信封相当于我们的。原创 2024-05-21 10:57:43 · 190 阅读 · 0 评论 -
putIfAbsent() 方法
这个方法非常有用,特别是在不希望覆盖现有键值对的情况下,或者在需要检查键是否已经存在于。中,并返回之前与该键关联的值(如果有的话)。如果键不存在,则返回。接着,我们尝试添加 “cherry”,由于它不存在,所以添加成功,,也不会返回任何值。只有当键不存在时,它才会将指定的键值对添加到。返回了之前与 “apple” 关联的值(即 1),而没有修改。并添加了两个键值对。然后,尝试将 “apple” 添加到。中添加一个键值对,前提是这个键尚未存在于。接口的一个方法,它用于向。中,但由于它已经存在,原创 2024-05-17 09:22:39 · 371 阅读 · 0 评论 -
isPresent()
是 Java 8 引入的一个类,用于解决空指针异常的问题。它可以将一个可能为空的值封装成一个对象,并提供了一系列方法来进行安全的操作。对象中的值时出现空指针异常。通过在执行前进行判断,我们可以根据存在与否来决定进一步的操作,确保代码的安全性和可靠性。对象中有非空值,那么条件判断为真,执行下面的代码块。如果不存在匹配的对象,即。的作用是判断是否存在匹配的 zf 采购页签对象。对象中为空值,那么条件判断为假,跳过下面的代码块。对象中存在非空值,则返回。类的一个方法,用于检查。在上面提到的代码示例中,原创 2023-08-01 11:19:06 · 882 阅读 · 0 评论 -
for…in 循环
在每次迭代时,循环会将可迭代对象中的下一个元素赋值给变量,并执行语句块。当所有元素都被遍历完毕后,循环终止。in 循环是一种用于遍历可迭代对象(如列表、元组、字符串等)中的元素的循环结构。以下是一个示例,演示如何使用for…这样就完成了对列表中元素的遍历。变量依次被赋值为列表中的每个元素,并通过。原创 2023-06-25 11:10:57 · 248 阅读 · 0 评论 -
BeanUtils.copyProperties()
可以方便地将一个Java对象的属性值赋值给另一个Java对象,避免了手动编写getter和setter方法的繁琐过程。需要注意的是,被复制的对象必须有对应的getter和setter方法,否则无法进行属性值的复制。此外,如果源对象中有属性为null,则目标对象中对应属性也会为null。是Spring框架中的一个工具类方法,用于将一个Java对象的属性值复制到另一个Java对象中去。对象中,如果两个对象的属性名相同且数据类型兼容,则会进行属性值的复制。原创 2023-05-26 14:16:06 · 288 阅读 · 0 评论 -
CollectionUtils常用方法
还提供了很多其他有用的方法,如连接集合、分组集合、计算集合差异等,使用时可根据实际需求选择适合的方法。需要注意的是,这些方法可以操作各种类型的集合,例如 List、Set 和 Map 等。一些常用的 Apache Commons Collections 中。原创 2023-04-20 19:01:22 · 746 阅读 · 0 评论 -
Java 三元运算符 ?:
Java 提供了一个特别的三元运算符(也叫三目运算符)经常用于取代某个类型的 if-then-else 语句。条件运算符的符号表示为“?:”,使用该运算符时需要有三个操作数,因此称其为三目运算符。其中,expression 是一个布尔表达式。当 expression 为真时,执行 statement1, 否则就执行 statement3。此三元运算符要求返回一个结果,因此要实现简单的二分支程序,即可使用该条件运算符。原创 2022-12-28 14:04:33 · 221 阅读 · 0 评论 -
代码规范-日志规约
日志规约翻译 2022-09-21 10:59:45 · 413 阅读 · 0 评论 -
代码规范-异常处理
异常处理翻译 2022-09-21 10:32:34 · 551 阅读 · 0 评论 -
各层命名规约
各层命名规约翻译 2022-09-21 10:13:16 · 253 阅读 · 0 评论 -
接口和实现类命名
接口和实现类命名翻译 2022-09-21 10:11:29 · 1317 阅读 · 0 评论 -
POJO 类中布尔类型的变量命名
反例:定义为基本数据类型 boolean isSuccess;的属性,它的方法也是 isSuccess(),RPC。框架在反向解析的时候,“以为”对应的属性名称是 success,导致属性获取不到,进而抛出异。POJO 类中布尔类型的变量,都不要加 is,否则部分框架解析会引起序列化错误。翻译 2022-09-21 09:59:44 · 254 阅读 · 0 评论 -
Java中的invoke()方法
invoke()方法原创 2022-08-24 17:20:08 · 15275 阅读 · 0 评论 -
ThreadLocal
ThreadLocalThreadLocal 是线程共享变量。ThreadLoacl 有一个静态内部类 ThreadLocalMap,其 Key 是 ThreadLocal 对象,值是 Entry 对象,ThreadLocalMap是每个线程私有的。set 给ThreadLocalMap设置值。get 获取ThreadLocalMap。remove 删除ThreadLocalMap类型的对象。存在的问题对于线程池,由于线程池会重用 Thread 对象,因此与 Thread 绑定的 ThreadL原创 2021-09-22 21:52:13 · 1007 阅读 · 0 评论 -
Java中的接口
一、接口的概念:接口是一种引用的数据类型,接口只是描述应该具备的方法,没有具体的实现,不能实例化。接口的定义:关键字:interface,不再使用class。接口的文件后缀名仍为java,编译后的文件仍叫class文件与类的定义相同,唯一不同的是关键字public interface MyInterface{}二、接口内成员(属性、方法)定义:1.接口内属性的定义:接口中不能定义普通的属性必须定义为常量,普通的类中可以用get set进行操作,接口不可以。固定写法:public sta转载 2021-09-22 20:48:33 · 68 阅读 · 0 评论 -
Java JVM内存模型
简述JVM内存模型线程私有的运行时数据区: 程序计数器、Java 虚拟机栈、本地方法栈。线程共享的运行时数据区:Java 堆、方法区。简述程序计数器程序计数器表示当前线程所执行的字节码的行号指示器。程序计数器不会产生StackOverflowError和OutOfMemoryError。简述虚拟机栈Java 虚拟机栈用来描述 Java 方法执行的内存模型。线程创建时就会分配一个栈空间,线程结束后栈空间被回收。栈中元素用于支持虚拟机进行方法调用,每个方法在执行时都会创建一个栈帧存储方法的局部变翻译 2021-09-18 09:51:45 · 98 阅读 · 0 评论 -
Java 多线程
简述java内存模型(JMM)java内存模型定义了程序中各种变量的访问规则。其规定所有变量都存储在主内存,线程均有自己的工作内存。工作内存中保存被该线程使用的变量的主内存副本,线程对变量的所有操作都必须在工作空间进行,不能直接读写主内存数据。操作完成后,线程的工作内存通过缓存一致性协议将操作完的数据刷回主存。简述as-if-serial编译器等会对原始的程序进行指令重排序和优化。但不管怎么重排序,其结果和用户原始程序输出预定结果一致。简述happens-before八大原则程序次序规则:一个线翻译 2021-09-17 16:47:02 · 147 阅读 · 0 评论 -
JAVA基础
Java语言具有哪些特点?Java为纯面向对象的语言。它能够直接反应现实生活中的对象。具有平台无关性。java利用Java虚拟机运行字节码,无论是在Windows、Linux还是MacOS等其它平台对Java程序进行编译,编译后的程序可在其它平台运行。Java为解释型语言,编译器把Java代码编译成平台无关的中间代码,然后在JVM上解释运行,具有很好的可移植性。Java提供了很多内置类库。如对多线程支持,对网络通信支持,最重要的一点是提供了垃圾回收器。Java具有较好的安全性和健壮性。Java提翻译 2021-09-17 16:24:59 · 203 阅读 · 0 评论 -
Java开发主流框架是什么?
企业主流框架用什么,也不能一概而论。需要有所划分,市场需求可以分为两种。其一是传统企业开发,其二是互联网企业开发。常用技术有:struts1/2,Spring/mvc/boot/cloud,Hibernate/MyBatis。在此论述的是JavaEE,JavaME另有他论。技术核心原理、理论知识、优点缺点、功能作用等就不再展开描述。一、传统企业开发要求安全、稳定,易于维护。常用于政府机关、企业OA、ERP等管理系统,对于此类型系统常用框架是Struts1/2+Spring+Hibernate/MyBat转载 2021-09-17 09:42:19 · 467 阅读 · 0 评论 -
多线程的几种实现方法
Java多线程的使用有三种方法:继承Thread类、实现Runnable接口和使用Callable和Future创建线程,本文将对这三种方法一一进行介绍。1、继承Thread类实现方式很简单,只需要创建一个类去继承Thread类然后重写run方法,在main方法中调用该类实例对象的start方法即可实现多线程并发。代码:public class MyThread extends Thread {@Overridepublic void run(){super.run();System.out.转载 2021-09-15 20:58:26 · 82 阅读 · 0 评论 -
HashMap 的使用
HashMap 的使用import java.util.*;public class TestHashMap { public static void main(String[] args) { //使用HashMap存储域名和含义键值对的集合 Map domains = new HashMap(); domains.put("com", "工商企业"); domains.put("net", "网络服务商"); domai原创 2021-09-08 22:10:49 · 166 阅读 · 0 评论 -
线程控制的基本方法
程序每次的运行结果可能是不一样的。这是因为多个线程在执行时会抢占 CPU 资源,抢到之后才会执行。而程序员是无法精准控制这种抢夺情况的。尽管如此,Thread 类还提供了一些线程控制方法,虽不能精准控制线程的抢夺情况,但能够帮助我们更好的控制线程。> void start():使该线程开始执行,Java 虚拟机负责调用该线程的 run() 方法。 void sleep(long> millis):静态方法,线程进入阻塞状态,在指定时间(单位为毫秒)到达之后进入就绪状态。 void>原创 2021-09-03 17:08:33 · 1060 阅读 · 0 评论 -
进程和线程
Java多线程机制一个正在运行的程序对于操作系统而言称为进程。程序和进程的关系可以理解为,程序是一段静态的代码,是应用程序执行的蓝本,而进程是指一个正在内存中运行的程序,并且有独立的地址空间。线程和进程一样拥有独立的执行路径,二者的区别在于,线程存在于进程中,拥有独立的执行堆栈和程序计数器,但没有独立的存储空间。一个线程会和所属进程中的其他线程共享存储空间。传统的程序,一个进程里只有一个线程,所以也称为单线程程序,而多线程程序是一个进程里拥有多个线程,两者间的结构区别如下图所示:进程和线程:进原创 2021-09-03 17:00:32 · 262 阅读 · 0 评论 -
定义线程的两种方式
创建和使用线程,就是要让这个线程完成一些特定的功能。 Java 提供了 java.lang.Thread 类来完成多线程的编程,这个类也提供了大量的方法方便操作线程。在编写一个线程类时,可以继承自这个 Thread 类,完成线程的相关工作。有时编写的线程类除了继承 Thread 以外还要继承其他类,但 Java 又不支持多继承,所以 Java 还提供了另外一种创建线程的方式,即实现 Runnable 接口。因此,有两种定义线程类的方式——继承 Thread 类和实现 Runnable 接口。如果线程类原创 2021-09-03 16:57:36 · 686 阅读 · 0 评论 -
创建多线程并启动
public class TestThread { public static void main(String[] args) throws InterruptedException { Thread t1 = new MyThread1(); MyThread2 mt2 = new MyThread2(); Thread t2 = new Thread(mt2); t1.start(); t2.start();原创 2021-09-03 16:55:40 · 94 阅读 · 0 评论 -
Java反射机制
Java反射机制运行时动态地获取类的信息以及动态地调用对象的方法,叫做反射。Java 反射(Reflection)是指 Java 程序在运行时,可以动态的加载、探知、使用编译期间完全未知的类。也就是说,Java 程序可以加载一个运行时才得知类名的类,获得类的完整构造方法,并实例化出对象,给对象属性设定值或者调用对象的方法等。这种在运行时动态获取类的信息以及动态调用对象方法的功能称为 Java 反射机制。无论生成某类的多少个对象,这些对象都会对应于同一个class。Class,Field,Method原创 2021-09-03 16:54:56 · 135 阅读 · 0 评论 -
字节流和字符流
流是对 I/O 操作的形象描述,水从一个地方转移到另一个地方就形成了水流,而信息从一处转移到另一处就叫做 I/O 流。在 Java 中,文件的输入和输出是通过流(Stream)来实现的,流的概念源于 UNIX 中管道(pipe)的概念。在 UNIX 系统中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备、外部文件等。一个流,必有源端和目的端,它们可以是计算机内存的某些区域,也可以是磁盘文件,甚至可以是 Internet 上的某个 URL。对于流而言,不用关心数据是如何传输的,只需要原创 2021-09-03 15:18:18 · 904 阅读 · 0 评论 -
PrintWriter
PrintWriter的使用java.io.PrintWriter具有自动行刷新的缓冲字符输出流,特点是可以按行写出字符串,并且可以自动行刷新。java.io.BufferedWriter是缓冲字符输出流,内部有缓冲区可以进行块写操作提供效率,而PrintWriter就是通过连接它实现的缓冲功能(PW的很多构造方法内部自动连接它)。PW支持两个直接对文件写操作的构造方法:PrintWriter(File f)传文件名PrintWriter(String s)传路径以上两种方法都支持一个重转载 2021-09-03 15:10:08 · 428 阅读 · 0 评论 -
判断回文字符串
```javaimport java.util.Scanner;public class Palindrome { public static void main(String[] args) { // 创建一个控制台输入对象 Scanner sc = new Scanner(System.in); System.out.println("请输入一个字符串:"); // 从控制台接收字符串 String str .原创 2021-09-02 21:06:13 · 51 阅读 · 0 评论 -
正则表达式
正则表达式定义了字符串的模式,它可以用来搜索、编辑和处理文本。并且正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。正则表达式匹配规则:模式描述\w匹配字母、数字、下划线\s匹配任意空白字符,相当于[\t\n\r\f]\S匹配任意非空字符\d匹配任意数字,相当于[0-9]\D匹配非数字的字符\A匹配字符串开头\Z匹配字符串结尾,如果存在换行,只匹配到换行前的结束字符串\z匹配字符串结尾,如果存在换行,同时还会匹配换原创 2021-09-02 21:05:12 · 55 阅读 · 0 评论 -
四种访问权限修饰符
对于类的成员(属性和方法)而言,4 种访问权限修饰符都可以使用。下面按照权限从小到大的顺序(即 private < default < protected < public)对四种访问权限修饰符分别进行介绍。私有权限 privateprivate 可以修饰属性、构造方法、普通方法。被 private 修饰的类成员只能在定义它们的类中使用,在其他类中都不能访问。在第 6 章介绍封装的时候,已经使用了 private 这个访问权限修饰符。对于封装良好的程序而言,一般将属性私有化,提供公有原创 2021-09-02 21:02:51 · 3248 阅读 · 0 评论 -
Java中的抽象类
抽象类不能被直接实例化抽象类中可以包含着抽象方法,而抽象方法是没有方法体的。因此如果将一个抽象类进行实例化,然后调用其中的抽象方法,会是一种无意义的方法调用。试想,new Person().eat() 方法的运行结果有何意义?所以,为了避免这种无意义的方法调用,在语法上抽象类是不能被直接实例化的。抽象类的子类必须实现抽象方法(除非这个子类也是抽象类)抽象类是以父类的形式出现的,是对子类的规约,要求子类必须实现抽象父类的抽象方法。抽象类里可以有普通方法,也可以有抽象方法,但是有抽象方法的类必.原创 2021-09-02 20:58:57 · 70 阅读 · 0 评论 -
Java中的继承
继承作为面向对象的三大特性之一,有着非常重要的地位。使用继承可以大大减少冗余代码,提高代码的复用性。继承可以使得子类沿用父类的成员(属性和方法)。当多个子类具有相同的成员时,就可以考虑将这些成员提取出来,放到父类中,然后再用子类去继承这个父类,也就是将一些相同的成员提取到了更高的层次中。继承的关键字是 extends,语法形式如下。class A extends B{ 类定义部分}以上表示 A 类继承 B 类,B 类称为父类、超类或基类;A 类称为子类、衍生类或导出类。不能继承的两种情原创 2021-09-02 20:51:44 · 96 阅读 · 0 评论 -
抽象类和封装
抽象,实际上是一个分析的过程,是根据需求的表述归纳实体的类型、属性和行为,其产出物是类图。类图勾勒了实体应该具备哪些属性和行为,但未涉及细节。而封装,实则就是将抽象得到的模型转变为具体实现。它的要点是,尽可能对外隐藏细节,Java 中的手段就是使用 private,所以在上述案例中所有的属性都是 private。但是否简单粗暴地为所有属性提供 getter 和 setter 呢?不建议这样做,因为这样做和将属性定义为 public 没有区别。封装的关键是,根据业务进行分析,有的属性不能修改则不提供 set原创 2021-09-02 20:43:29 · 403 阅读 · 0 评论 -
super关键字
super() 可以调用父类的构造方法。但此时,必须将 super()写在子类构造方法的第一行,其语法形式如下。super( [参数列表] )例如下面的程序中的 super(name),就表示调用了父类 Vehicle 中有一个 String 参数的构造方法。public class Car extends Vehicle { private String brand = "红旗"; public Car(String name, String brand) { s原创 2021-09-02 20:40:26 · 47 阅读 · 0 评论 -
Servlet3.0新特性
@WebServlet 用于将一个类声明为 Servlet,该注解将会在部署时被容器处理,容器将根据具体的属性配置将相应的类部署为 Servlet。原创 2021-08-26 16:28:50 · 48 阅读 · 0 评论 -
Tomcat的Classpath-常见问题以及如何解决
在很多Apache Tomcat用户论坛,一个问题经常被提出,那就是如何配置Tomcat的classpath,使得一个web应用程序能够找到类或者jar文件,从而可以正常工作。 就像许多困扰Tomcat新用户的问题一样,这个问题也很容易解决。 在这篇文章中,我们将会介绍Tomcat是如何产生和利用classpath的,然后一个一个解决大多数常见的与classpath相关的问题。为什么Classpaths给Tomcat用户带来了麻烦一个classpath就是一个参数,来告诉java虚拟机在哪里可以找到类和翻译 2021-08-26 16:06:58 · 1191 阅读 · 0 评论