Java
1. Java简介
1.1 概述
Java 语言是美国 Sun 公司(Stanford University Network)在 1995 年推出的计算机语言。
Java 之父:詹姆斯·高斯林(James Gosling)。
1.2 Java 语言的三个版本
- Java SE:: Java 语言的(标准版),用于桌面应用的开发,是其他两个版本的基础。
- Java ME:Java 语言的(小型版),用于嵌入式消费类电子设备
- Java EE:Java 语言的(企业版),用于 Web 方向的网站开发。
1.3 Java 程序开发的三个步骤
- 编写代码
- 编译代码
- 运行代码
1.4 Java语言发展史
1.5 记事本开发helloworld
- 新建文本文档文件,修改名称为HelloWorld.java
- 用记事本打开HelloWorld.java文件,输写程序内容
- 打开命令提示符窗口,进入到HelloWorld.java所在的目录,输入指令编译和执行.
# 编译 javac HelloWorld.java # 运行 java HelloWorld
2. 基础语法
2.1 流程控制
2.1.1 顺序结构
2.1.2 循环结构
特征:
- 初始化语句
- 条件判断语句
- 循环体语句
- 条件控制语句
2.1.2.1 for循环(明确循环次数)
格式
for (初始化语句;条件判断语句;条件控制语句) {
//循环体语句;
}
2.1.2.2 while循环(循环次数不明确)
格式
//初始化语句;
while (条件判断语句) {
//循环体语句;
//条件控制语句;
}
2.1.2.3 do...while循环(先执行一次)
格式
初始化语句;
do {
循环体语句;
条件控制语句;
}while(条件判断语句);
2.1.3 跳转控制语句
2.1.3.1 continue
用在循环中,基于条件控制,跳过某次循环体内容的执行,继续下一次的执行
2.1.3.2 break
用在循环中,基于条件控制,终止循环体内容的执行,也就是说结束当前的整个循环
2.1.4 分支结构
2.1.4.1 if语句
格式
if (关系表达式) { //语句体; }if (关系表达式) { //语句体1; } else { //语句体2; }if (判断条件1) { //语句体1; } else if (判断条件2) { //语句体2; } … else { //语句体n+1; }
2.1.4.2 switch语句
格式
switch(表达式) {
case 值1:
//语句体1;
break;
case 值2:
//语句体2;
break;
…
default:
//语句体n+1;
[break;]
}
注意事项
表达式:(将要匹配的值) 取值为byte、short、int、char,JDK5以后可以是枚举,JDK7以后可以是String。
case:后面跟的是要和表达式进行比较的值 (被匹配的值)。
break:表示中断,结束的意思,用来结束switch语句。
default:表示所有情况都不匹配的时候,就执行该处的内容,和if语句的else相似。
2.2 运算符
2.2.1 算数运算符
- /
- %
- ++ :自增(前置、后置)
- --:自减(前置、后置)
2.2.2 赋值运算符
- =
- +=
- -=
- *=
- /=
- %=
注意事项:
扩展的赋值运算符隐含了强制类型转换
2.2.3 关系运算符(比较运算符)
- ==
- !=
- >
- >=
- <
- <=
注意事项:
关系运算符的结果都是boolean类型,要么是true,要么是false。
千万不要把“==”误写成“=”。
2.2.4 逻辑运算符
- &
- |
- !
- ^:异或
- && :短路与,左边为假,右边不执行
- || :短路或,左边为真,右边不执行。
2.2.5 三元运算符
格式
关系表达式 ? 表达式1 : 表达式2;
计算规则
首先计算关系表达式的值
如果值为true,表达式1的值就是运算结果
如果值为false,表达式2的值就是运算结果
2.3 数组
数组(array)是一种容器,用来存储同种数据类型的多个值。
2.3.1 一维数组
格式
格式一:数据类型 [ ] 变量名
范例:int[ ] array
格式二:数据类型 变量名[ ]
范例:int array[ ]
动态初始化
初始化时只指定数组长度,由系统为数组分配初始值
格式:数据类型 [ ] 变量名 = new 数据类型[数组长度];
范例: int [ ] arr = new int[3];
静态初始化
初始化时,就可以指定数组要存储的元素,系统还会自动计算出该数组长度
格式:数据类型 [ ] 变量名 = new 数据类型[ ] { 数据1 , 数据2 , 数据3 , ……} ;
范例: int [ ] arr = new int[ ] { 1 , 2 , 3 } ;
简化格式:数据类型 [ ] 变量名 = { 数据1 , 数据2 , 数据3 , ……} ;
范例: int [ ] arr = { 1 , 2 , 3 } ;
注意
打印数组变量名,出现的是数组在内存中的地址值
数组元素访问
数组内存地址的访问方式
格式:数组名
数组内部保存的数据的访问方式
格式:数组名[索引]
索引:从0开始
2.3.2 二维数组
格式
格式1:数据类型 [ ] [ ] 变量名;
格式2:数据类型 变量名[ ] [ ];
格式3:数据类型[ ] 变量名[ ];
动态初始化
数据类型 [ ] [ ] 变量名 = new 数据类型[ m ] [ n ];
静态初始化
数据类型 [ ] [ ] 变量名 = new 数据类型[ ] [ ] { {元素1,元素2}, {元素1, 元素2} };
数据类型 [ ] [ ] 变量名 = { {元素1,元素2}, {元素1, 元素2} };
2.3.3 数组常见操作
遍历
int[] arr = {……};
for(int i=0; i<arr.length; x++) {
arr[i] //对arr[i]进行操作
}
获取数组元素数量
格式:数组名.length
获取最值
数组元素求和
查找
2.4 方法
一段具有独立功能的代码块,不调用就不执行
可以提高代码的复用性
2.4.1 方法定义
格式
public [static] [final] 返回值 方法名 (参数1.参数2,...参数n ) {
//方法体
}
形参和实参
形参:全称形式参数,是指方法定义中的参数
实参:全称实际参数,方法调用中的参数
注意事项
- 方法不能嵌套定义
- 方法的返回值类型为void,表示该方法没有返回值,没有返回值的方法可以省略return语句不写
- 如果要编写return,后面不能跟具体的数据。
- return语句下面,不能编写代码,因为永远执行不到,属于无效的代码
2.4.2 方法调用
方法名(实参1,...实参n);方法必须先定义后调用,否则程序将报错
方法调用过程
方法没有被调用的时候,都在方法区中的字节码文件(.class)中存储
方法被调用的时候,需要进入到栈内存中运行
2.5 进制
二进制,八进制,十进制,十六进制
计算机数据在底层运算的时候,都是以二进制形式
十进制:Java中,数值默认都是10进制,不需要加任何修饰。
二进制:数值前面以0b开头,b大小写都可以。
八进制:数值前面以0开头。
十六进制:数值前面以0x开头,x大小写都可以。
2.5.1 位运算符
一个数,被另外一个数,异或两次,该数本身不变。
9. 常见问题
9.1 Java 跨平台原理
平台:指的是操作系统。
- Windows
- Mac
- Linux
跨平台:Java 程序可以在任意操作系统上运行。
原理:在不同操作系统上安装不同版本的jvm,jvm将Java字节码文件翻译成对应的机器码文件并运行
注意事项:JVM 虚拟机本身不允许跨平台,允许跨平台的是 Java 程序
9.2 JDK、JRE、JVM
9.2.1 JDK
Java Develop Kit是Java语言的软件开发工具包,内部包含了代码的编译工具和运行工具。
9.2.2 JRE
Java Runtime Environment 缩写,指Java运行环境,包含 JVM 虚拟机及 Java 核心类库
9.2.3 JVM
java虚拟机,代码需要运行在 JVM 当中。
9.2.4 JDK、JRE、JVM作用
- 编写代码的过程中,需要使用 JRE 中 Java 已经写好的代码。
- 编译代码的过程中,需要使用 JDK 中的翻译工具。
- 运行代码的过程中,需要使用 JDK 中的运行工具。
- 代码需要运行在 JVM 当中
9.2.5 JDK、JRE、JVM之间关系
9.3 JDK 的下载
通过官方网站获取 JDK
注意:针对不同操作系统,下载对应的 JDK
9.3.1 配置 Path 环境变量
- 新增系统变量JAVA_HOME
- 在path中添加 %JAVA_HOME%\bin
- 打开命令行,输入javac检查结果
9.4 JDK安装目录
9.5 Notepad软件安装
- 按照提示一步步来
- 设置 --- 首选项 --- 默认语言设置为Java --- 编码设置为ANSI
9.6 ASCII码表
ASCII (American Standard Code for Information Interchange):美国信息交换标准代码
是计算机中字节到字符的一套对应关系。
- ‘a’--- 97
- ‘A’--- 65
- ‘0’--- 48
9.7 基本数据类型提升
数据类型从高到低
double - float - long - int - (byte、char、short)
9.8 Java中内存分配
栈内存:方法运行时,进入的内存,局部变量都存放于这块内存当中
堆内存:new出来的内容都会进入堆内存,并且会存在地址值
方法区:字节码文件(.class文件)加载时进入的内存
本地方法栈:调用操作系统相关资源
寄存器:交给CPU去使用
9.9 各数据类型默认值
9.10 数组操作的两个常见小问题
9.10.1 索引越界
访问了数组中不存在的索引,造成索引越界问题
9.10.2 空指针异常
访问的数组已经不再指向堆内存的数据,造成空指针异常
9.11 方法重载
9.11.1 概述
在同一个类中,定义了多个同名的方法,但每个方法具有不同的参数类型或参数个数或顺序不同(不建议),这些同名的方法,就构成了重载关系
注意:识别方法之间是否是重载关系,只看方法名和参数,跟返回值无关。