……

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

image

2. 点击”环境变量”

image

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

image

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

image

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

在下面的例子中,数字10050是操作数,+是运算符:

示例

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

在下面的例子中,数字10050是操作数,+是运算符:

示例

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

注意,在firstNamelastName之间,我们添加了一个空格。

还可以使用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数据类型,可以取值:truefalse

布尔值

布尔类型是用boolean关键字声明的,只能取值: truefalse

示例

boolean isJavaFun = true;
boolean isFishTasty = false;
System.out.println(isJavaFun);     // 输出 true
System.out.println(isFishTasty);   // 输出 false

布尔表达式

布尔表达式是返回布尔值truefalse的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的值进行比较。
  • 如果匹配,则执行相关联的代码块。
  • breakdefault关键字是可选的,本章稍后将对此进行描述

下面的例子,使用周工作日编号来计算周工作日名称:

示例

复制代码
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循序中使用breakcontinue:

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中有很多异常类型: ArithmeticExceptionClassNotFoundExceptionArrayIndexOutOfBoundsExceptionSecurityException, 等等.

异常类型通常与自定义方法一起使用。如果不理解下面的例子,不必担心,下一章中会了解更多。

示例

如果年龄小于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关键字,表示方法没有返回值。如果想让方法返回一个值,可以使用一个基本类型(如intchar等)来代替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'结束了

 

 posted on 2020-10-12 10:27  大码王  阅读(281)  评论(0编辑  收藏  举报
复制代码