一:Java简介
1.1 什么是Java
Java是一种高级编程语言,由Sun Microsystems(现在是Oracle Corporation的一部分)于1995年首次发布。它是一种跨平台的语言,意味着你可以编写一次代码,然后在不同操作系统上运行,无需修改。这种跨平台性是由Java虚拟机(JVM)实现的,它允许Java代码在不同平台上运行。
1.2 Java的特点
Java是一门简单的、面向对象的优秀编程语言。具有很多优秀的特点:简单性、面向对象、跨平台、可移植性、安全性、健壮性、编译和解释性、高性能、动态性、多线程、分布性等等。
二:Java基本语法
在这一部分,我们将开始了解java的基本语法和结构。
2.1 常量与变量
常量是其值在声明后不能被修改的变量。在Java中,常量使用`final`关键字声明,并且必须在声明时或在构造函数中初始化。
final double PI = 3.14159; // 声明并初始化一个常量
final String sc = "Hello, World!"; // 声明并初始化一个字符串常量
变量是可以在程序运行时改变其值的存储位置。在Java中,变量必须先声明后使用,并且必须指定其数据类型。变量的声明包括数据类型、变量名和可选的初始化值
基本数据类型包括:
- 整型:byte, short, int, long
- 浮点型:float, double
- 字符型:char
- 布尔型:boolean
- 引用型:String
int age; // 声明一个整型变量
age = 25; // 初始化变量
double s = 500.0; // 声明并初始化一个浮点型变量
boolean m = false; // 声明并初始化一个布尔型变量
String name = "Tom"; // 声明并初始化一个字符串变量
变量的类型转换:在Java中,变量类型转换分为两种:自动类型转换(隐式类型转换)和强制类型转换(显式类型转换)。
自动类型转换(隐式类型转换)
自动类型转换发生在将一个较小的数据类型赋值给另一个较大的数据类型时。这种转换是自动发生的,不需要程序员显式地指定。例如,将一个int类型的值赋给一个long类型的变量,或者将一个`float`类型的值赋给一个double类型的变量。
int a = 10;
long b = a; // 自动类型转换
float c = 3.14;
double d = c; // 自动类型转换
强制类型转换(显式类型转换)
强制类型转换发生在将一个较大的数据类型赋值给另一个较小的数据类型时。这种转换需要程序员显式地指定,使用括号包围目标数据类型,并放在要转换的变量前面。
double e = 3.14;
int f = (int)e; // 强制类型转换
long g = 123456789;
int h = (int)g; // 强制类型转换
2.2 运算符与表达式
在Java编程语言中,运算符用于执行各种操作,如算术运算、比较、逻辑运算、位运算等。表达式是由一个或多个操作数和运算符组成的式子,它能够计算出一个值。
算术运算符
算术运算符用于执行基本的数学运算。
- 加法:+
- 减法:-
- 乘法:*
- 除法:/
- 取余(取模):%
- 自增:++
- 自减:--
int a = 10;
int b = 5;
int sum = a + b; // 加法
int difference = a - b; // 减法
int product = a * b; // 乘法
int quotient = a / b; // 除法
int remainder = a % b; // 取余
比较运算符
比较运算符用于比较两个值,并返回一个布尔值(`true`或`false`)。
- 等于:==
- 不等于:!=
- 大于:>
- 小于:<
- 大于或等于:>=
- 小于或等于:<=
boolean isEqual = (a == b); // 等于
boolean isNotEqual = (a != b); // 不等于
boolean isGreater = (a > b); // 大于
boolean isLess = (a < b); // 小于
boolean isGreaterOrEqual = (a >= b); // 大于或等于
boolean isLessOrEqual = (a <= b); // 小于或等于
逻辑运算符
逻辑运算符用于组合布尔表达式。
- 逻辑与:&&
- 逻辑或:||
- 逻辑非:!
boolean andResult = (a > 0) && (b > 0); // 逻辑与
boolean orResult = (a > 0) || (b > 0); // 逻辑或
boolean notResult = !(a > 0); // 逻辑非
位运算符
位运算符用于对整数类型(`byte`、`short`、`int`、`long`)的二进制位进行操作。
- 按位与:&
- 按位或:|
- 按位异或:^
- 按位取反:~
- 左移:<<
- 右移:>>
- 无符号右移:>>>
赋值运算符
赋值运算符用于给变量赋值。
- 简单赋值:=
- 加法赋值:+=
- 减法赋值:-=
- 乘法赋值:*=
- 除法赋值:/=
- 取余赋值:%=
int a = 10;
a += 5; // 等价于 a = a + 5;
a -= 3; // 等价于 a = a - 3;
a *= 2; // 等价于 a = a * 2;
a /= 4; // 等价于 a = a / 4;
a %= 3; // 等价于 a = a % 3;
三目运算符
Java中的三目运算符(也称为条件运算符)是一个非常有用的运算符,它提供了一种简洁的方式来根据条件选择两个值中的一个。三目运算符的语法如下:
条件表达式 ? 表达式1 : 表达式2;
如果条件表达式的结果为 true ,则整个三目运算符的结果为 表达式1 的值;如果条件表达式的结果为 false ,则结果为 表达式2 的值。
2.3 运算符的优先级
在实际开发中,可能同时使用到多个运算符,而运算符之间的优先级是不同的,优先级越低的运算符也先执行。
三:基本结构
在Java编程中,选择结构和循环结构是控制程序流程的两种基本结构。它们允许程序根据不同的条件执行不同的代码块,或者重复执行特定的代码块。
3.1 选择结构
选择结构用于根据条件判断执行不同的代码路径。Java提供了几种选择结构,包括if语句、switch语句和嵌套的if-else语句。
if语句是最基本的选择结构,它根据条件的真假来执行不同的代码块;
if (条件表达式) {
// 如果条件表达式为真,则执行这里的代码
} else {
// 如果条件表达式为假,则执行这里的代码
}
if-else语句是if语句的扩展,它允许在条件为假时执行另一个代码块。
switch语句用于基于一个变量的值来选择执行多个代码块中的一个。
switch (变量) {
case 值1:
// 如果变量等于值1,则执行这里的代码
break;
case 值2:
// 如果变量等于值2,则执行这里的代码
break;
// 可以有多个case
default:
// 如果变量的值与所有case都不匹配,则执行这里的代码
}
3.2 循环结构
循环结构用于重复执行一段代码直到满足特定条件。Java提供了几种循环结构,包括for循环、while循环和do-while循环。
1.for循环
for循环在初始化、条件判断和迭代步骤之间提供了一个紧凑的循环结构。
for (初始化表达式; 条件表达式; 迭代表达式) {
// 循环体
}
2.while循环
while循环在每次循环开始前检查条件,如果条件为真,则执行循环体。
初始化表达式;
while (条件表达式) {
// 循环体
迭代表达式;
}
3.do-while循环
do-while循环至少执行一次循环体,然后在每次循环结束后检查条件。
初始化表达式;
do {
// 循环体
迭代表达式;
} while (条件表达式);
4.break与continue语句
break 语句用于立即退出当前所在的最内层循环。当 break 语句执行时,循环体内的后续代码将不会被执行,循环的条件判断也不会再进行,循环将结束。
for (int i = 0; i < 10; i++) {
if (i == 5) {
break; // 当i等于5时,退出循环
}
System.out.println("i: " + i);
}
// 输出结果:i: 0 i: 1 i: 2 i: 3 i: 4
当 i 的值为5时, break 语句被执行,循环立即终止。
continue语句
continue 语句用于跳过当前循环的剩余部分,直接进行下一次循环的条件判断。如果条件仍然满足,将继续执行循环体内的代码;如果不满足,循环将结束。
for (int i = 0; i < 10; i++) {
if (i % 2 == 0) {
continue; // 当i为偶数时,跳过当前循环的剩余部分
}
System.out.println("i: " + i);
}
// 输出结果:i: 1 i: 3 i: 5 i: 7 i: 9
当 i 为偶数时, continue 语句被执行,循环体内的代码不会被执行,而是直接进行下一次循环的条件判断。
四:方法简单介绍
方法就是定义在类中的具有特定功能的一段独立的小程序,用来完成某种功能。与C语言函数功能类似。
4.1 方法的定义
方法的定义包括访问修饰符、返回类型、方法名、参数列表和方法体。
访问修饰符 返回类型 方法名(参数类型 参数名1, 参数类型 参数名2, ...) {
// 方法体
return 返回值;
}
方法的声明包含了很多组成部分,每个组成部分的含义如下。
(1)修饰符:用于控制方法的访问权限,目前学习阶段全部写为public static 即可。(2)返回值类型:方法需要返回给调用者数据的数据类型,如无返回值,必须声明返回值类型为void。
(3)方法名:方法的名字,命名规范在标识符规范的基础之上,采用首字母小写的驼峰
命名规则。
(4)形参列表:由参数类型和参数名组成,也称作形式参数(形参),形参可以为任意多
个,用于调用者给方法内部传递数据。
(5)方法体:该方法需要实现的具体逻辑。
(6)返回值:方法执行完毕后提供给调用者的数据。如果定义了返回值类型,那么返回值和返回值类型必须保持一致;如果定义的返回值类型为 void,那么需要省略返回值,也就是直接用语句“return;”返回或者省略该语甸直至该方法执行结束。当方法在执行过程中遇到return语句,就会返回而结束该方法的执行。
五:数组
数组是一种数据结构,用于存储相同类型数据的集合。数组可以存储基本数据类型(如int、double、char等)或对象引用。
在Java中,数组必须先声明后使用。声明数组时,需要指定数组的类型和数组变量的名称。
5.1 数组基本使用方法
1 声明数组
int[] numbers; // 声明一个整型数组变量
2 初始化数组
// 声明并立即初始化数组
int[] numbers = {1, 2, 3, 4, 5};
// 声明数组变量,稍后初始化
int[] numbers;
numbers = new int[]{1, 2, 3, 4, 5};
3 访问数组元素
数组中的元素可以通过索引来访问,索引从0开始。
int firstNumber = numbers[0]; // 访问第一个元素
4 数组长度
数组的长度可以通过内置的`length`属性来获取。
int length = numbers.length; // 获取数组的长度
5 遍历数组
for (int i = 0; i < numbers.length; i++) {
System.out.println(numbers[i]);
}
6 数组排序
5.2 二维数组
二维数组是一种数组的数组,它用于表示表格或矩阵数据。二维数组中的每个元素都是一个一维数组。
1 数组的创建
数据类型[ ] [ ] 数组名 = new 数据类型 [m] [n];