
Java
文章平均质量分 52
Java的学习笔记及心得
一眉程序猿
漫步在Java路上的小菜鸡一枚,欢迎各路大佬指教
展开
-
SpringBoot实现过滤器
SpringBoot实现过滤器的三种方式以及设置其执行顺序原创 2022-06-29 11:27:02 · 587 阅读 · 0 评论 -
SpringBoot启动时加载
SpringBoot启动时加载的方式原创 2022-06-28 15:30:14 · 2309 阅读 · 0 评论 -
Cglib代理-代码增强测试
cglib实现Java方法的增强原创 2022-06-20 16:14:41 · 262 阅读 · 0 评论 -
JDK动态代理-代码增强测试
Java不破坏原有接口实现方法逻辑的前提下,实现对其方法的增强。原创 2022-06-20 15:26:20 · 198 阅读 · 0 评论 -
SpringBoot设置全局Json请求响应的日期格式化
针对场景优化SpringBoot项目中实体类的日期属性使用相同的格式化注解的问题。避免注解的重复性编写@JsonFormat(pattern = “yyyy-MM-dd HH:mm:ss”)解决方案添加配置类:import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeser原创 2022-05-17 16:28:10 · 1044 阅读 · 0 评论 -
Java常见类-Object
ObjectObject是Java中所有对象的基类,任何类都和它有着直接或者间接的关系。学习Java,必然要了解该类,及其的方法。hashCodehashCode()是获取类对象的哈希值码,哈希值是该对象的地址码通过哈希算法计算出来的一个值,该值和地址有关,但并不是实际的地址。在源码中该方法如下:public native int hashCode();我们看不到方法体,因为它是调用...原创 2020-04-13 23:07:51 · 275 阅读 · 0 评论 -
Java-实现邮件发送(详细演示)附个人封装工具类代码
邮件发送JavaMail是SUN提供给开发人员在应用程序中实现邮件发送和接收功能而提供的一套标准开发类库,支持常用的邮件协议,如SMTP、POP3、IMAP,开发人员使用JavaMail编写邮件程序时,无需考虑底层的通信细节(Socket),JavaMail也提供了能够创建出各种复杂MIME格式的邮件内容的API。...原创 2020-03-04 17:00:13 · 577 阅读 · 0 评论 -
数据库连接池DBCP和C3P0的简单使用
由于数据库的连接和释放,都是十分浪费资源的,针对这种情况,我们的前辈就提出了池化技术。池化技术:预先准备好一些资源放在某个容器中(理解为池子),需要的时候就从该容器中取出某个资源,使用完毕后再将该资源放回这个容器中。数据库连接池,我们可以理解为存放数据库连接的容器,所有Java的数据库连接池都需要实现Java的java.sql.DataSource接口,这也是Java提出的一种规范。博主这里...原创 2020-02-21 17:10:09 · 525 阅读 · 0 评论 -
JDBC-操作事务简单程序
JDBC操作事务简单程序还是先准备好数据库:-- 选择数据库USE `test02`;-- 建表CREATE TABLE `account` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键', `username` varchar(30) NOT NULL COMMENT '用户名', `money` decimal(6...原创 2020-02-21 09:12:09 · 167 阅读 · 0 评论 -
JDBC-操作对象解释
DriverDriver(com.mysql.jdbc.Driver):这个就是mysql数据库对Java提出的JDBC的实现,在使用Java操作mysql数据库时,第一步就需要先加载该对象,有了驱动支持,才能做后续操作。现在我们加载驱动一般都是使用Class.forName("com.mysql.jdbc.Driver");,以往都是采用DriverManager.registerDrive...原创 2020-02-20 22:38:26 · 312 阅读 · 0 评论 -
JDBC简介(解释+代码演示)
JDBCJDBC:Java数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。任何应用程序都不能直接对数据库进行操作,它们都要依赖于驱动,但是每个不同的数据库都有着不同的驱动,SUN公司为了简化开发人员对数据库的统一操作,于是提出了一个Java操作数据库的规...原创 2020-02-20 13:59:39 · 288 阅读 · 0 评论 -
Java基础-反射(学习笔记)
反射反射(Reflection)是Java被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。在加载完类之后,在堆内存的方法去中就产生了一个Class类型的对象(一个类只有一个Class对象),这个对象就包含了完整的类的结构信息,我们可以通过这个对象看到类的结构,这个对象就像一面镜子,透过这个镜子看到这个类...原创 2020-02-13 22:32:57 · 227 阅读 · 0 评论 -
Java基础-注解
注解注解(Annotation)是从JDK1.5开始引入的新技术。注解的作用:注解不是程序本身,但是它能对程序作出解释(可以理解类似于注释)。注解可以被其他程序读取,比如可以被编译器读取。注解可以检查和约束程序。注解的格式:@注解名,它还能添加参数@注解名(参数=值),例如@SuppressWarnings(value="all"),它就是一个镇压警告的注解。注解的使用位置:...原创 2020-02-10 20:52:28 · 167 阅读 · 0 评论 -
Java基础-线程通信(生产者消费者问题)
线程通信线程通信,就是线程之间的通信。生产者和消费者问题是典型的线程通信的问题:假设仓库中只能存放一件产品,生产者将生产出来的产品放入仓库,消费者将仓库中的产品取走消费。如果仓库中没有产品,则生产者将生产产品并放入仓库,否则停止生产并等待,直到仓库中的产品被消费者取走为止。如果仓库中放有产品,则消费者可以将产品取走消费,否则停止消费并等待,直到仓库中再次放入产品为止。这是一个典型...原创 2020-02-10 15:27:09 · 643 阅读 · 0 评论 -
Java基础-线程同步和死锁问题
线程同步并发:同一个对象被多个线程同时操作。在处理多线程的问题时,可能会存在多个线程访问并操作同一个对象资源,这时我们就需要线程同步,避免一些安全问题。线程同步其实就是一种等待机制,多个需要同时访问操作同一个对象的线程会进入这个对象的等待池中形成队列,等待前面线程使用完毕,再进行使用操作。线程同步就是处理并发的问题。在这个等待池中,一次就只能有一个线程对该对象进行访问操作,其他线程都需要...原创 2020-02-10 12:23:02 · 299 阅读 · 1 评论 -
Java基础-线程状态
线程状态线程有五种状态,分别是新生状态、就绪状态、运行状态、阻塞状态和死亡状态。新生状态:线程对象一旦创建就立即进入新生状态。就绪状态:当线程对象调用start()方法时,线程进入就绪状态(这里并不意味着线程就能立即调度执行),这时的线程等待CPU调度。运行状态:当线程进入运行状态是,线程才真正开始执行对应的代码。阻塞状态:当线程对象调用sleep()、wait()、或者同步锁定时,...原创 2020-02-09 17:43:20 · 258 阅读 · 0 评论 -
Java基础-Lambda表达式
Lambda表达式Lambda表达式是JDK1.8之后的新特性,它的出现就是为了避免匿名内部类的定义,它属于函数式编程的概念。函数式接口(Functional Interface)是Java8 Lamda表达式的关键。函数式接口的定义:任何接口,如果只含有唯一一个抽象方法,它就是一个函数式接口。对于函数式接口,我们可以通过lambda表达式来简化创建它的匿名实现内部类。public...原创 2020-02-09 13:47:05 · 131 阅读 · 0 评论 -
Java基础-多线程简介
多线程多线程,顾名思义,就是多个线程。在生活中也很常见,比如我们一边听歌一边做作业,一边还干其他什么事情,就是同时执行多个任务,就是多线程的概念。线程可以构成进程,通常在一个进程中可以包含若干个线程,当然一个进程中至少有一个线程,不然进程就没有存在的意义了。线程是CPU调度和执行的单位。进程是执行程序的一次执行过程,它是一个动态的概念,是系统资源分配的单位。程序是指令和数据的...原创 2020-02-09 12:29:59 · 134 阅读 · 0 评论 -
Java基础-异常机制
异常机制异常是程序执行时发生的一些错误,但并不是所有的错误都是异常,而且错误有时候是可以避免的。在程序运行中,可能会出现一些非正常的状况,比如文件找不到、网络连接失败、传递参数非法和内存溢出…等各种影响程序正常执行的情况,都叫做异常。System.out.println(10/0);比如上面代码,我们执行的时候就会出现异常,java.lang.ArithmeticException: / b...原创 2020-02-08 14:36:51 · 114 阅读 · 0 评论 -
Java基础-抽象类和接口
抽象类abstract:抽取;在Java中,abstract表示抽象。如果一个类被abstract所修饰,这个类就是一个抽象类。如果一个方法被abstract所修饰,这个方法就是一个抽象方法,而且抽象方法是没有方法体的。//抽象类public abstract class Action { //抽象方法 public abstract void doSomething...原创 2020-02-07 15:41:02 · 704 阅读 · 0 评论 -
Java基础-面向对象
面向对象说到面向对象,就不得不提到面向过程,两者都是编写程序的思想,并不相互对立,博主认为,面向对象是面向过程的升级。面向过程:面向过程的思路清晰简单,步骤明确,哪一步做什么都比较详细。面向过程适合处理一些较为简单的问题。当使用面向过程的思想编写复杂问题的时候,代码量不仅大,对后期的维护更为困难,这就是其弊端。面向对象:面向对象可以说是面向过程的分类管理,更适合人类的思...原创 2020-02-07 13:46:29 · 122 阅读 · 0 评论 -
Java基础-面向对象-多态
多态多态就是同一个方法可以根据发送对象的不同采取多种不同的行为方式。一个对象的实际类型是确定的,但是它能指向的引用类型有很多,它能够被它的父类(直接父类和间接父类)所接收。多态存在的条件:有继承关系。子类重写父类方法。父类引用指向子类对象。父类Personpublic class Person { //父类打印方法 public void print() { ...原创 2020-02-07 13:45:18 · 176 阅读 · 0 评论 -
Java基础-面向对象-继承
继承继承的本质是对某一批类的抽象,从而实现对现实直接更好的建模,继承是Java面向对象编程的一个基础,可通过继承来创建分等级层次的类。继承就是子类继承父类的行为和特征,使得子类实例化对象具有父类的能被继承的属性和方法,使得子类具有与父类相同的行为和特征。从上面的图中可以看出,牛是一个动物类,动物类是一个生物类的范畴。这也就说明了继承所需要符合的关系:is a,通过继承,我们可以将父类抽象的...原创 2020-02-07 13:44:55 · 137 阅读 · 0 评论 -
Java基础-面向对象-封装
封装在面向对象的程序设计方法中,封装是一种“隐藏”的方式。我们在设计程序的时候,一定要追求“高内聚,低耦合”。高内聚:就是类的内部数据操作细节自己完成,不允许外部干涉。低耦合:只是暴露方法供外部使用。封装就是一种保护屏障,防止该类的代码和数据被外部类定义的代码随机访问,通过封装,外部类就只能访问其暴露出来的接口方法,从而有效的隐蔽了其实现细节,适当的封装让代码的理解和维护变得更容易,...原创 2020-02-07 13:44:21 · 134 阅读 · 0 评论 -
Java基础-多维数组
多维数组多维数组可以看做是数组的数组。比如二维数组,它就是一个特殊的一维数组,这个一维数组的每个元素又是一个一维数组。int[][] a = new int[2][5];比如上面这个二维数组,它就是一个特殊的一维数组,这个特殊的一维数组长度为2,它的两个元素又是一个一维数组,其长度为5。三维数组也是一个特殊的一维数组,它的元素都是二维数组。四维数组也是一个特殊的一维数组,它的元素都是...原创 2020-02-05 19:33:24 · 812 阅读 · 0 评论 -
Java基础-方法-递归
先来一个小故事:从前有座山,山里有座庙,庙里有个老和尚和一个小和尚,老和尚给小和尚在讲故事,讲的就是:从前有座山,山里有座庙,庙里有个老和尚和一个小和尚,老和尚给小和尚在讲故事,讲的就是:从前有座山,山里有座庙,庙里有个老和尚和一个小和尚,老和尚给小和尚在讲故事,讲的就是:…递归递归就是方法自己调用自己,就是在自身的方法体中再调用自己。public void method(){ me...原创 2020-02-05 19:31:35 · 190 阅读 · 0 评论 -
Java基础-方法
方法Java方法是解决一类问题的步骤的有序组合,它存在于类或者对象中,在程序中被创建,可以在其他地方被引用。通俗来讲,它就是用来处理问题的,类似于其他编程语言中的函数,就是用来完成特定功能的代码片段。设计方法的原则:尽量保持方法的原子性,就是说一个方法只完成一个功能,这样有利于我们后期的维护与扩展。方法的定义方法结构如下:修饰符 返回值类型 方法名(参数类型 参数名){ ... 方...原创 2020-02-05 19:28:14 · 168 阅读 · 0 评论 -
Java基础-方法-可变参数
可变参数顾名思义,就是可以变化的参数,在Java中的可变参数,特指参数的个数是可变的,但是需要是同类型。从JDK1.5开始,Java支持传递同类型的可变参数给一个方法,在方法声明中,在指定参数类型后面加一个省略号...。我们在使用可变参数时,一定要注意,一个方法中只能指定一个可变参数,而且它必须是方法的最后一个参数,任何普通的参数都必须在它之前声明。还是举例说明吧,比如要求我们定义一个方法...原创 2020-02-05 19:23:31 · 237 阅读 · 0 评论 -
Java基础-修饰符
修饰符修饰符是用来修饰类、成员变量和方法的,它通常放在语句的最前面。类:修饰符 class 类名{}成员变量:修饰符 变量类型 变量名 = 变量值;方法:修饰符 方法返回值类型 方法名(参数列表){}Java提供了很多的修饰符,主要分为控制访问的修饰符和非控制访问的修饰符。控制访问的修饰符Java中,可以使用控制访问的修饰符来控制其访问权限,从而实现对类、成员变量和方法访问的保护...原创 2020-02-05 19:08:34 · 2807 阅读 · 1 评论 -
Java-数组-稀疏数组
稀疏数组当一个数组中,存有大量的无效数据时,比如大部分元素都是0,或者为同一值的数组时,就可以使用稀疏数组来压缩该数组。稀疏数组就可以看做是有大量无效数据数组的压缩版。稀疏数组的处理方式:记录数组一共有几行几列,有多少个不同的值把具有不同值(有效数据)元素的行数,列数及其值记录在一个小规模的数组通过上述方式来减少存储量,从而实现数组的压缩。比如下面这个10*10的二维数组:我们...原创 2020-02-04 15:55:33 · 228 阅读 · 0 评论 -
Java基础-数组工具类Arrays
Arrays类java.util.Arrays类是数组的工具类。数组对象本身没有什么方法可以供我们调用,但是Java的API中为我们提供了一个工具类Arrays供我们使用,它可以对数组对象进行一些基本的操作。Arrays类中的方法都是有static关键字修饰的静态方法,在使用的时候可以直接使用类名进行调用。...原创 2020-02-04 13:42:28 · 315 阅读 · 0 评论 -
Java基础-数据结构-数组
数组数组:相同类型数据的有序集合。我们理解为一组相同类型的数据即可。数组描述的是相同类型的若干个数据,并且按照一定的先后顺序组合而成,其中每一个数据被称作一个数组元素,每个数组元素可以通过一个下标来访问它。数组的声明我们在使用数组之前,必须先声明数组变量,后续才能在程序中使用它。声明数组变量名的两种方式:dataType[] arrayReVar;dataType arrayReV...原创 2020-02-03 15:10:56 · 194 阅读 · 0 评论 -
Java代码-打印三角形
要求,按照输入数,打印对应行数的*三角形:我们还是先分析,第一行打印1个*,然后就是3,5,…,2n-1,我们就发现了*的规律,然后就是空格的数量变化。我们通过上图也能看出空格的数量变化4,3,2,1,0,我们能明显发现第n行的空格是打印总行数-n个。接下来我们用代码将其完善:获取输入行数count。打印count行。打印第n行的空格,count-n个。打印第n行的*号,2n-...原创 2020-02-01 20:09:46 · 1014 阅读 · 0 评论 -
Java代码-打印九九乘法表
要求,打印如下图:我们先来对其分析,一共打印九行,规律是第n行打印n个算式,其算式分别是1~n与n相乘的算式。我们一步一步对其完成。打印九行第n行打印n个算式第n行的第m个算式为m*n=mn代码如下://打印九九乘法表//1.打印九行for (int i = 1; i <= 9; i++) { //2.第n行打印n个算式 for (int j = 1...原创 2020-02-01 19:28:50 · 4221 阅读 · 0 评论 -
Java基础-break continue goto关键字
breakbreak在任何循环的主体部分中均可控制循环的流程,break用于强制退出循环,在循环语句中,一旦执行到break,直接结束循环的执行。break也在switch中使用,用于跳出switch语句。int i = 0;while (i < 100) { i++; if (i == 10) { break; } System.ou...原创 2020-02-01 17:29:54 · 550 阅读 · 0 评论 -
Java基础-IDEA反编译
我们都知道,Java程序是我们编写的代码经过编译变成class可执行文件,反编译就是其逆向过程,就是将可执行的class文件反编译为代码的过程。关于反编译,网上也有很多的工具,博主在此介绍一下idea反编译。准备需要反编译的class文件。博主这里随便找了一个根据输入求均值的例子。源代码如下:import java.util.Scanner;//通过获取键盘输入的数据,每输入一个数字用回...原创 2020-02-01 15:11:44 · 8614 阅读 · 2 评论 -
Java基础-结构化程序设计
结构化程设计结构化程序设计的原则可表示为:程序=(算法)+(数据结构)。结构化程序设计的三种基本结构是:顺序结构、选择结构和循环结构。顺序结构顺序结构表示程序中的各操作是按照它们出现的先后顺序执行的。Java的基本结构就是顺序结构,除非特别指明,否则就都按照先后顺序一句一句执行,它是最简单的算法结构。语句与语句之间都是按照从上到下的顺序进行的,它是由若干个依次执行的处理步骤组成的,顺...原创 2020-02-01 14:39:55 · 2061 阅读 · 0 评论 -
Java基础-Scanner类
Scanner类Java为我们提供了一个Scanner工具类,我们可以使用其获取用户的输入,java.util.Scanner是Java5的新特性,我们可以通过Scanner类来获取用户的输入。创建Scanner对象的基本语法为:Scanner scanner = new Scanner(System.in);我们可以通过Scanner类的next()和nextLine()方法来获取输入的...原创 2020-01-29 21:37:28 · 182 阅读 · 0 评论 -
Java基础-JavaDoc文档生成
使用JavaDoc生成文档,就一定要写出代码的文档注释,关于注释的文章可以查看博主关于Java注释的文章。下面列举博主觉得常用的一些文档注释标签:标签作用@author标志编写的作者@exception标志抛出的异常@param说明一个方法的参数@return说明方法的返回值类型@since说明该程序的JDK开始版本@throws和...原创 2020-01-29 20:09:12 · 2960 阅读 · 0 评论 -
Java基础-包机制
包机制在Java中,为了更好的组织类,Java提供了包机制,用于区别类名的命名空间。它的语法格式为:package package1[.package2[.package3...]];在正式的开发中,一般都采用公司域名倒置来作为包名,比如,www.baidu.com,在开发中,一般就会使用com.baidu.XXX来分包,比如博主完成学校期末项目时,采用的分包如下:我们使用包机制将其具体...原创 2020-01-29 17:13:26 · 744 阅读 · 1 评论