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. 我的电脑->属性->高级系统设置

java从0到1之(1)基础_运算符

2. 点击”环境变量”

java从0到1之(1)基础_运算符_02

3. 如下图所示,打开”Path”设置对话框

java从0到1之(1)基础_字符串_03

4. 如下图所示,把Java可执行程序(bin)目录添加到windows的Path环境变量中

java从0到1之(1)基础_运算符_04

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

换页

数字相加和字符串拼接



警告: Java中,加法和字符串拼接都是用`+`运算符,2个数字相加是值相加,2个字符串相加是字符串拼接。


两个数字相加,结果将是一个数字:

示例



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");
}


我们也可以测试变量:

示例



int x = 20;
int y = 18;
if (x > y) {
System.out.println("x 大于 y");
}


在上面的例子中,我们使用两个变量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;
if (time < 18) {
System.out.println("白天");
} else {
System.out.println("夜晚");
}


可以简单地写为:

示例



int time = 20;
String result = (time < 18) ? "白天" : "夜晚";
System.out.println(result);


Java Switch

Java Switch语句

使用​​switch​​语句,可以从许多代码块中选择一个执行。

语法



switch(表达式) {
case x:
// 代码块
break;
case y:
// 代码块
break;
default:
// 代码块
}


​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,循环中的代码就会反复运行:

示例



int i = 0;
while (i < 5) {
System.out.println(i);
i++;
}


注意: 不要忘记给变量​​i​​递增,否则循环将永远不会结束!

Do/While

​do/while​​循环是​​while​​循环的变体。此循环将先执行一次代码块,然后再检查条件,只要条件为真,循环将继续。

语法



do {
// 要执行的代码块
}
while (条件);


下面的示例使用do/while循环,循环将至少执行一次,即使条件是假的。因为会先执行一次代码块,然后再检查条件:

示例



int i = 0;
do {
System.out.println(i);
i++;
}
while (i < 5);


注意: 不要忘记给变量​​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时跳出循环:

示例



for (int i = 0; i < 10; i++) {
if (i == 4) {
break;
}
System.out.println(i);
}


Java Continue

​continue​​语句中断本次循环中的代码执行,但循环会继续。

注意:​​continue​​语句之后将继续执行下一次循环,而​​break​​语句是跳出整个循环。

这个例子,当i等于4时跳过,不打印:

示例



for (int i = 0; i < 10; i++) {
if (i == 4) {
continue;
}
System.out.println(i);
}


While 循环中的 break 与 continue

也可以在while循序中使用​​break​​和​​continue​​:

Break 示例



int i = 0;
while (i < 10) {
System.out.println(i);
i++;
if (i == 4) {
break;
}
}


Continue 示例



int i = 0;
while (i < 10) {
if (i == 4) {
i++;
continue;
}
System.out.println(i);
i++;
}


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​​关键字成对出现:

语法



try {
// 要尝试的代码块
}
catch(Exception e) {
// 处理错误的代码块
}


考虑下面例子

这将生成一个错误,因为​​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中创建一个方法:



public class MyClass {
static void myMethod() {
// 要执行的代码
}
}


  • 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'结束了