Java是一种计算机编程语言,编程语言有很多,例如:c、c++、html/css、js、python(人工智能、爬虫)等
不同编程语言等价于 不同国家的语言;每个编程语言的语法不同的;不同的编程语言应用场景不同;
Java是应用在后端开发的一个编程语言。
一、Java的历史
1、1955年,sun公司推出的一款面向对象的编程语言
2、jdk是Java开发的必要工具
97 jdk1.1
98 jdk1.2
....
2004:jdk1.5版本,更名为:jdk5.0
推出新特性:泛型,增强的for等
....
jdk6.0
...
jdk8.0 ->企业很多使用(Labda表达式,stream流)
....
jdk18.0
....
2009年sun被 Oracle(甲骨文)收购
Java发展方向分为:【记】
JavaSE:Java语言核心基础
JavaEE:企业级开发应用
JavaME:通讯相关
二、Java语言的特点
1.简单性:相对c、c++等
2.开源性:开放源代码
3.资源广泛
4.跨平台:可以在不同的操作系统上运行Java程序
windows+macOS+Linux等
5.面向对象性:后续会讲解
三、Java运行机制
1.Java为先编译后解释运行
(1)编译:将Java源文件通过 ->编译器->生成对应的 .class文件(字节码文件)
java的源代码是 以 .java结尾
(2) 运行:直接通过 解释器 ->逐行的翻译并运
2. 注意:
.java文件 一次编译之后,可以被多次运行
(.class)
四、环境搭建
1. 名词
(1) JVM:java虚拟机,作用:屏蔽不同操作系统 之间差异性
(2) JRE:Java运行环境,JRE = 解释器+ JVM
(3) JDK:Java开发工具,JDK = 编译器+JRE+类库+工具
2. 安装JDK:
点击软件 -> 下一步 默认存储在 C盘中;JDK安装之后没有可视化界 面;
DOS命令窗口:
(a) 在 搜索中输入 cmd,回车即可
(b) 系统键 + R ,输入 cmd;回车即可
(c) 盘符中的 输入框中 输入 cmd,回车即可
3. 配置环境变量:
(1) java_home:jdk的根目录
C:\Program
Files\Java\jdk1.8.0_131
(2) path:jdk的bin目录
C:\Program
Files\Java\jdk1.8.0_131\bin
(3) classpath:.;代表告知jvm去哪找对应
的.class文件
五、Java的第一个程序
1. Java源文件:.java结尾
2. class代表类容器
class 类名{
public static void main(String[ ] args){
}
}
注意:main函数也被称为主函数,程序的入口,一 个类中最多只能有一个main函数; System.out.println();// 控制台打印输出信 息,并换行
class Hello{
public static void main(String[] args){
System.out.println("HelloWorld!!");
}
}
3. 编译和运行
编译指令:javac 源文件名.java
运行指令:java 类名
4. 细节:
(1) 一个源文件中可以定义多个类;类与类之间不 能同名
(2) 编译之后,每个类都会生成对应的 .class文件
5. 公开类:
(1) 公开类:被public修饰的类称为公开类、公 共类
(2) public :公开的、公共的
(3) 语法: public class 类名{ }
(4) 要求:公开类的类名必须和源文件保持一致
(5) 一个源文件中最多只能定义一个公开类
六、package 包
1. 作用:类似于文件夹,分门别类的进行管理文件
2. 语法:
package 包名; package 包名
1.包名2; // 多级包结构
3. 细节要求:
(1) package语句必须定义在第一行有效语句
(2) 一个源文件中最多只能定义一个 package语句
4. 带包的编译和运行
(1) 编译:javac -d . 源文件名.java
(2) 运行:java 包名.类名
创建一个源文件:TestStudent.java,定义包结 构为
demo.zmj;源文件中要求定义公开类:
打印信息为:大家好我叫 自己的名字
编译 和 运行 打印输出结果
七、编码规范
1. 标识符命名规范
标识符:起名字的地方统称为 标识符
语法要求:
(1) Java中标识符只能以数字、字母、_、$组 成,不能以数字开头
(2) java中标识符没有长度限制
(3) java中标识符严格区分大小写
(4) 不能使用Java中关键字、保留字、特殊符号 (true/false/null)进行
建议要求:
(1) 望文生义,Student / Teacher / name
(2) 包名全小写: demo
(3) 变量名、函数名、方法名:第一个单词首字母 小写,其余单词首字母大写(驼峰命名) ageAndName
(4) 类名:每个单词首字母大写,TestStudent
(5) 常量:全大写,PI
2. 格式规范:
(1) 建议一行只写一句代码
(2) 层级之间要有严格的缩进
3. 良好的注释习惯:
(1) // :单行注释,只能写一行注释内容
(2) /*
多行注释:可以写多行内容
*/
注意:单行注释不能嵌套多行注释,但是多行注释 可以嵌套单行注释
注意2:注释内容不会被编译
第二章:变量、数据类型、表达式、运算符
一、变量
- 概念:计算机中一块内存空间,存储数据的基本单元
- 组成部分:数据类型 、变量名、数据
- 语法:
(1) 先声明,再赋值
数据类型 变量名; // 声明
变量名 = 数据 ; // 赋值
(2) 声明的同时并赋值:
数据类型 变量名 = 值;
int a = 8;
(3) 同时定义多个同类型的变量:
数据类型 变量名1,变量名=值,变量名;
二、数据类型
1. 基本数据类型
B(Byte-字节) 1B = 8b(bit-位)
1KB = 1024B
1MB = 1024KB
1GB = 1024MB
1TB = 1024GB
10.24号 称为程序猿节日
(1) 整数类型
byte 1B -128~127
short 2B -32768~32767
int 4B -2147483648~2147483647
long 8B -922京~922京-1
注意:long字面值后面需要加L/l(建议L,区 分数字1)
(2) 小数类型
float:4B,单精度,字面值后面必须加F/f
double:8B,双精度
注意:float和double采用科学计数法的存 储方式
(3) 字符类型
char 2B
字面形式如下:
a. 直接使用 单引号引起来一个字符
char c = 'A';
b. 采用整数类型的形式进行存储:0~6553
char c2 = 65;
c. 转义字符:
'\n':换行
\t':水平跳格
'\' ':单引号
'\" ':双引号
(4) 布尔类型:
boolean :字面值 true/false
true:关系成立
false:关系不成立
2. 对象数据类型
(1) 类、接口、数组等称为对象类型
(2) 以 String(字符串)为例:
a. 以双引号引起来的一个或是多个字符
b. 字面值:
String s = "hello";
三、数据类型之间转换
1. 自动类型提升
(1) 应用场景:小数据类型 赋值 给 大数据类型
(2) 提升规则:
byte->short->int->long->float- >double
char-> int -> long -> float ->double
四、表达式
1. 理解:表达式通常由 字面值、运算符、变量组 成式子,一般会有一个结果
2. 表达式结果规则如下:
(1) 如果表达式中有double,则结果为double;
(2) 没有double,如果有float,则结果为 float
(3) 没有double\float,如果有long,则结果
为long
(4) 其余结果为 int
五、运算符
1. 算术运算符
+ - *(乘法) /(除法) %(取余 数/取模)
Java中的+两种用法:
(1) 加法运算:如果+两端都为数值类型,则为加 法运算
(2) 字符串拼接:如果+两端只要有一端为字符 串,则结果为字符串的拼接
2. 赋值运算符
= += -= *= /=
3. 比较运算符
> >= < <= == !=(不等于)
注意:关系运算符连接表达式结果类型为布尔类 型,
所以被关系运算连接的表达式称为布尔表达式 (结果:true/false)
4. 逻辑运算符
&&:逻辑与,表达式两端结果都为true,最终才为 true
||:逻辑或,表达式两端只要有一端为true,最终 结果为true
!:逻辑非,在结果上进行取反
5. 一元运算符
++(自增) --(自减)
a++ 或是 ++a;两种写法都会让 a 自身加1
a-- 或是 --a;两种写法都会让 a 自身减1
以上开发应用足以,以下内容作为考试/面试应用:
int c = a++; // 先使用再加1
int c = ++a; // 先加1再使用
6. 三元运算符(三目运算符)
(1) 语法:
布尔表达式?表达式1:表达式2
(2) 原理:判断布尔表达式的结果是否为true,
是-执行表达式1,否则执行表达式2
六、Scanner扫描仪
1. 作用:提高人机交互
2. 使用步骤:
(1) 导包:
import 包名1.包名2.类名;
import 包名1.包名2.*;
注意:import语句定义在package语句的后面, 所有类的上面
(2) 创建Scanner对象:
Scanner sc = new Scanner(System.in);
(3) 使用:
int a = sc.nextInt();//输入一个整数
double d = sc.nextDouble();//输入 一个小数
String str = sc.next();//输入一个字 符串
char c = sc.next().charAt(0);//入一个字符
第三章:分支结构
一、if分支
1. 基本语法:
if(判断语句){
// 语句1
}
如果()中判断结果为true,执行{}中的语句1;否 则不执行
2. 基本语法2:
(1) 语法:
if(判断语句){
// 语句1
}else{
// 语句2
}
(2) 执行原理:如果判断条件成立,结果为 true,则执行语句1,否则执行语句2
3. 多重的if结构:
(1) 语法:
if(判断语句){
// 语句1
}else if(判断条件2){
// 语句2
}else if(判断条件3){
// 语句3
}else{
// 语句n
}
4. if嵌套结构
(1) 语法:
if(判断条件1){
if(判断条件2){
// 语句
}else if(判断条件){
}else{}
}else{
if(){}else
}
(2) 执行原理:先判断外层的if条件,再判断内层
二、等值分支结构
1. 语法:
switch(表达式){
case 值1:语句1;break;
case 值2:语句2;break;
case 值3:语句3;break;
...
default:语句n; break;
}
2. 细节:
(1) 表达式的结果类型:
byte/short/int/char/String
(2) break:终止swtich结构,防止case穿透
三、局部变量
1. 概念:定义在函数/方法内部的变量
2. 特点:
(1) 必须是先赋值,再使用
(2) 作用范围:从定义位置开始,到定义它的代码 块结束
(3) 在重合的作用范围内不允许命名冲突
第四章:循环结构
一、循环
1. 理解:通过某个条件,重复并且有规律的执行一 段代码
2. 组成的部分:循环变量的初始化、循环条件、循 环变量的改变、循环体
3. 循环分类:
while循环、do..while循环、for循环
二、while循环
1. 语法:
// 循环变量的初始化
while(循环的条件){
// 循环体
// 循环变量的改变
}
2. 特点:先判断,再执行,执行的次数 0~n次
3. 注意:如果条件或是初始化给的不合适,可能出 现死循环
4. 执行原理:
先执行循环初始化语句,进入到while进行条件判 断-满足条件,结果为true,则执行{}中的循环 体,接着执行循环变量的改变,再次判断循环条 件,满足,继续执行循环体,执行循环变量改 变....直到循环条件不满足,结果为false,终 止、跳出当前循环结构,执行后续内容....
三、do..while循环
1. 语法:
// 循环变量的初始化
do{
// 循环体
// 循环变量的改变
}while(判断条件);
2. 特点:先执行,再判断,执行的次数为1~n次
四、for循环【重点:考试+开发应用】
1. 语法:
for(循环变量的初始化;循环条件;循环变量的改 变){
// 循环体
}
2. 特点:先判断,再执行,执行的次数为 0~n次
3. 执行原理:
先执行循环变量的初始化,再判断循环条件,满足结果为true,则执行循环体,再执行循环变量的改 变;然后再次的判断循环条件....直到循环条件结 果为false,终止、结束循环结构
4. 细节:
(1) 如果循环条件没有写,则默认为true
(2) 如果条件或是循环变量的初始化不合理,可能 会出现死循环
五、循环控制语句
1. break:终止、结束当前循环
2. contiune:中止、结束本次循环,从而进入下一 次循环
六、循环嵌套
1. 理解:在循环结构中定义完整的循环结构
2. 利用外层循环控制控制行,内层循环控制列
第五章:函数
一、理解
1. 函数:执行特定功能的一段代码,并且可以通过 名字进行反复的使用
2. 函数的使用流程:
(1) 函数的定义:确定函数的功能和函数名字
函数的声明:确定函数的名字
函数的实现:确定函数的功能
(2) 函数的调用:通过名字进行反复的使用
3. 函数的定义为:定义在类以内,其他函数以外 (与main函数并列的位置)
二、函数的基本定义及应用
1. 函数的语法:
public static void 函数名(){
// 函数的实现
}
注意:函数名,望文生义,驼峰命名法(第一个单词 首字母小写,其余单词首字母大写)
2. 函数的调用:通过函数名使用
函数名();
3. 函数的参数:通常函数调用时,需要调用者和函 数之间有数据的交互,用户传递的数据,被视为 参数
(1) 形式参数:函数定义时,用于约定函数和调用 者之间传递的数据类型、个数、顺序
a. 定义: (数据类型 参数名,数据类型 参数 名)
b. 使用:形式参数就相当于函数内部的局部变 量
(2) 实际参数:调用者进行函数调用时,传递的数 据
a. 语法:函数名(数据,数据2);
b. 注意:实际参数的个数、顺序、类型必须形 参一致
c. 作用:实参用于给形参赋值
三、函数的返回值
1. 理解:函数和调用者之间的一种约定,约定函数 必须给调用者返回对应的数据
2. 语法:
public static 返回值类型 函数名(形参){
// 函数体
}
3. 函数返回值的分类:
(1) 无返回值:void,代表函数无需给调用者返 回值任何数据
(2) 有返回值:返回值类型为8种基本数据类型或 是对象类型,代表函数必须给调用者返回对应数 据,必须有:return xxxx;
4. 返回值的处理:
(1) 不处理:对返回值结果不进行任何接收处理
(2) 定义同类型的变量,进行接收处理
5. return作用:
(1) 结束当前函数
(2) 将函数的结果进行返回
四、函数的执行机制
程序以main函数作为程序的入口,从上往下执行,遇 到函数调用,则优先执行被调用函数内部代码,执行 完毕之后,返回值到调用位置,继续往后执行 一个函数内部调用自身,此调用被称为递归调用
第六章:数组
一、理解
1. 数组:一次性定义多个相同类型的变量,存储多 个数据,并且可以对多个变量进行统一管理
2. 数组的定义:
(1) 先声明: 数据类型[] 变量名 ;
(2) 分配空间: 变量名 = new 数据类型[长度];
3. 数组的语法细节:
(1) 数组的下标从0开始,依次为:0、1、2...长 度-1
(2) 数组的访问,通过数组名+下标:数组名[下 标]
(3) 如果访问数组时,超过了数组的有效下标,则 编译通过,运行报错,错误信息为: java.lang.ArrayIndexOutOfBoundsExcept ion(数组得的下标越界)
(4) // 数组的遍历
for(int i=0;i<5;i++){ System.out.println("i="+i+",下标 对应的数据为:"+ages[i]);
}
(5) 获取数组的长度:数组名.length
4. 数组具有默认值:
整数类型:0
小数类型:0.0
布尔类型:false
字符类型:空字符
对象类型:null
5. 数组的不同定义方式:
(1) 先声明,再分配空间
数据类型[] 数组名;
数组名 = new 数据类型[长度];
(2) 声明的同时,并分配空间:
数据类型[] 数组名 = new 数据类型[长 度];
(3) 声明的同时并初始化:
数据类型[] 数组名= {值1,值2,值3};
(4) 声明的同时并初始化:
数据类型[] 数组名=new 数据类型[]{值1, 值2};