如果您对从零开始学Java之基础语法感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于从零开始学Java之基础语法的详细内容,我们还将为您解答上的相关问题,并且为您提供关于-1
如果您对从零开始学 Java 之 基础语法感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于从零开始学 Java 之 基础语法的详细内容,我们还将为您解答上的相关问题,并且为您提供关于-1-1 java 基础语法 java关键字 java 注释 常量 语句 运算符 函数 数组定义、2. 从零开始学 springboot - 开发环境配置、3. 从零开始学 springboot-IDEA 创建 HelloWord、3.1. 从零开始学 springboot - 记一次 tomcat7 报错的有价值信息。
本文目录一览:- 从零开始学 Java 之 基础语法(上)(零基础学java系列教程)
- -1-1 java 基础语法 java关键字 java 注释 常量 语句 运算符 函数 数组定义
- 2. 从零开始学 springboot - 开发环境配置
- 3. 从零开始学 springboot-IDEA 创建 HelloWord
- 3.1. 从零开始学 springboot - 记一次 tomcat7 报错
从零开始学 Java 之 基础语法(上)(零基础学java系列教程)
今天找到这张图片,我非常喜欢。以后这就是我们「从零开始学 Java 系列」的题图。
上篇文章开始了我的 Java 基础系列之旅,下面应该开始学习 Java 基础语法了。刚开始我学习编程的时候,属于零基础,而且我还是个文科生,所以学习的时候一脸懵逼。现在回过头来看这些知识点,也想不太明白当初为什么要理解那么久。一切技能皆是「熟能生巧」,千万别怀疑自己的智商...
下面开始今天的知识,先看下 Java 基础语法的总纲
今天我们先学习关键字、标识符、注释、常量、进制和进制转换。
一、关键字(不用背,用多了都记得了)
- 关键字概述
被Java语言赋予特定含义的单词
- 关键字特点
组成关键字的字母全部小写
- 关键字注意事项
1、 goto和const作为保留字存在,目前并不使用
2、各种 IDE 针对关键字有特殊的颜色标记,非常直观
二、标识符
1、标识符概述
就是给类,接口,方法,变量等起名字时使用的字符序列
2、组成规则
- 英文大小写字母
- 数字字符
- $和_
3、注意事项
- 不能以数字开头
- 不能是Java中的关键字
- 区分大小写
4、常见的命名规则(见名知意)
命名规则可以重点看《阿里巴巴 Java 开发手册》,如果你还没有,加我为好友,我发给你
三、注释
1、注释概述
用于解释说明程序的文字
2、Java中注释分类格式
- 单行注释
格式: //注释文字
- 多行注释
格式: / 注释文字 /
- 文档注释
格式:/* 注释文字 /
注释是一个程序员必须要有的编程习惯。如果有良好的注释习惯,你的同事很容易就可以读懂你的代码。试想如果你突然接手别人的代码,结果这堆代码一行注释也没有,你自己会不会抓狂?肯定骂娘的心都有了。而且写注释真的耽误不了多少时间,一定要养成写注释的习惯。
四、常量、进制和进制转换
1、常量概述
在程序执行的过程中其值不可以发生改变
2、Java中常量分类
- 字面值常量
- 自定义常量
- 字符串常量(用双引号括起来的内容 "keithxiaoy")
- 整数常量(所有整数 例如:1024)
- 小数常量(所有小数例如:11.11,10.24)
- 字符常量 (用单引号括起来的内容)
- 布尔常量 (true和false)
- 空常量 (null)
3、Java针对整数常量提供了4种表现形式
- 二进制
- 八进制
- 十进制
- 十六进制
4、进制概述
进制:就是进位制,是人们规定的一种进位方法。 对于任何一种进制--X进制,就表示某一位置上的数运算时是逢X进一位。二进制就是逢二进一,八进制是逢八进一,十进制是逢十进一,十六进制是逢十六进一。
5、不同进制的数据组成
五、今日总结
至此「从零开始学习 Java基础语法(上)」已结束。给自己五分钟的时间,复盘下今天这篇文章的内容。我做了一张总的思维导图,供大家回顾今日所学,希望对你们有帮助。
关注「NoBug」公众号,后台点击按钮「加群」,加我为好友。你可以得到一份我精选的 Java 必看电子书,绝对每一本都是经典,每一本都值得一看。我也是从零基础一路走来的,给出的电子书的同时还会告诉这些电子书学习的先后顺序,算是给大家传授一些经验。有些书刚开始看,真的很难理解。
之前有不少读者问,文章中的思维导图是什么工具?我用的工具是「幕布」,这种效果需要高级版。用我下面的邀请链接注册你可以得到15天的高级版,点击左下角「阅读全文」即可注册,欢迎试用。
推荐阅读
从零开始学 Java 之 基础概述
这两天互联网发生的事情
本文原创发布于微信公众号「NoBug」,编程、思维、成长、正能量,关注并回复「编程」、「阅读」、「Java」、「Python」等关键字获取免费学习资料
-1-1 java 基础语法 java关键字 java 注释 常量 语句 运算符 函数 数组定义
Java语言基础组成
关键字 标识符 注释 常量和变量 运算符 语句 函数 数组
关键字
定义:被Java语言赋予了特殊含义的单词
特点:关键字中所有字母都为小写
用于定义数据类型的关键字
class
interface
byte
short
int
long
float
double
char
boolean
void
用于定义数据类型值的关键字
true
false
null
用于定义流程控制的关键字
if
else
switch
case
default
while
do
for
break
continue
return
用于定义访问权限修饰符的关键字
private
protected
public
用于定义类,函数,变量修饰符的关键字
abstract
final
static
synchronized
用于定义类与类之间关系的关键字
extends
implements
用于定义建立实例及引用实例,判断实例的关键字
new
this
super
instanceof
用于异常处理的关键字
try
catch
finally
throw
throws
用于包的关键字
package
import
其他修饰符关键字
native
strictfp
transient
volatile
assert
goto和const作为保留字存在。
标识符
程序中自定义的一些名称,变量名,类名,方法名等
字符/数字/下划线/$/ 组成 不可以使用关键字 不允许以数字开头 严格区分大小写
$为了规范不要使用
规范的形式:
包名:多单词组成时所有字母都小写。
xxxyyyzzz
类名接口名:多单词组成时,所有单词的首字母大写。
XxxYyyZzz
变量名和函数名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写。
xxxYyyZzz
常量名:所有字母都大写。多单词时每个单词用下划线连接。
XXX_YYY_ZZZ
注释
注解说明解释程序的文字就是注释,简单说就是给人看,而不是给机器看的
Java中的注释格式:
•单行注释
•格式: //注释文字
•多行注释
•格式: /* 注释文字 */
•文档注释
•格式:/** 注释文字 */
对于单行和多行注释,被注释的文字,不会被JVM(java虚拟机)解释执行。
对于文档注释,是java特有的注释,其中注释内容可以被JDK提供的工具 javadoc 所解析,
生成一套以网页文件形式体现的该程序的说明文档。
注释是必须要做的,除非你的代码自注释非常好
常量与变量
常量表示不能改变的数值。
Java中常量的分类:
1,整数常量。所有整数
2,小数常量。所有小数
3,布尔(boolean)型常量。较为特有,只有两个数值。true false。
4,字符常量。将一个数字字母或者符号用单引号( '' '' )标识。
5,字符串常量。将一个或者多个字符用双引号(“ ”)标识。
6,null常量。只有一个数值就是:null.
对于整数:有四种表现形式。
•二进制:0,1 ,满2进1.
•八进制:0-7 ,满8进1. 用0开头表示。
•十进制:0-9 ,满10进1.
•十六进制:0-9,A-F,满16进1. 用0x开头表示。
负数的二进制表现形式--对应的正数二进制取反加1
变量的概念:
•内存中的一个存储区域
•该区域有自己的名称(变量名)和类型(数据类型)
•该区域的数据可以在同一类型范围内不断变化
为什么要定义变量:
•用来不断的存放同一类型的常量,并可以重复使用
使用变量注意:
•变量的作用范围(一对{}之间有效)
•初始化值
定义变量的格式:
•数据类型 变量名 = 初始化值;
•注:格式是固定的,记住格式,以不变应万变。
Java语言是强类型语言,对于每一种数据都定义了明确的具体数据类型,在内存总分配了不同大小的内存空间
长整数要加L或者l
单精度的浮点数要加F或者f
char 2个字节 boolean 1个字节
类型转换
自动类型转换/强制类型转换
表达式的数据类型自动提升
•所有的byte型、short型和char的值将被提升到int型。
•如果一个操作数是long型,计算结果就是long型;
•如果一个操作数是float型,计算结果就是float型;
•如果一个操作数是double型,计算结果就是double型。
可以这么理解,double > float > long > 其他
从左到右,有左边的那就没右边的事儿了 其他里面不管是什么,都是int
也就是byte,short,char之间不相互转换,直接转成int类型参与运算
short s=1, s = s+1; 编译不通过 1是int s+1自动提升为int int赋值给short 报错
short s=1, s+=1; +=是一个操作符,不涉及到类型的提升,也可以理解为相当于s = (short)(s + 1)
也就是隐含了自动强制转换
运算符
算术运算符/赋值运算符/比较运算符/逻辑运算符/位运算符/三元运算符
算术运算符
如果对负数取模,可以把模数负号忽略不记,如:5%-2=1 但被模数是负数就另当别论。
换句话说是符号跟%前面的一致
整数之间除号“/” 是取整
“+”除字符串相加功能外,还能把非字符串转换成字符串,如果与字符串+ 可以当做是连接符
赋值运算符
= , +=, -=, *=, /=, %=
右边的赋值给左边变量 X= 运算符的形式aX=b; 等同于 a=aXb; X为+ - * / %
比较运算符
结果只有true或者false 两种
逻辑运算符
逻辑运算符用于连接布尔型表达式 Java中不可以写成1<x<8,应该写成x>1 & x<8 。
或只要有一个为真则为真
与两个都为真才为真
单个的不会短路,也就是无论如何两侧都会计算
双个的会短路 一旦结果可以推断出来,不在继续计算
异或是两个不同才为真
位运算符
直接对二进制进行运算
被移位的二进制最高位是0,右移后,空缺位补0;
最高位是1,空缺位补1。
相同二进制位进行 ^ 运算,结果是0;1^1=0 , 0^0=0
不相同二进制位 ^ 运算结果是1。1^0=1 , 0^1=1
一个数据针对另一个数据位异或两次,该数不变
移位运算可以快速乘除2的N次方
三元运算符
格式
(条件表达式)?表达式1:表达式2;
如果条件为true,运算后的结果是表达式1;
如果条件为false,运算后的结果是表达式2;
运算符的优先级(从高到低)
如果在程序中,要改变运算顺序,可以使用()。
优先级
描述
运算符
1
括号
()、[]
2
正负号
+、-
3
自增自减,非
++、--、!
4
乘除,取余
*、/、%
5
加减
+、-
6
移位运算
<<、>>、>>>
7
大小关系
>、>=、<、<=
8
相等关系
==、!=
9
按位与
&
10
按位异或
^
11
按位或
|
12
逻辑与
&&
13
逻辑或
||
14
条件运算
?:
15
赋值运算
=、+=、-=、*=、/=、%=
16
位赋值运算
&=、|=、<<=、>>=、>>>=
语句
顺序结构/选择结构(分支结构/判断结构)/循环结构
顺序结构
顺序就是自上而下按照顺序执行语句
选择结构
if语句
三种形式:
if(条件表达式){
执行语句;
}
if(条件表达式){
执行语句;
}else {
执行语句;
}
if(条件表达式){
执行语句;
}
else if (条件表达式){
执行语句;
}
……
else {
执行语句;
}
if语句控制的语句体如果是一条语句,是可以省略大括号的;如果是多条,不能省略
建议永远不要省略
switch语句
格式:
switch(表达式)
{
case 取值1:
执行语句;
break;
case 取值2:
执行语句;
break;
…...
default:
执行语句;
break;
}
switch语句选择的类型:byte,short,int , char JDK5增加枚举 JDK7增加String
case后面只能是常量,不能是变量,而且,多个case后面的值不能出现相同的
case之间与default没有顺序。先执行第一个case,没有匹配的case执行default。
结束switch语句的两种情况: 遇到break,执行到switch语句结束
如果匹配的case或者default没有对应的break,那么程序会继续向下执行,运行可以执行的语句,直到遇到break或者switch结尾结束。
default可以省略,但是最好不要,除非你很确定结果
循环结构
while(条件表达式)
{
执行语句;
}
do while语句格式:
do
{
执行语句;
}while(条件表达式);
do while特点:是条件无论是否满足,循环体至少执行一次。
for
for(初始化表达式;循环条件表达式;循环后的操作表达式)
{
执行语句;(循环体)
}
先执行初始化表达式,然后就是判断条件,操作,判断条件,操作.....
与这种while等价:
初始化语句;
while(判断条件语句) {
循环体语句;
控制条件语句;
}
虽然形式上可以互换,但是for中的变量结束后消亡,while中继续存活
for更适合个数有限的 while更适合次数不明的
while(true) for(;;),无限循环
优先考虑for
break(跳出), continue(继续) return 返回退出方法
break语句:应用范围:选择结构和循环结构。 中断当前
continue语句:应用于循环结构。 跳出当次循环继续执行
break continue还可以带标签 没有什么必要用
函数
什么是函数?
函数就是定义在类中的具有特定功能的一段独立小程序。
函数也称为方法。
函数的格式:
修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,...)
{
执行语句;
return 返回值;
}
返回值类型:函数运行后的结果的数据类型。
参数类型:是形式参数的数据类型。
形式参数:是一个变量,用于存储调用函数时传递给函数的实际参数。
实际参数:传递给形式参数的具体数值。
return:用于返回结束函数。
返回值:该函数运算后的结果,该结果会返回给调用者。
函数特点
定义函数可以将功能代码进行封装
便于对该功能进行复用
函数只有被调用才会被执行
函数的出现提高了代码的复用性
对于函数没有具体返回值的情况,返回值类型用关键字void表示,
那么该函数中的return语句如果在最后一行可以省略不写。
注意:
函数中只能调用函数,不可以在函数内部定义函数。
定义函数时,函数的结果应该返回给调用者,交由调用者处理。
方法重载 overload
在同一个类中,允许存在一个以上的同名函数,只要它们的参数个数或者参数类型不同即可。
与返回值类型无关,只看参数列表。
数组
数组是存储同一种数据类型多个元素的集合。也可以看成是一个容器。
数组既可以存储基本数据类型,也可以存储引用数据类型。
格式1:
元素类型[] 数组名 = new 元素类型[元素个数或数组长度];
示例:int[] arr = new int[5];
格式2:
元素类型[] 数组名 = new 元素类型[]{元素,元素,……};
int[] arr = new int[]{3,5,1,7};
int[] arr = {3,5,1,7};
多维数组
格式1
•数据类型[][] 变量名 = new 数据类型[m][n];
•m表示这个二维数组有多少个一维数组
•n表示每一个一维数组的元素个数
•举例:
•int[][] arr = new int[3][2];
•定义了一个二维数组arr
•这个二维数组有3个一维数组,名称是arr[0],arr[1],arr[2]
•每个一维数组有2个元素,可以通过arr[m][n]来获取
•表示获取第m+1个一维数组的第n+1个元素
格式2
•数据类型[][] 变量名 = new 数据类型[m][];
•m表示这个二维数组有多少个一维数组
•这一次没有直接给出一维数组的元素个数,可以动态的给出。
•举例:
•int[][] arr = new int[3][];
•arr[0] = new int[2];
•arr[1] = new int[3]
•arr[2] = new int[1];
格式3
•数据类型[][] 变量名 = new 数据类型[][]{{元素…},{元素…},{元素…}};
•简化版格式:
•数据类型[][] 变量名 = {{元素…},{元素…},{元素…}};
•举例:
•int[][] arr = {{1,2,3},{4,6},{6}};
还有多维数组
int[][][][][][][] arr = new int[8][7][6][5][4][3][2];
其实不管多少维数组,都是二维数组 只不过是嵌套了多层,都是数组的数组,数组的元素仍旧是数组
2. 从零开始学 springboot - 开发环境配置
前言
码农第一站,不是享誉世界的 “helloworld”,而是配置开发环境!接下来我们就来配置瓜娃子的开发环境。
先看下作者的环境 win10
jdk-8u192
apache-tomcat-7.0.92 (追求新版的也可以装 9.0,作者两个都装了)
apache-maven-3.6.0
IDE : IntelliJ IDEA
看完配置,老码农是不是想推荐我用 Eclipse?
jdk 安装及配置
下载 jdk-8u192 安装包,最好 1.8+,低版本的就不要了。 这边补充下,JDK8 后续的 update 从 2019 年 1 月开始就要收费,所以商用的话注意。8u191, 8u192 这种形式的就是升级版,不过 8u192 属于 2018 年最后一个更新,所以免费。 一路 next 安装即可
安装完成后设置环境变量 打开环境变量设置(win10:控制面板 -> 系统 -> 高级系统设置)
设置环境变量 (值注意替换为你自己 jdk 的安装路径):
- 新增 JAVA_HOME, 值为
C:\Program Files\Java\jdk1.8.0_192
- 新增 CLASSPATH, 值为
.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
- 编辑 PATH, 追加
C:\Program Files\Java\jdk1.8.0_192\bin
- 打开 cmd, 输入 java -version 测试
maven 介绍
maven 是什么?用过的都有这样的感觉
下面给大伙科普下日狗是…… 不对,maven 是什么。
Maven 是基于项目对象模型 (POM project object model),可以通过一小段描述信息(配置)来管理项目的构建,报告和文档的软件项目管理工具。
如果你有使用过 node.js 或者 php 的话,那么它其实和 npm 或 composer 干着同样的事,管理包和依赖。
maven 安装
http://maven.apache.org/download.cgi 下载 apache-maven-3.6.0-bin.zip,解压到任意目录即可(我这边直接放到了 C 盘下,目录为 C:\maven) 安装后配置环境变量
- 新增 MAVEN_HOME,值为
C:\maven
- 编辑 PATH,追加
C:\maven\bin
打开 cmd,输入 mvn -v 测试
设置阿里仓库中心和本地仓库 切换到目录 C:\maven\conf,打开 settings.xml,添加
<!--配置本地仓库地址,需要在D盘建立对应目录MaveRepository-->
<localRepository>D:\MaveRepository</localRepository>
<!--在mirrors标签中添加ali仓库中心-->
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>*</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
拷贝一份 settings.xml 到 D:\MaveRepository
maven 进阶 - 私库的安装和使用
精简篇幅,有需求的请跳转
http://wrsee.com/articles/78
tomcat 安装
http://tomcat.apache.org/ 下载 apache-tomcat-7.0.92.exe 选择任意目录安装即可(C:\Tomcat)
IntelliJ IDEA 安装配置
https://www.jetbrains.com/idea/ 下载最新安装包,直接安装 激活时先配置 host
0.0.0.0 account.jetbrains.com
选择 ACTIVE CODE,去 http://idea.lanyus.com/ 生成一个激活码输入即可 安装完成后我们需要简单的配置一下 取消代码自动提示大小写敏感
自动导包,优化包
编码设置
设置全局 maven 配置
后续有提高效率的配置再行补充........
请关注我的订阅号
3. 从零开始学 springboot-IDEA 创建 HelloWord
前言
通过前几章的学习,相信大家的 IDEA 环境已将配置完成了,接下来我们来创建第一个 springboot 应用,没错,helloword
创建项目
打开 IDEA
目录结构及介绍
可以看到,使用 IDEA 的 springboot 引导器创建的项目结构很简单,只有简单的几个包和文件。 下面我们简单的介绍下这些文件
- pom.xml
maven 的配置文件,主要是用来管理项目的依赖版本等等信息,打个比方,比如我们的 helloword,后续想使用数据库,则直接在 pom.xml 中加上 mysql 的依赖即可,maven 便会自动下载并加载对应的 jar 包供使用
- application.properties
springboot 项目的核心配置文件,初始时为空文件,一般情况下我们为了书写方便会改后缀为 application.yml,为什么这么改,我们对比一下它们的写法就知道了 假设配置 springboot 应用的 mysql 配置 application.properties:
spring.datasource.type=om.alibaba.druid.pool.DruidDataSource
spring.datasource.url=jdbc:mysql://localhost:3306/springbootdatabase
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
而 application.yml:
spring:
datasource:
name: test
url: jdbc:mysql://localhost:3306/springbootdatabase
username: root
password: 123456
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
对比,显然,yml 更省事~
关于 application.yml 和 application.properties 还存在优先级的问题,意思就是这两个文件可以同时存在并被加载,不过有优先级的区分。 一般情况下 application.properties 文件的优先级高于 application.yml 文件,即如果两个文件中都配置了端口号,只有 properties 中的端口号有效,而 yml 文件中端口配置无效。
- SbHellowordApplication.java 这是个项目的入口文件,所谓入口文件即第一时间加载的文件,一般情况下,我们会将扫描加载某些包的操作放在此处。 通过以上简单的介绍,相信对于 springboot 的项目结构有了基本的了解,接下来我们来对这个骨干结构进行完善。
补充完善
我们右键项目,新增 package 名为 controller
controller 下新增一个 class 名为 helloword
新增完成后目录结构为
接下来我们来编辑 helloworld 控制器 helloworld.java:
package com.mrcoder.sbhelloword.controller;
@RestController
public class helloworld {
@RequestMapping(value = "/hello", method = RequestMethod.GET)
public String hello(){
return "helloworld";
}
}
我们可以看到 IDEA 对几个关键词报红色,这是因为我们使用了注解,但是对应得包没有加载进来。那么包怎么加载呢?回忆之前对几个文件分析,当然是加到 pom.xml 中
标红部分为我们新增的依赖。
另外,IDEA 可以很简单的帮我们添加依赖,只需将鼠标悬浮在报红的关键词上,点击出现的红灯,
即会自动在 pom.xml 中引入依赖。
小 TIP
这边注意,IDEA 的原因,有时候会出现 pom.xml 中加入了依赖,但是 IDEA 还是报红,此时请点击
运行
好了,已经完成,我们点击右上角的绿色运行按钮运行访问看看
项目地址
https://github.com/MrCoderStack/SpringBootDemo/tree/master/sb-helloword
https://gitee.com/MrCoderStack/SpringBootDemo/tree/master/sb-helloword
请关注我的订阅号
3.1. 从零开始学 springboot - 记一次 tomcat7 报错
背景
博主时隔多年,再次进行 java 的开发,本地环境为 jdk1.8+IDEA+tomcat7+maven3.6,检出公司项目,运行报错,艰难排之
报错信息
ERROR 2019-03-06 09:31:23o.s.w.c.ContextLoaderContext initialization failed
org.springframework.beans.factory.BeanCreationException:
Error creating bean with name ''springSecurityFilterChain'' defined in class
org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration:
Bean instantiation via factory method failed; nested exception is
org.springframework.beans.BeanInstantiationException: Failed to instantiate [javax.servlet.Filter]:
Factory method ''springSecurityFilterChain'' threw exception; nested exception is
java.lang.IllegalStateException: HttpServletRequest.changeSessionId is undefined.
Are you using a Servlet 3.1+ environment?
搜索引擎限制了长度,所以博主只能一段一段的百度,试图找到相同遭遇的道友,奈何前面的一大坨都没有找到相似的,最后 Are you using a Servlet 3.1+ environment? 这段找到了一些信息
博主一想,有些道理,可能真是自己的 tomcat 太过老旧,遂安装最新 9.0,运行,成功。。。。。
总结
内在原因在截图中已经描述了,看来软件还是用最新的比较好
请关注我的订阅号
关于从零开始学 Java 之 基础语法和上的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于-1-1 java 基础语法 java关键字 java 注释 常量 语句 运算符 函数 数组定义、2. 从零开始学 springboot - 开发环境配置、3. 从零开始学 springboot-IDEA 创建 HelloWord、3.1. 从零开始学 springboot - 记一次 tomcat7 报错等相关内容,可以在本站寻找。
本文标签: