![](https://img-blog.csdnimg.cn/2019092715111047.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java
文章平均质量分 58
Ilqjx
当下很忧郁啊
展开
-
SpringBoot Rest使用与原理
SpringBoot Rest使用与原理1、Rest使用2、Rest原理1、Rest使用1、表单method=post、隐藏域_method=put/delete(不区分大小写)2、SpringBoot手动开启spring: mvc: hiddenmethod: filter: enabled: true2、Rest原理核心Filter:HiddenHttpMethodFilterprotected void doFilterInternal(Http原创 2021-05-13 21:42:33 · 183 阅读 · 0 评论 -
SpringBoot静态资源配置原理
SpringBoot静态资源配置原理1、WebMvcAutoConfiguration2、WebMvcAutoConfigurationAdapter2.1、WebMvcAutoConfigurationAdapter构造器3、资源处理的默认规则4、欢迎页的处理规则5、favicon1、WebMvcAutoConfigurationSpringBoot启动默认加载xxxAutoConfiguration(自动配置类)WebMvcAutoConfiguration:SpringMVC功能的自动配置类p原创 2021-05-13 20:55:11 · 97 阅读 · 0 评论 -
@EnableConfigurationProperties注解的作用
@EnableConfigurationProperties注解的作用:让使用@ConfigurationProperties注解的类生效,并将该类注入到IOC容器中。@ConfigurationProperties的作用:将配置文件中的相关属性与Java Bean进行动态绑定// 注解作用:使WebMvcProperties、ResourceProperties、ResourceProperties上标注的@ConfigurationProperties注解生效,并将其注入到IOC容器中@Enabl原创 2021-05-13 20:21:34 · 856 阅读 · 0 评论 -
简单分析Spring MVC源码
简单分析Spring MVC源码一、DispatcherServlet的继承关系二、DispatcherServlet收到请求的一个大致流程三、测试代码1、springmvc.xml2、success.jsp3、HelloController四、确定目标方法和目标页面的调用位置1、DispatcherServlet#doDispatch源码2、目标方法和目标页面的调用位置五、分析DispatcherServlet#doDispatch1、分析2、小总结六、细节分析1、getHandler()细节:如何根据当原创 2021-01-23 11:31:05 · 122 阅读 · 0 评论 -
简单分析spring ioc源码
spring ioc源码分析一、环境搭建1、java bean2、applicationContext.xml3、测试代码二、ioc容器的启动过程1、创建ioc容器2、ClassPathXmlApplicationContext构造器3、refresh()3.1、beanFactory 保存所有 bean 的配置信息3.2、finishBeanFactoryInitialization(beanFactory);4、初始化所有单实例 bean5、创建 bean5.1、getSingleton()5.2、创建原创 2021-01-17 10:29:16 · 98 阅读 · 0 评论 -
模板方法设计模式
模板方法设计模式一.认识模板方法设计模式二.模式结构与实例讲解一.认识模板方法设计模式1.模式定义定义一个操作算法中的框架,而将这些步骤延迟加载到子类中。它的本质就是固定算法框架。2.解决何种问题让父类控制子类方法的调用顺序。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。3.模式好处开发人员在开发时,只需要考虑方法的实现,不需要考虑方法在何种情况下被调用,实现了代码的复用。4.模式适用场景一次性实现一个算法的不变部分,并将可变的行为留给子类来实现。各子类中公共转载 2020-08-08 10:20:16 · 232 阅读 · 0 评论 -
单例模式
单例模式1.概念2.饿汉式单例模式3.懒汉式单例模式1.概念单例模式,就是采取一定的方法保证在整个的软件系统中,某个类只能存在一个对象实例,并且该类只提供一个获取该对象实例的方法。2.饿汉式单例模式public class HungrySingleton { private static HungrySingleton instance = new HungrySingleton(); private HungrySingleton() {} public static Hungr原创 2020-08-04 12:33:34 · 109 阅读 · 0 评论 -
面向对象的特性
目录1.抽象2.封装3.继承4.多态1.抽象抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么。2.封装通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口。可以说,封装就是隐藏一切可隐藏的东西,只对外界提供最简单的编程接口。3.继承继承是从已有类得到继承信息创建新类的过程。提供继承信息的类被称为父类(超类、基类),得到继承信息的类被称为子类(派生类)。4.多态多态是指允许不同子原创 2020-10-09 09:42:37 · 99 阅读 · 0 评论 -
Statement 和 PreparedStatement 的使用
目录一、sql 语句二、获取数据库连接三、Statement四、PreparedStatement一、sql 语句CREATE DATABASE mytest DEFAULT CHARACTER SET UTF8;USE mytest;CREATE TABLE users ( user_id INT(32) PRIMARY KEY, user_name VARCHAR(50) UNIQUE, password VARCHAR(50)) ENGINE = INNODB DEFAULT CH原创 2020-10-22 13:30:31 · 128 阅读 · 0 评论 -
servlet 和 servlet-mapping 中的 servlet-name 需要保持一致
<servlet> <servlet-name>name</servlet-name> <servlet-class>cn.ilqjx.blog.HelloServlet</servlet-class></servlet><servlet-mapping> <servlet-name>name</servlet-name> <url-pattern>/path</url原创 2020-10-09 10:40:19 · 860 阅读 · 0 评论 -
ArrayList和LinkedList的区别
ArrayList底层使用的是数组,LinkedList底层使用的是链表。对于随机访问 get / set,ArrayList 要优于 LinkedList,因为 LinkedList 要移动指针,而 ArrayList 是个数组,直接返回就好了。对于插入、删除的效率就不太好说了对于 ArrayList 而言:插入、删除要移动数据对于 LinkedList 而言:插入、删除要移动指针主要有两个因素决定它们的效率,插入的数据量和插入的位置。其实只要分析一下源码就什么都明白了ArrayList.原创 2020-10-29 21:34:09 · 93 阅读 · 0 评论 -
LinkedList源码分析
目录一、创建一个 LinkedList 的对象二、添加一个元素三、移除一个元素四、插入一个元素一、创建一个 LinkedList 的对象LinkedList list = new LinkedList();当实例化 LinkedList 时,构造器什么也没做。public LinkedList() {}二、添加一个元素LinkedList list = new LinkedList();... // 可能添加很多个元素了list.add(new Object());看一下源码pu原创 2020-10-29 20:45:05 · 77 阅读 · 0 评论 -
ArrayList源码分析
目录一、创建一个 ArrayList 的对象二、添加一个元素三、移除一个元素一、创建一个 ArrayList 的对象ArrayList list = new ArrsyList();当实例化 ArrayList 时,我们看一下构造器内部都做了什么。// transient Object[] elementData;// private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};public ArrayList()原创 2020-10-29 16:06:07 · 156 阅读 · 2 评论 -
IO流
目录一、流的分类二、IO流体系三、缓冲流四、转换流五、对象流一、流的分类按数据流的流向不同分为:输入流、输出流按操作的数据单位不同:字节流、字符流按流的角色不同:节点流、处理流二、IO流体系分类字节输入流字节输出流字符输入流字符输出流抽象基类InputStreamOutputStreamReaderWriter访问文件FileInputStreamFileOutputStreamFileReaderFileWriter访问数组ByteArr原创 2020-10-16 22:17:51 · 74 阅读 · 0 评论 -
为什么外部类能够获取内部类的私有成员
public class Outer { private int x; private class Inner { private int a; private int b; } public void test() { int a = new Outer().new Inner().a; }}在 Outer 类的内部,属性 x 和内部类 Inner 都是 Outer 类的成员,所以说属性 x 和内部类 In原创 2020-10-12 20:13:12 · 169 阅读 · 0 评论 -
为什么Java中子类重写父类方法权限修饰符不能降低
该问题依赖于里氏代换原则, 先记录下该原则的原理。里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。里氏代换原则是对“开-闭”原则的补充。实现“开-闭”原则的关键步骤就是抽象化。而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实转载 2020-10-08 20:32:54 · 2643 阅读 · 0 评论 -
static 关键字
static 关键字1.static 关键字的作用2.static 修饰属性3.static 修饰方法4.static 修饰代码块5.static 修饰内部类6.什么时候使用 static1.static 关键字的作用方便在没有创建对象的情况下来调用属性或方法。static 可以用来修饰属性、方法、代码块、内部类。2.static 修饰属性static 修饰的属性叫静态变量(类变量),随着类的加载而加载,可以通过"类名.静态变量"的方式进行调用,静态变量的加载早于对象的创建。由于类只会加载一次,则原创 2020-10-07 15:24:12 · 213 阅读 · 2 评论 -
HashMap 的底层实现原理(JDK8)
当实例化 HashMap 之后,不会立即创建数组(与JDK7比较),当第一次添加元素的时候才会创建数组,下面代码都为 HashMap(JDK8) 的部分源码。public HashMap() { this.loadFactor = DEFAULT_LOAD_FACTOR;}// resize() 中的部分代码newCap = DEFAULT_INITIAL_CAPACITY; // DEFAULT_INITIAL_CAPACITY = 16Node<K,V>[] newTab =原创 2020-10-04 21:41:43 · 411 阅读 · 3 评论 -
Java ==和equals的区别
==是运算符,既可以比较基本数据类型也可以比较引用数据类型,对于基本数据类型就是比较值,对于引用数据类型就是比较内存地址。equals()方法是在java.lang.Object里定义的。如果没有重写该方法默认也是==。通常情况下,重写equals()方法,会比较类中的相应属性是否相等。...原创 2020-08-10 17:02:35 · 92 阅读 · 0 评论 -
Java final、finally、finalize三者的区别
Java final、finally、finalize三者的区别一.final二.finally三.finalize一.finalfinal可以修饰类、方法和变量。final修饰类表示不可以被继承,但是可以继承其他类。final修饰方法表示方法不可以被重写,但可以继承使用。final修饰变量表示此变量是一个常量。二.finallyfinally作为异常处理的一部分,只能用在try-catch-finally中,表示其中的语句一定会被执行,经常被用在需要释放资源的情况下。在某些特殊情况下转载 2020-08-10 16:48:15 · 129 阅读 · 0 评论 -
Java throw和throws的区别
Java throw和throws的区别1.throw2.throws1.throwthrow 表示抛出一个异常类的对象, 生成异常对象的过程。声明在方法体内。2.throwsthrows 属于异常处理的一种方式,声明在方法的声明处。原创 2020-08-10 15:52:48 · 140 阅读 · 0 评论 -
Java抽象类和接口的异同
Java抽象类和接口的异同一.相同点二.不同点一.相同点抽象类和接口都不能实例化,都可以包含抽象方法。二.不同点1.抽象类使用abstract修饰,接口使用interface修饰。2.抽象类要被子类继承,接口要被类实现。3.抽象类中可以定义属性、方法、构造器、代码块和内部类;在JDK7及以前,接口中只能定义全局常量和抽象方法,在JDK8中,接口中还可以定义静态方法和默认方法,在JDK9中,接口中还可以定义私有方法。4.类是单继承的,接口是多继承的。一个类可以实现多个接口。...原创 2020-08-10 15:28:38 · 165 阅读 · 0 评论 -
Java128陷阱
public class Test { public static void main(String[] args) { Integer i1 = 1; Integer i2 = 1; System.out.println(i1 == i2); // true Integer i3 = -127; Integer i4 = -127; System.out.println(i3 == i4); // true // Integer内部定义了IntegerCache原创 2020-08-02 10:47:10 · 143 阅读 · 0 评论 -
Java基本数据类型、包装类、String类之间的相互转化
Java基本数据类型、包装类、String类之间的相互转化原创 2020-08-02 10:01:08 · 108 阅读 · 0 评论 -
Java引用数据类型的类型转换
Java引用数据类型的类型转换一.向上转型二.向下转型一.向上转型public class Animal {}public class Dog extends Animal {}public class Test { public static void main(String[] args) { // 父类的引用指向子类的对象 Animal animal = new Dog(); // 向上转型 } }二.向下转型public class Animal {}p原创 2020-08-02 09:12:01 · 396 阅读 · 0 评论 -
Java方法重载与方法重写的区别
Java方法重载与方法重写的区别1.方法重载2.方法重写1.方法重载发生在同一个类中,方法名相同,参数列表不同。方法返回类型、权限修饰符不做参考依据。2.方法重写发生在继承类中,方法名相同,参数列表相同。权限修饰符子类重写的方法的权限修饰符不小于父类被重写的方法的权限修饰符。特殊:子类不能重写父类中声明为 private 的方法返回值类型父类被重写的方法的返回值类型是void,则子类重写的方法的返回值类型只能是void。父类被重写的方法的返回值类型是基本数据类型,则子类重写的方法的返回原创 2020-07-31 17:05:11 · 227 阅读 · 0 评论 -
Java权限修饰符
Java权限修饰符1.权限修饰符2.说明1.权限修饰符修饰符类内部同一个包不同包的子类同一个工程privateyes缺省(default)yesyesprotectedyesyesyespublicyesyesyesyes2.说明对于类(class)的权限修饰符只可以用 public 和 default(缺省),public 类可以在任何地方被访问,default 类只可以被同一个包内部的类访问。...原创 2020-07-04 20:50:35 · 302 阅读 · 0 评论 -
Java数组
Java数组1.数组的概述2.一维数组3.二维数组1.数组的概述数组(Array),是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理。数组本身是引用数据类型,而数组中的元素可以是任何数据类型,包括基本数据类型和引用数据类型。创建数组对象会在内存中开辟一整块连续的空间,而数组名中引用的是这块连续空间的首地址。数组的长度一旦确定,就不能修改。可以通过下标(索引)的方式调用指定位置的元素,速度很快。2.一维数组public class Arra原创 2020-06-23 20:38:57 · 264 阅读 · 0 评论 -
Java程序流程控制
Java程序流程控制1.程序流程控制2.顺序结构3.选择结构4.循环结构1.程序流程控制顺序结构选择结构循环结构2.顺序结构程序从上到下逐行的执行,中间没有任何判断和跳转。3.选择结构根据条件,选择性的执行某段代码。有 if-else 和 switch-case 两种分支语句。1.if-elseif (条件表达式1) { // 执行代码块1} else if (条件表达式2) { // 执行代码块2}... // 中间可以有很多 else ifelse { // 执行代原创 2020-06-20 12:23:17 · 252 阅读 · 0 评论 -
Java运算符
Java运算符1.运算符2.算术运算符3.赋值运算符3.关系运算符4.逻辑运算符6.位运算符7.三目运算符1.运算符算术运算符赋值运算符关系运算符逻辑运算符位运算符三目运算符2.算术运算符运算符运算+正号-负号+加-减*乘/除%取模(取余)++自增–自减+字符串连接注意:取模运算(%)结果的符号与被模数的符号相同int m = -12; // 被模数int n = 5; // 模数原创 2020-06-19 12:10:44 · 179 阅读 · 0 评论 -
Java基本数据类型的类型转换
Java基本数据类型的类型转换1.自动类型转换2.强制类型转换1.自动类型转换当表数范围小的数据类型的变量与表数范围大的数据类型的变量做运算时,结果自动转换为表数范围大的数据类型。(表数范围:一个数据类型所能表示数的范围)byte、char、short --> int --> long --> float --> double当byte、char、short三种类型的变量做运算(也包括自己和自己做运算)时,结果为 int 型public class Test { pu原创 2020-06-16 10:47:33 · 128 阅读 · 0 评论 -
Java数据类型
Java数据类型1.Java数据类型包括基本数据类型和引用数据类型1.Java数据类型包括基本数据类型和引用数据类型数据类型基本数据类型数值型整数类型(byte、short、int、long)浮点类型(float、double)字符型(char)布尔型(boolean)引用数据类型...原创 2020-06-16 09:16:14 · 101 阅读 · 0 评论 -
Java定义标识符规则和命名规范
Java定义标识符规则和命名规范1.标识符2.定义合法标识符规则3.Java中的名称命名规范1.标识符Java对各种变量、方法和类等要素命名时使用的字符序列称为标识符。2.定义合法标识符规则1.由26个英文字母(大小写)、数字(0-9)、下划线(_)或美元符号($)组成2.数字不可以开头3.不可以使用关键字和保留字,但是可以包含关键字和保留字4.Java中严格区分大小写,长度无限制5.不能包含空格3.Java中的名称命名规范包名:多单词组成时所有字母都小写,xxxyyyzzz类名、接口原创 2020-06-15 19:52:24 · 775 阅读 · 0 评论 -
Java环境变量配置
Java环境变量配置1.下载JDK2. 配置环境变量1.下载JDK下载地址:1.JDK8 https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html2.JDK14 https://www.oracle.com/java/technologies/javase-jdk14-downloads.html2. 配置环境变量1.打开环境变量窗口此电脑(右键) -> 属性 -> 高级系统设置 -&g原创 2020-06-14 20:25:53 · 116 阅读 · 0 评论