Java 简介
什么是Java?
Java是一种流行的编程语言,创建于1995年。
Java属于Oracle公司所有,运行Java的设备超过30亿台。
Java可用于:
- 移动应用(特别是Android应用)
- 桌面应用程序
- Web应用程序
- Web服务器和应用程序服务器
- 游戏
- 数据库连接
- 更多
为什么用Java?
- Java可以在不同的平台上运行(Windows、Mac、Linux、Raspberry Pi等)。
- 它是世界上最流行的编程语言之一
- 它易学易用
- 它是开源和免费的
- 它安全、快速、强大
- 它拥有强大的社区支持(数千万开发者)
开始
本教程将学习Java的基础知识。
不要求有编程经验。
Java 环境搭建
Java安装
一些电脑可能已经安装了Java。
要检查你的Windows电脑上是否安装了Java,可以在开始栏中搜索Java,或者在命令提示符(cmd.exe)中输入以下命令:
Kevin@qikegu C:\Users\Kevin
> java -version
如果安装了Java,您将看到如下内容(取决于版本):
java version "1.8.0_102" Java(TM) SE Runtime Environment (build 1.8.0_102-b14) Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode)
如果您的计算机上没有安装Java,可以从oracle.com免费下载。
windows Java路径设置
需要把Java可执行程序(bin)目录添加到windows的Path环境变量中,这样才能直接执行Java的命令。
按如下步骤操作:
1. 我的电脑->属性->高级系统设置
2. 点击”环境变量”
3. 如下图所示,打开”Path”设置对话框
4. 如下图所示,把Java可执行程序(bin)目录添加到windows的Path环境变量中
5. 验证路径设置,执行 java -version
Kevin@QIKEGU C:\Users\Kevin > java -version java version "1.8.0_102" Java(TM) SE Runtime Environment (build 1.8.0_102-b14) Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode)
Java 快速入门
在Java中,每个应用程序都以类名开头,该类必须与文件名匹配。
让我们创建第一个Java文件MyClass.java
,可以在任何文本编辑器(如记事本)中编写该文件。
该程序会输出一条“Hello World”消息,代码如下:
MyClass.java
public class MyClass { public static void main(String[] args) { System.out.println("Hello World"); } }
如果不理解上面的代码,请不要担心 – 我们将在后面的章节中详细讨论它。现在,只需运行它。
将代码保存为“MyClass.java”文件。打开命令行工具(cmd.exe),切换到保存文件的目录,输入“javac MyClass.java”:
Kevin@QIKEGU G:\project\qikegu-demo\java
> javac MyClass.java
这将编译你的代码。如果代码中没有错误,完成编译后,输入“java MyClass”运行文件:
Kevin@QIKEGU G:\project\qikegu-demo\java
> java MyClass
输出应该是:
Hello World
恭喜你编写并执行了第一个Java程序。
Java 基本语法
在前一章中,我们创建了一个名为MyClass.java
的Java文件,运行时把“Hello World”打印到屏幕上,代码如下:
public class MyClass { public static void main(String[] args) { System.out.println("Hello World"); } }
例子解释
在Java中运行的每一行代码都必须在一个类中。示例中,类被命名为MyClass,类名的首字母是大写的。
注意: Java是区分大小写的: “MyClass”和“myclass”是不同的。
java文件的名称必须与类名匹配。保存文件时,使用类名保存,并添加.java
扩展名。
要运行上面的示例,请确保正确安装了Java: 转到Java 环境搭建一章。输出应该是:
Hello World
main 方法
main()
方法是必需的,每个Java程序中都包含:
public static void main(String[] args)
main()
方法是Java程序的运行入口,该方法中的所有代码都将被执行。目前不必深究main前后的关键字,学习本教程后续内容时,将逐步了解它们。
现在,只要记住每个Java程序都有一个类名,这个类名必须与文件名匹配,每个程序都必须包含一个main()
方法。
System.out.println()
在main()
方法内部,可以使用println()
方法向屏幕打印一行文本:
public static void main(String[] args) { System.out.println("Hello World"); }
注意:在Java中,每个代码语句必须以分号结束。
Java 注释
Java中,注释可以用来解释代码,使其更具可读性。注释还可以屏蔽代码,在调试时很有用。
单行注释以两个前斜杠(//
)开头。
Java会忽略//
和行尾之间的任何文本(不会执行)。
这个例子在代码行之前使用单行注释:
示例
// 这是注释 System.out.println("Hello World");
这个例子在一行代码的末尾使用单行注释:
示例
System.out.println("Hello World"); // 这是注释
Java多行注释
多行注释以/*
开头,以*/
结尾。
Java将忽略/*
和*/
之间的任何文本。
本例使用多行注释(注释块)来解释代码:
示例
/* 下面的代码向屏幕 打印“Hello World”*/ System.out.println("Hello World");
Java 变量
Java 运算符
运算符用于对变量和值进行运算操作。
参与运算的值称为操作数,运算操作(在两个操作数之间执行)由运算符定义:
操作数 | 运算符 | 操作数 |
---|---|---|
100 | + | 50 |
在下面的例子中,数字100
和50
是操作数,+
是运算符:
示例
int x = 100 + 50;
+
运算符可用于将两个值相加,就像上面的例子一样,但它也可以用于将一个变量和一个值相加,或者将两个变量相加:
示例
int sum1 = 100 + 50; // 150 (100 + 50) int sum2 = sum1 + 250; // 400 (150 + 250) int sum3 = sum2 + sum2; // 800 (400 + 400)
Java将运算符分为以下几组:
- 算术运算符
- 赋值运算符
- 比较运算符
- 逻辑运算符
- 按位运算符
Java算术运算符
算术运算符用于执行常见的数学运算。
运算符 | 名称 | 描述 | 例子 |
---|---|---|---|
+ | 加 | 将两个值相加 | x + y |
– | 减 | 从一个值减去另一个值 | x – y |
* | 乘 | 两个值相乘 | x * y |
/ | 除 | 将一个值除以另一个值 | x / y |
% | 取模 | 返回除法余数 | x % y |
++ | 增加 | 将变量的值增加1 | ++x |
— | 减少 | 将变量的值减少1 | –x |
Java赋值操作符
赋值运算符用于为变量赋值。
在下面的例子中,我们使用赋值运算符(=
)将值10赋给一个名为x的变量:
示例
int x = 10;
加法赋值运算符(+=
)向变量加一个值:
示例
int x = 10; x += 5;
所有赋值运算符的列表:
运算符 | 例子 | 等价于 |
---|---|---|
= | x = 5 | x = 5 |
+= | x += 3 | x = x + 3 |
-= | x -= 3 | x = x – 3 |
*= | x *= 3 | x = x * 3 |
/= | x /= 3 | x = x / 3 |
%= | x %= 3 | x = x % 3 |
&= | x &= 3 | x = x & 3 |
|= | x |= 3 | x = x | 3 |
^= | x ^= 3 | x = x ^ 3 |
>>= | x >>= 3 | x = x >> 3 |
<<= | x <<= 3 | x = x << 3 |
Java比较运算符
比较运算符用于比较两个值:
运算符 | 名称 | 例子 |
---|---|---|
== | 等于 | x == y |
!= | 不等于 | x != y |
> | 大于 | x > y |
< | 小于 | x < y |
>= | 大于等于 | x >= y |
<= | 小于等于 | x <= y |
Java逻辑运算符
逻辑运算符用于确定变量或值之间的逻辑:
运算符 | 名称 | 描述 | 例子 |
---|---|---|---|
&& | 逻辑与 | 如果两个语句都为真,则返回true | x < 5 && x < 10 |
|| | 逻辑或 | 如果其中一个语句为真,则返回true | x < 5 || x < 4 |
! | 逻辑非 | 反转结果,如果结果为真,则返回false | !(x < 5 && x < 10) |
Java 类型转换
Java 类型转换
类型转换是将一种基本类型的值赋给另一种基本类型。
Java中,有两种类型转换:
- 扩大转换 (自动) – 将字节数较小类型转换为较大类型
byte
->short
->char
->int
->long
->float
->double
-
缩小转换 (手动) – 将字节数较大类型转换为较小类型
double
->float
->long
->int
->char
->short
->byte
扩大转换
将字节数较小类型转换为较大类型时,自动进行字节数加大转换:
示例
public class MyClass { public static void main(String[] args) { int myInt = 9; double myDouble = myInt; // 自动转换: int 到 double System.out.println(myInt); // 输出 9 System.out.println(myDouble); // 输出 9.0 } }
缩小转换
将字节数较大类型转换为较小类型,必须手动转换,方法是将类型用括号括起来,放在要转换的值前面:
示例
public class MyClass { public static void main(String[] args) { double myDouble = 9.78; int myInt = (int) myDouble; // 手动转换: double 到 int System.out.println(myDouble); // 输出 9.78 System.out.println(myInt); // 输出 9 } }
Java 运算符
运算符用于对变量和值进行运算操作。
参与运算的值称为操作数,运算操作(在两个操作数之间执行)由运算符定义:
操作数 | 运算符 | 操作数 |
---|---|---|
100 | + | 50 |
在下面的例子中,数字100
和50
是操作数,+
是运算符:
示例
int x = 100 + 50;
+
运算符可用于将两个值相加,就像上面的例子一样,但它也可以用于将一个变量和一个值相加,或者将两个变量相加:
示例
int sum1 = 100 + 50; // 150 (100 + 50) int sum2 = sum1 + 250; // 400 (150 + 250) int sum3 = sum2 + sum2; // 800 (400 + 400)
Java将运算符分为以下几组:
- 算术运算符
- 赋值运算符
- 比较运算符
- 逻辑运算符
- 按位运算符
Java算术运算符
算术运算符用于执行常见的数学运算。
运算符 | 名称 | 描述 | 例子 |
---|---|---|---|
+ | 加 | 将两个值相加 | x + y |
– | 减 | 从一个值减去另一个值 | x – y |
* | 乘 | 两个值相乘 | x * y |
/ | 除 | 将一个值除以另一个值 | x / y |
% | 取模 | 返回除法余数 | x % y |
++ | 增加 | 将变量的值增加1 | ++x |
— | 减少 | 将变量的值减少1 | –x |
Java赋值操作符
赋值运算符用于为变量赋值。
在下面的例子中,我们使用赋值运算符(=
)将值10赋给一个名为x的变量:
示例
int x = 10;
加法赋值运算符(+=
)向变量加一个值:
示例
int x = 10; x += 5;
所有赋值运算符的列表:
运算符 | 例子 | 等价于 |
---|---|---|
= | x = 5 | x = 5 |
+= | x += 3 | x = x + 3 |
-= | x -= 3 | x = x – 3 |
*= | x *= 3 | x = x * 3 |
/= | x /= 3 | x = x / 3 |
%= | x %= 3 | x = x % 3 |
&= | x &= 3 | x = x & 3 |
|= | x |= 3 | x = x | 3 |
^= | x ^= 3 | x = x ^ 3 |
>>= | x >>= 3 | x = x >> 3 |
<<= | x <<= 3 | x = x << 3 |
Java比较运算符
比较运算符用于比较两个值:
运算符 | 名称 | 例子 |
---|---|---|
== | 等于 | x == y |
!= | 不等于 | x != y |
> | 大于 | x > y |
< | 小于 | x < y |
>= | 大于等于 | x >= y |
<= | 小于等于 | x <= y |
Java逻辑运算符
逻辑运算符用于确定变量或值之间的逻辑:
运算符 | 名称 | 描述 | 例子 |
---|---|---|---|
&& | 逻辑与 | 如果两个语句都为真,则返回true | x < 5 && x < 10 |
|| | 逻辑或 | 如果其中一个语句为真,则返回true | x < 5 || x < 4 |
! | 逻辑非 | 反转结果,如果结果为真,则返回false | !(x < 5 && x < 10) |
Java 字符串
Java字符串/String
字符串用于存储文本。
一个字符串变量包含了一组由双引号括起来的字符:
示例
创建一个String
类型的变量,并为其赋值:
String greeting = "Hello";
字符串长度
Java中的字符串实际上是一个对象,字符串对象包含了一组操作字符串的方法。例如,可以使用length()
方法获取字符串长度:
示例
String txt = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
System.out.println("字符串长度是: " + txt.length());
更多字符串方法
有很多字符串方法可用,例如toUpperCase()
和toLowerCase()
:
示例
String txt = "Hello World"; System.out.println(txt.toUpperCase()); // 输出 "HELLO WORLD" System.out.println(txt.toLowerCase()); // 输出 "hello world"
在字符串中查找字符串
indexOf()
方法在字符串中查找字符串,返回被查找字符串首次出现的索引(位置):
示例
String txt = "奇客谷教程 - Java 教程"; System.out.println(txt.indexOf("Java")); // 输出 8
Java从0开始计算位置。
0是字符串中的第一个位置,1是第二个,2是第三个…
字符串拼接
可以使用+
运算符拼接两个字符串:
示例
String firstName = "Kevin"; String lastName = "Wu"; System.out.println(firstName + " " + lastName);
注意,在firstName
与lastName
之间,我们添加了一个空格。
还可以使用concat()
方法拼接两个字符串:
示例
String firstName = "Kevin "; String lastName = "Wu"; System.out.println(firstName.concat(lastName));
特殊字符
因为字符串必须用引号括起来,如果字符串中含有引号,Java会报错:
String txt = "关于西湖的诗句: "毕竟西湖六月中,风光不与四时同"";
要避免这个问题,可以使用反斜杠转义字符。
反斜杠(\
)转义字符将特殊字符转换为字符串字符:
转义字符 | 结果 | 描述 |
---|---|---|
\’ | ‘ | 单引号 |
\” | “ | 双引号 |
\\ | \ | 反斜杠 |
\"
在字符串中插入双引号:
示例
String txt = "关于西湖的诗句: \"毕竟西湖六月中,风光不与四时同\"";
\'
在字符串中插入单引号:
示例
String txt = "It\'s OK.";
\\
在字符串中插入一个反斜杠:
示例
String txt = "字符 \\ 称为反斜杠.";
Java中,还有几个转义组合:
转义字符 | 结果 |
---|---|
\n | 换行 |
\r | 回车 |
\t | 制表符 |
\b | 退格 |
\f | 换页 |
数字相加和字符串拼接
两个数字相加,结果将是一个数字:
示例
int x = 10; int y = 20; int z = x + y; // z 将是 30 (一个整型值)
两个字符串相加,结果将是拼接后的一个字符串:
示例
String x = "10"; String y = "20"; String z = x + y; // z 将是 1020 (一个字符串)
如果数字和字符串相加,会作为字符串拼接处理,结果将是一个字符串:
示例
String x = "10"; int y = 20; String z = x + y; // z 将是 1020 (一个字符串)
Java Math
Java Math类有许多方法可用于数学计算。
Math.max(x,y)
Math.max(x,y)
方法可以求出x, y中的最大值:
示例
Math.max(5, 10);
Math.min(x,y)
Math.min(x,y)
方法可以求出x, y中的最小值:
示例
Math.min(5, 10);
Math.sqrt(x)
Math.sqrt(x)
方法返回√x:
示例
Math.sqrt(64);
Math.abs(x)
Math.abs(x)
方法返回x的绝对值(正值):
示例
Math.abs(-4.7)
Math.random()
Math.random()
返回一个介于0(含)和1(不含)之间的随机数:
示例
Math.random();
Java 布尔运算
Java 布尔类型
在编程中,有时需要的数据类型,取值只能取两个值之一,比如:
- 是/否
- 开/关
- 真/假
为此,Java有一个boolean
数据类型,可以取值:true
或false
。
布尔值
布尔类型是用boolean
关键字声明的,只能取值: true
或false
:
示例
boolean isJavaFun = true; boolean isFishTasty = false; System.out.println(isJavaFun); // 输出 true System.out.println(isFishTasty); // 输出 false
布尔表达式
布尔表达式是返回布尔值true
或false
的Java表达式。
可以使用比较运算符,例如大于(>
)运算符,来检验表达式是否为真:
示例
System.out.println(10 > 9); // 返回true, 因为 10 大于 9
在下面的例子中,使用等号(==
)比较运算符来计算表达式:
示例
int x = 10; System.out.println(x == 10); // 返回true, 因为x的值是10
示例
System.out.println(10 == 15); // 返回false, 因为10不等于15
Java中,布尔表达式是所有比较运算和条件判断的基础。
Java If … Else
Java 条件和If语句
Java支持数学中常见的逻辑条件:
- 小于:
a < b
- 小于等于:
a <= b
- 大于:
a > b
- 大于等于:
a >= b
- 等于:
a == b
- 不等于:
a != b
可以使用这些条件做判断,然后执行不同的代码。
Java有以下条件语句:
if
如果条件为真,if
中的代码块将被执行else
如果if
语句中的条件为假,else
中的代码块将被执行else if
如果第一个条件不成立,则指定一个新条件switch
指定多个条件,匹配条件下的代码块将被执行
if语句
使用if语句,指定当条件为真时,要执行的代码块。
语法
if (条件) { // 条件为真时,要执行的代码块 }
注意if是小写字母。大写字母(If或IF)将产生错误。
在下面的例子中,我们测试两个值,看看20是否大于18。如果条件为真,打印一些文本:
示例
if (20 > 18) { System.out.println("20 大于 18"); }
我们也可以测试变量:
示例
在上面的例子中,我们使用两个变量x和y,来测试x是否大于y(使用>
运算符)。当x = 20,y = 18,我们知道20大于18,屏幕上将打印“x大于y”。
else语句
使用else语句,指定如果条件为假时,要执行的代码块。
语法
if (条件) { // 条件为真时,要执行的代码块 } else { // 条件为假时,要执行的代码块 }
示例
int time = 20; if (time < 18) { System.out.println("白天"); } else { System.out.println("夜晚"); } // 输出 "夜晚"
在上面的例子中,time(20)大于18,所以条件为假,程序将执行else语句,在屏幕上打印“夜晚”。如果时间小于18,程序将打印“白天”。
else if语句
使用else if语句,当第一个条件为假时,指定一个新条件。
语法
if (条件1) { // 条件1为真时,要执行的代码块 } else if (条件2) { // 条件1为假,条件2为真时,要执行的代码块 } else { // 条件1为假,条件2为假时,要执行的代码块 }
示例
int time = 22; if (time < 6) { System.out.println("夜晚"); } else if (time < 18) { System.out.println("白天"); } else { System.out.println("夜晚"); } // 输出 "夜晚"
在上面的例子中,time(22)大于6,所以第一个条件为假,接下来else if语句中的条件也为假,程序会继续执行,到达else代码块,屏幕上将打印“夜晚”。
如果time = 14,程序会打印“白天”。
if…else 精简格式(三元运算符)
如果if与else代码块中都只有一个语句要执行,可以把它们放在同一行:
语法
variable = (条件) ? 条件真时执行的语句 : 条件假时执行的语句;
更换下面的写法
示例
可以简单地写为:
示例
int time = 20; String result = (time < 18) ? "白天" : "夜晚"; System.out.println(result);
Java Switch
Java Switch语句
使用switch
语句,可以从许多代码块中选择一个执行。
语法
switch
语句是这样工作的:
switch
中的表达式求值一次。- 将表达式的值与每个
case
的值进行比较。 - 如果匹配,则执行相关联的代码块。
break
和default
关键字是可选的,本章稍后将对此进行描述
下面的例子,使用周工作日编号来计算周工作日名称:
示例
int day = 4; switch (day) { case 1: System.out.println("周一"); break; case 2: System.out.println("周二"); break; case 3: System.out.println("周三"); break; case 4: System.out.println("周四"); break; case 5: System.out.println("周五"); break; case 6: System.out.println("周六"); break; case 7: System.out.println("周日"); break; } // 输出 "周四" (day 4)
break 关键字
当程序执行遇到break
关键字时,就会跳出当前switch块。后续的case
都会跳过,不再检测。
当找到匹配项,工作完成时,就该跳出了,没有必要进行更多的检测。
break可以节省执行时间,因为“跳过”了switch
块中剩余代码的执行。
default 关键字
当没有匹配的case
时,default
关键字下的代码块就会运行。
示例
int day = 4; switch (day) { case 6: System.out.println("今天是周六"); break; case 7: System.out.println("今天是周日"); break; default: System.out.println("期待周末"); } // 输出 "期待周末"
注意,如果default
语句是switch块中的最后一个语句,则不需要break
。
Java While 循环
循环
只要满足指定的条件,循环会反复执行某个代码块。
Java While 循环
只要条件为真,while循环语句会循环执行一个代码块:
语法
while (条件) { // 要执行的代码块 }
在下面的例子中,只要变量(i
)小于5,循环中的代码就会反复运行:
示例
注意: 不要忘记给变量
i
递增,否则循环将永远不会结束!
Do/While
do/while
循环是while
循环的变体。此循环将先执行一次代码块,然后再检查条件,只要条件为真,循环将继续。
语法
do { // 要执行的代码块 } while (条件);
下面的示例使用do/while循环,循环将至少执行一次,即使条件是假的。因为会先执行一次代码块,然后再检查条件:
示例
注意: 不要忘记给变量i
递增,否则循环将永远不会结束!
Java For 循环
当确切地知道一段代码要循环的次数时,最好使用for循环,而不是while循环:
语法
for (语句1; 语句2; 语句3) { // 要执行的代码块 }
- 语句1 在代码块执行之前执行(一次)。
- 语句2 定义了执行代码块的条件。
- 语句3 在代码块执行之后(每次)执行。
下面的例子将打印数字0到4:
示例
for (int i = 0; i < 5; i++) { System.out.println(i); }
- 语句1 在循环开始之前设置一个变量(int i = 0)。
- 语句2 定义了循环运行的条件(i必须小于5),如果条件为真,循环将再次执行,如果条件为假,循环将结束。
- 语句3 循环中的代码块每次执行后,都会给变量
i
递增1(i++)。
另一个例子
这个例子打印0到10之间的偶数值:
示例
for (int i = 0; i <= 10; i = i + 2) { System.out.println(i); }
For-Each 循环
还有一个for-each
循环,专门用来遍历数组中的元素:
语法
for (类型 变量 : 数组) { // 要执行的代码块 }
下面的例子使用for-each
循环,输出vehicle
数组中的所有元素:
示例
String[] vehicle = {"自行车", "电动车", "汽车", "高铁"}; for (String i : vehicle) { System.out.println(i); }
Java Break 与 Continue
Java Break
前面章节中,介绍switch语句时,学习过break
语句,它用于“跳出”switch语句。
break
语句也可以用来跳出循环。
这个例子中,当i等于4时跳出循环:
示例
Java Continue
continue
语句中断本次循环中的代码执行,但循环会继续。
注意:
continue
语句之后将继续执行下一次循环,而break
语句是跳出整个循环。
这个例子,当i等于4时跳过,不打印:
示例
While 循环中的 break 与 continue
也可以在while循序中使用break
和continue
:
Break 示例
Continue 示例
Java 数组
Java数组/Array
使用数组可以在单个变量中存储一组类型相同的值。
声明数组,使用类型后缀方括号定义数组变量:
String[] vehicle;
上面例子中,声明了一个字符串数组。
要把值插入到数组中,可以使用以下方式:
String[] vehicle = {"自行车", "电动车", "汽车", "高铁"};
要创建一个整数数组,如下所示:
int[] myNum = {10, 20, 30, 40};
访问数组的元素
要访问数组元素,可使用索引号。
这个例子访问vehicle中第一个元素的值:
示例
String[] vehicle = {"自行车", "电动车", "汽车", "高铁"}; System.out.println(vehicle[0]); // 输出 自行车
注意: 数组索引以0开头: [0]是第一个元素,[1]是第二个元素,以此类推。
更改数组元素
要更改特定元素的值,可使用索引号:
示例
vehicle[0] = "飞机";
示例
String[] vehicle = {"自行车", "电动车", "汽车", "高铁"}; vehicle[0] = "飞机"; System.out.println(vehicle[0]); // 现在输出 飞机,而不是 自行车
数组长度
要知道一个数组有多少个元素,可以使用length
属性:
示例
String[] vehicle = {"自行车", "电动车", "汽车", "高铁"}; System.out.println(vehicle.length); // 输出 4
遍历数组
可以使用for循环遍历数组,使用length
属性指定循环次数。
下面的示例,输出vehicle数组中的所有元素:
示例
String[] vehicle = {"自行车", "电动车", "汽车", "高铁"}; for (int i = 0; i < vehicle.length; i++) { System.out.println(vehicle[i]); }
使用For-Each遍历数组
还有一个for-each
循环,专门用于遍历数组中的元素:
语法
for (类型 变量 : 数组) { ... }
下面的例子,使用for-each
循环,输出vehicle数组中的所有元素:
示例
String[] vehicle = {"自行车", "电动车", "汽车", "高铁"}; for (String i : vehicle) { System.out.println(i); }
上面的例子,可以这样理解:对于字符串数组vehicle中的每个元素i,打印出它的值。
比较for
循环和for-each
循环,可以看到for-each
循环更容易编写,不需要计数器(使用length
属性),可读性更好。
多维数组
多维数组是包含一个或多个数组的数组。
要创建一个二维数组,可以把数组作为数组元素:
示例
int[][] myNumbers = { {1, 2, 3, 4}, {5, 6, 7} };
myNumbers
现在是一个二维数组,包含了两个数组作为元素。
要访问二维数组myNumbers
中的元素,需指定两个索引: 一个索引用于数组,另一个索引用于数组中的元素。
下面的例子访问myNumbers
中,第二个数组(1)中的第三个元素(2):
示例
int[][] myNumbers = { {1, 2, 3, 4}, {5, 6, 7} }; int x = myNumbers[1][2]; System.out.println(x); // 输出 7
下面的例子,使用for
循环遍历二维数组中的元素:
示例
public class MyClass { public static void main(String[] args) { int[][] myNumbers = { {1, 2, 3, 4}, {5, 6, 7} }; for (int i = 0; i < myNumbers.length; ++i) { for(int j = 0; j < myNumbers[i].length; ++j) { System.out.println(myNumbers[i][j]); } } } }
Java 异常
执行Java代码时,可能会发生各种错误: 程序员写代码时犯的错误、用户非法输入造成的错误,或其他不可预见的错误。
当发生错误时,Java通常会停止程序运行,并生成错误消息。用技术方面的话说: Java将抛出异常/exception(抛出错误)。
Java try catch
try
语句可以对一个代码块,在其执行时,进行错误检测。
catch
语句定义了,当try块中发生错误时,要执行的代码块,。
try
与 catch
关键字成对出现:
语法
考虑下面例子
这将生成一个错误,因为myNumbers[10]
不存在。
public class MyClass { public static void main(String[ ] args) { int[] myNumbers = {1, 2, 3}; System.out.println(myNumbers[10]); // error! } }
输出
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10
at MyClass.main(MyClass.java:4)
如果发生错误,可以用try…catch
捕捉错误,然后执行错误处理代码:
示例
public class MyClass { public static void main(String[ ] args) { try { int[] myNumbers = {1, 2, 3}; System.out.println(myNumbers[10]); } catch (Exception e) { System.out.println("出错了"); } } }
输出
出错了
Finally
不管try
块中有没有报错,在try...catch
之后,finally
语句中的代码块将总是会执行:
示例
public class MyClass { public static void main(String[] args) { try { int[] myNumbers = {1, 2, 3}; System.out.println(myNumbers[10]); } catch (Exception e) { System.out.println("出错了"); } finally { System.out.println("'try catch'结束了"); } } }
输出将为:
出错了
'try catch'结束了
throw 关键字
throw
语句让你可以创建自定义错误。
throw
语句与异常类型一起使用。Java中有很多异常类型: ArithmeticException
, ClassNotFoundException
, ArrayIndexOutOfBoundsException
, SecurityException
, 等等.
异常类型通常与自定义方法一起使用。如果不理解下面的例子,不必担心,下一章中会了解更多。
示例
如果年龄小于18岁,抛出异常(打印“拒绝访问”);如年龄在18岁或以上,打印“允许访问”:
public class MyClass { static void checkAge(int age) { if (age < 18) { throw new ArithmeticException("拒绝访问 - 低于18岁"); } else { System.out.println("允许访问 - 年龄合格"); } } public static void main(String[] args) { checkAge(15); // 年龄设置为15 (低于18...) } }
输出将为:
Exception in thread "main" java.lang.ArithmeticException: 拒绝访问 - 低于18岁 at MyClass.checkAge(MyClass.java:4) at MyClass.main(MyClass.java:12)
如果你的年龄是20岁,你不会有例外:
示例
checkAge(20);
输出将为:
允许访问 - 年龄合格
Java 方法
方法是一段代码,只在调用时运行。
可以将数据(称为参数)传递到方法中。
方法用于执行某些操作,方法也被称为函数。
为什么使用方法?重用代码: 定义代码一次,可以使用多次。
创建方法
方法必须在类中声明。声明时,方法名后面跟着括号 ()。Java提供了一些预定义的方法,比如System.out.println()
。
下面的例子定义自己的方法,执行某些操作:
示例
在MyClass中创建一个方法:
myMethod()
是方法的名称static
意味着方法属于MyClass类,而不是MyClass类的对象。在本教程的后面,你将学习更多对象、对象方法等相关知识。void
表示该方法没有返回值。在本章后面,你将学习更多关于返回值的知识
调用方法
要调用Java中的方法,写下方法的名称,后跟圆括号()
和分号;
在下面的例子中,调用myMethod()
方法打印文本:
示例
在main
内部,调用myMethod()
方法:
public class MyClass { static void myMethod() { System.out.println("我被执行了!"); } public static void main(String[] args) { myMethod(); } } // 输出 "我被执行了!"
方法可以被调用多次:
示例
public class MyClass { static void myMethod() { System.out.println("我被执行了!"); } public static void main(String[] args) { myMethod(); myMethod(); myMethod(); } } // 我被执行了! // 我被执行了! // 我被执行了!
方法参数
数据可以作为参数传递给方法。在方法中参数充当变量。
参数在方法名后面的圆括号中指定。你可以添加任意数量的参数,只需用逗号分隔即可。
下面的示例中,myMethod
方法将一个名为fname
的字符串作为参数。当方法被调用时,向方法传递一个名字,这个名字在方法中用于打印全名:
示例
public class MyClass { static void myMethod(String fname) { System.out.println("张" + fname); } public static void main(String[] args) { myMethod("三丰"); myMethod("翠山"); myMethod("无忌"); } } // 张三丰 // 张翠山 // 张无忌
返回值
上面例子中,使用的void
关键字,表示方法没有返回值。如果想让方法返回一个值,可以使用一个基本类型(如int
, char
等)来代替void
,并在方法中使用return
关键字:
示例
public class MyClass { static int myMethod(int x) { return 5 + x; } public static void main(String[] args) { System.out.println(myMethod(3)); } } // 输出 8 (5 + 3)
下面这个例子,返回一个方法的两个参数之和:
示例
public class MyClass { static int myMethod(int x, int y) { return x + y; } public static void main(String[] args) { System.out.println(myMethod(5, 3)); } } // 输出 8 (5 + 3)
还可以将结果存储在一个变量中(推荐):
示例
public class MyClass { static int myMethod(int x, int y) { return x + y; } public static void main(String[] args) { int z = myMethod(5, 3); // 结果存储到一个变量 System.out.println(z); } } // Outputs 8 (5 + 3)
一个带有If…Else的方法
方法中使用if...else
很平常:
示例
public class MyClass { // 创建checkAge()方法,方法有一个整型参数:age static void checkAge(int age) { // 如果年龄小于18岁,打印“拒绝访问” if (age < 18) { System.out.println("拒绝访问 - 年龄太小!"); // 如年龄大于18岁,打印“允许访问” } else { System.out.println("允许访问 - 年龄合格!"); } } public static void main(String[] args) { checkAge(20); // 调用checkAge方法,并向它传递年龄为20的值 } } // 输出 "允许访问 - 年龄合格!"
出错了'try catch'结束了
本文来自博客园,作者:大码王,转载请注明原文链接:https://www.cnblogs.com/huanghanyu/