第二章 Java程序设计基础

本章教学内容:

2.1 标识符和关键字

    在各种计算机编程语言中,每种语言都使用一些特定的字符来构造基本词法单位,进而描述程序语句。Java语言中主要词法单位有五种:标识符、关键字、分隔符、运算符、注释。

2.1.1 标识符

    �标识符是程序员在编程中定义的词法单位,它的作用是用来为程序中要处理的各种变量、常量、方法、对象以及类等命名,以后就可以通过名字来访问或修改某个数据的值。

    �标识符的构成:在Java语言中,标识符是由字母、下划线(_)、美元符($)开头的字母、下划线(_)、美元符和数字组成的字符序列

    Java语言中标识符的命名必须满足以下六个原则:

    �标识符必须以字母、下划线(_)或美元符($)开头,后面可以跟字母、数字、下划线或美元符;

    �标识符可以包含数字,但不能以数字开头;

    �除下划线“_”和美元符“$”符号外,标识符中不能包含任何特殊字符,如空格;

    �标识符中的字母区分大小写,比如,“abc”和“Abc”是两个不同的标识符;

    �对于标识符的长度没有限制;

    �不能使用Java关键字作为标识符。

2.1.2 关键字

    Java语言中有一些已经被赋予特殊含义的、由系统定义的单词,这些单词被称为关键字或保留字。关键字不能作为标识符使用

JAVA语言的主要关键字

主要关键字

2.1.3 Java语言的分隔符

�Java语言的分隔符的作用:

         用来分割和组合标识符,用来帮助Java编译器正确阅读和理解Java源程序。

�Java中的分隔符分为以下两类:

(1)没有特定意义,只起分割标识符作用的空白符。包括空格、回车、换行和制表符(Tab)。

(2)拥有确定含义的普通分隔符

Java语言的分隔符

分隔符

2.2 常量和变量

2.2.1 常量

    在程序运行过程中一直不会改变的量称为常量。常量在整个程序中只能被赋值一次。在Java语言中声明一个常量,除了要指定数据类型外,还需要通过final关键字进行限定。

    声明常量的一般格式如下:

        final  数据类型  常量名=值

2.2.2 变量

    变量是在程序执行过程中其值可以改变的量,是Java程序中最基本的存储单元。变量须用标识符进行标识,该标识符称为变量名。程序编译时,会根据变量类型为每一个变量分配一段连续的内存单元,用于存储该变量的取值。

1.变量的声明

变量声明的一般格式为:

             数据类型  变量名1[=值] [,变量名2[=值]…];

           其中,方括号表示可选部分,其含义是在定义变量时可以设置变量的初始值,如果在同一语句中要声明多个变量,则变量间用逗号隔开。

变量的声明和使用规则:

(1)变量的声明必须遵从标识符的命名规则。

(2)所有变量都可大小写混用,但首字符应小写。

(3)尽量不要使用下划线和$符号。

(4)可以先声明再赋值,如:

 int i;

 i=9;

 也可以声明的同时进行赋值:

 int i=9; //声明一个类型为 int的变量i,并将它赋值为 9。

(5)没有赋值的变量是不可以使用的。如:

 int i;

 System.out.println(i); //这句代码是错误的。

(6)在同一作用域内变量不能重复定义。

2.变量的作用域

    Java允许变量在任何程序块内被声明。程序块被包括在一对大括号中。一个程序块定义了一个作用域(scope ),一个作用域决定了其中所定义变量的可见性和生存期。

提示:

    Java不允许在两个嵌套的语句块内声明两个完全同名的变量。

2.3 数据类型

    在程序设计中要使用和处理各种数据,数据按照其表示信息的含义和占用空间的大小来区分为不同的数据类型。Java是一门强类型语言,即所有的变量都必须显式声明其类型。

    Java语言的数据类型可以分为基本数据类型引用数据类型两大类。

2.3.1 基本数据类型

八大基本数据类型

1.整型数据类型

    不含小数点的数字为整数类型。例如:-124、948、0等。

    整数类型包含以下四种:byte、short、int、long。 

(1)整型字面常量

    整型数据可以表示为10进制、8进制、16进制。

    10进制:如123、-34;

    8进制:

    如0123

    16进制:如0x64

    整型默认为int型,若是长整型需要在数据后加上字母L。例如:123为int型,而123L则是long型。

(2)整型变量

    使用关键字int、byte、short、long来定义整型变量,定义时也可以赋给初值。

    例如:

    int   x=123;

    long   y=123L;

    long   z=123l;

    byte   luckyNumber=7;

    short smallNumber=1234;

2.浮点数据类型

含小数点的数字为浮点类型。例如:-38.32、34.0等。

浮点类型包含以下两种:float、double。

(1)浮点型字面常量

浮点型数据有两种表示形式:

小数形式:如1.23,-3.45,1.0

科学计数法形式:如1.23456E+3、12345E-4,其中e或E之前必须有数字,且e或E后面的指数必须为整数。

实型默认为double型,数字后加f或F为float型,加d或D为double型。

(2)浮点型变量

使用关键字float 、double 来定义浮点型变量,定义时也可以赋给初值。

例如:

double x=1.496E8;

float y=9E-28F;

double z=0.123;

float w=0.123F;

3.布尔数据类型

(1)布尔型字面常量

只有两个值:true和false

(2)布尔型变量

使用关键字boolean来定义布尔型变量,定义时也可以赋给初值。

例如:boolean  state=true;或  boolean state;state=true;

4.字符数据类型

(1)字符型字面常量

    字符型字面常量是由一对单引号括起来的单个字符或以反斜线(\)开头的转义符。在Java中,一个字符代表一个16位无符号的Unicode字符,每个字符占2个字节。

例如:'A'、'b'、'?' 、'!'、'9'、'好'。

(2)字符型变量

使用关键字char来定义字符变量,用于存储一个字符,定义时也可以赋给初值。

如:char myChar='A';

(3)字符集

ASCII(American Standard Code for Information Interchange) 字符集:使用7位代码表示大小写字母、数字0~9以及若干控制字符,如换行符。

ISO-8859-1 Latin-1字符集:在西欧,用户希望字符集能够表示他们本国字符集的所有字符,ASCII字符集因而被扩展到8位,即增加了128个字符,用于表示英文中不存在的各种西欧语言的字符。

Unicode字符集:是ISO标准16位字符集,支持65536个不同的字符。其中大约有21000个字符专门用于中文、日文和韩文的表意文字。

ASCII、ISO Latin-1都是Unicode的子集。

(4)转义字符

    除了上述形式的字符常量值之外,Java还允许对一些难以用一般字符来表示的字符使用一种特殊形式的字符常量值来表示,这种特殊的字符称为转义字符。转义字符是以一个“\”开头的字符序列。表2-4列出了Java中常用的转义字符及其含义。

常用的转义字符

2.3.2 引用数据类型


五种引用类型


2.3.3 基本数据类型转换

    在Java中,数据的类型如果是相容的,那么一种数据类型就可以转换成另外一种数据类型。数据类型转换的方式有“自动类型转换”和“强制类型转换”两种。

1.自动类型转换

            将一种类型的变量赋给另一种类型的变量时,如果两种类型兼容并且目标类型大于源类型,就会发生自动类型转换。自动类型转换会“隐含”发生。这些基本类型按精度从“低”到“高”的顺序排列如下:(扩大是隐含的)

   byte  short   int   long   float     double

2.强制类型转换

表示范围大的数据类型要转换成表示范围小的数据类型,需要用到强制类型转换。

强制类型转换的格式为:(类型名)要转换的表达式;

例如:

int x=(int)23.89;

long y=(long)34.98F;

如果输出x,y的值将是23和34。 

2.4 运算符和表达式

    Java提供了丰富的运算符,按照运算符操作数的数目划分,可以将运算符分为单目运算符、双目运算符和三目运算符。

    按照运算符的功能划分,可以将运算符分为算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符和条件运算符。

2.4.1 算术运算符和算术表达式

算术运算符

2.4.2 关系运算符和关系表达式

关系运算符

2.4.3 逻辑运算符和逻辑表达式

逻辑运算符

    逻辑运算具有短路特性。所谓短路,就是当参与运算的第一个操作数已经足以推断出这个表达式的值的时候,另外一个操作数就不会被执行。

例如:

int i=5;

boolean j=false&&(++i>5);

System.out.println(i);

这时输出结果为5而不是6。

2.4.4 条件运算符和条件表达式

    条件表达式的一般形式为:表达式1?表达式2:表达式3

    其中表达式1的值为布尔类型,若表达式1的值为真,则返回表达式2的值,否则返回表达式3的值。

提示:

    条件表达式结果的类型为表达式2和表达式3中精度较高的类型。例如:表达式3>2?4:5.0的结果为4.0。

2.4.5 赋值运算符和赋值表达式 

    赋值运算符为一个单独的“=”,它将其右侧表达式的值赋给左侧的变量。

复合赋值运算符

2.4.6 位运算符和位运算表达式

    位运算是指按二进制位进行的运算。因为在系统软件中,常要处理二进制位的问题。例如:将一个存储单元中的各二进制位左移或右移一位,两个数按位相加等。Java语言提供了位运算的功能,位运算的操作数和结果都是整型。 

位运算符

1. “按位与”运算符(&)

    按位与是指参加运算的两个整数,按二进制位进行“与”运算。如果两个相应的二进制位都为1,则该位的结果值为1;否则为0。

    即:0&0=0,0&1=0,1&0=0,1&1=1。

    “按位与”运算的用途:

    (1) 清零。

    (2) 取一个数中某些指定位。

2.“按位或“运算符(|)

    按位或是指参加运算的两个整数,按二进制位进行“或”运算。如果两个相应的二进制位中有一个为1,该位的结果值为1,否则为0。

    即 0|0=0,0|1=1,1|0=1,1|1=1

    “按位或”运算的用途:

    (1)按位或运算常用来对一个数据的某些位定值为1。

    例如:如果想使一个数a的低4位改为1,只需将a与017进行按位或运算即可。

    (2)和“按位与”运算一起组合新数。

    例如:将整数a的低16位和整数b的高16位取出组合成整数c。则c=(a&0x00ff)|(b&0xff00)。

3.“按位异或”运算符(^)

    异或运算也称XOR运算。它的规则是:若参加运算的两个二进制位相同则结果为0,否则为1。

    即:0^0=0,0^1=1,1^0=1, 1^1=0

    例如:071^052=023 (八进制数)

    异或运算的用途:

    (1) 使特定位翻转。

    设有01111010,想使其低4位翻转,即1变为0,0变为1。可以将它与00001111进行^运算。

    (2) 与0相异或,保留原值。

    例如:012^00=012

    (3) 交换两个值,不用临时变量。

    例如:a=3,b=3。

    想将a和b的值互换,可以用以下赋值语句实现:

    a=a^b;b=b^a;a=a^b;

4. “按位取反”运算符(~)

    ~是一个单目(元)运算符,用来对一个二进制数按位取反,即将0变1,将1变0。例如:~025是对八进制数25(即二进制数00010101)按位求反。

5.“按位左移”运算符(<<)

    左移运算符用来将一个数的各二进制位全部左移若干位。左移后高位溢出舍弃,低位补0。

    例如:a<<2   将a的二进制数左移2位,右边的空位补0。

    若a=15,即二进制数00001111,a左移2位得00111100(十进制数60)

    左移1位相当于该数乘以2,左移2位相当于该数乘以22,15<<2=60,即乘4……依此类推,左移n位相当于该数乘以2n。但此结论只适用于该数左移时被溢出舍弃的高位中不包含1的情况。

6.“按位右移”运算符(>>)

    右移运算符用来将一个数的各二进制位全部右移若干位。右移后空出的高位补符号位,低位舍弃。

    例如:a>>2表示将a的各二进制位右移2位,移到右端的低位被舍弃,对空出的高位而言,如果a为正数,则补0,如果a为负数,则补1。

    右移一位相当于除以2,右移n位相当于除以2n。但此结论只适用于该数右移时被舍弃的低位中不包含1的情况。

7.“无符号右移”运算符(>>>)

    无符号右移运算符用来将一个数的各二进制位全部右移若干位。右移后空出的高位补0,低位舍弃。

2.4.7 其他运算符 

其他运算符


2.4.8 运算符优先级和结合性

    Java语言规定了运算符的优先级和结合性。

    1.运算符优先级是指同一表达式中多个运算符被执行的先后次序,即运算符的优先级决定了表达式中运算执行的先后顺序。

    2.运算符的结合性决定了相同级别的运算符的先后执行顺序。左结合性是指同一优先级的运算从左到右顺序执行;右结合性是指指同一优先级的运算从右到左顺序执行。例如,加减的结合性是从左到右,8-5+3相当于(8-5)+3。逻辑否运算符“!”的结合性是右到左,!!x 相当于!(!x)。

    3.在表达式求值时,按照优先级的顺序由高到低依次执行。同一优先级的按照结合性执行。

优先级

2.5 基本类型数据的输入和输出

2.5.1 从命令行输入输出数据

1.向控制台输出数据

    标准输出流(System.out)中为我们提供了三种向控制台输出数据的方法

    (1)print(输出项):实现不换行的数据输出。输出项可以是变量名、常量、表达式。

    (2)println(输出项):数据输出后换行。输出项可以是变量名、常量、表达式。

    (3)printf("格式控制部分",表达式1,表达式2,…表达式n):带格式描述的数据输出。格式控制部分由格式控制符和普通字符组成,普通字符原样输出;常用的格式控制符有%d(代表十进制数)、%c(代表一个字符)、%f(代表浮点数)、%e(代表科学计数法表示的浮点数)、%s(代表字符串)、%n(代表换行符)。

2.从控制台输入数据

    (1)使用Scanner类实现数据的输入

    使用Java语言提供的java.util.Scanner类中的方法可以实现从控制台输入数据。使用步骤如下:

    第一步:在程序开头添加一行导入包语句:

    import java.util; //Scanner类定义在java.util包中。

    第二步:构造Scanner类对象

    Scanner in=new Scanner(System.in);

    第三步:使用Scanner类的各种方法实现输入操作,

    next()系列方法有:

    nextInt():输入整数

    nextLine():输入字符串

    nextDouble():输入双精度数

    next() :输入字符串(以空格作为分隔符)

    (2)使用数据输入流实现数据的输入

    有关数据输入流的相关知识请参见第9章。这里只简单的用一个例子介绍利用字符输入流输入字符串的过程。

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

public class IoDemo{

  public static void main(String[]args){

 String s="";

System.out.println("请输入一个字符串:");

     try{                                 //使用异常处理语句

BufferedReader in=new BufferedReader(new InputStreamReader(System.in));

        s=in.readLine();

      }catch(IOExceptione){}

      System.out.println("你输入的字符串是:"+s);

}}

2.5.2. 使用Swing对话框实现数据的输入输出

1.使用Swing对话框实现数据的输出

    使用javax.swing.JOptionPane包中的showMessageDialog()方法将弹出消息显示对话框,可以用该对话框显示输出结果。该方法的具体用法请参见第11章。这里只简单的用一个例子介绍利用showMessageDialog()方法输出数据的过程。

例子

2. 使用Swing对话框实现数据的输入

    使用javax.swing.JOptionPane包的showInputDialog()方法从输入对话框中获得字符串。该方法的具体用法请参见第11章。这里只简单的用一个例子介绍利用方法showInputDialog()输入字符串的过程。

例子

2.6 程序流程控制语句

Java的控制语句分为以下三类:选择、循环和跳转。

2.6.1 选择结构语句

    选择结构又称分支结构,是根据判断条件的成立与否决定要执行哪些语句的一种程序结构,它的作用是让程序更具有选择性。

Java语言中提供了两种选择语句:if语句和switch语句。

1.if 语句

if语句是最常用的选择结构,其语法格式如下:

if(条件表达式)

  语句1

[else语句2]

格式说明:

(1)条件表达式是布尔表达式,结果为true或false;

(2)语句1和语句2可以是单独一个语句,也可以是一个语句块。当条件为true时执行语句1,否则执行语句2。

(3)else部分可以省略。

2.if语句的嵌套

    所谓if语句的嵌套是指if语句中的语句1或语句2又是if语句的情况。当判断条件比较复杂,在一个布尔表达式中不能完全表示时,可以采用嵌套的if语句来实现。if语句的嵌套结构较多,其中最常用的嵌套结构为“if-else if”格式。

if-else if嵌套结构的语法格式如下:

if(判断条件1)

 语句1;

else if(判断条件2)

   语句2;

else

 语句n+1:

}

3.switch语句

switch语句是多分支的开关语句,它基于一个表达式的值来执行多个分支语句中的一个语句。

switch语句语法格式如下:

switch(表达式){

  case常量表达式1:语句1;break;

  case常量表达式2:语句2;break;

  …

  case常量表达式n:语句n;break;

  [default:语句n+1;]

}

说明:

(1)switch语句执行时首先计算表达式的值。表达式的类型必须是以下5种类型之一:int、byte、char、short、long。同时还要保证与case分支判断值的类型一致。

(2)case子句只是作为执行语句的入口。switch语句把表达式返回的值依次与每个case子句中的常量值相比较,如果遇到匹配的值,则从该入口进入switch语句,执行该case后面的语句块,如果都不符合则执行default后的语句。如果case子句后没有break语句,则流程会一直向下执行,直到遇到break语句或到switch语句的尾端才结束switch语句的执行。

(3)default子句是可选的。

(4)break语句用来在执行完一个case分支后,使程序跳出switch语句,即终止switch语句的执行。

(5)case后面的常量值必须互不相同

(6)多个不同的case值要执行一组相同的操作时,可以共用一组语句。

2.6.2 循环结构语句

    在程序设计中,有时需要反复执行一段相同的代码,直到满足终止循环的条件为止。为了简化程序结构,Java语言也像c/c++语言一样提供了循环结构。其中反复被执行的语句称为循环体。在Java语言中有三种常用的循环语句,分别是while语句、do…while语句和for语句。

一个循环结构一般要包含四个因素:

(1)初始化部分:用来设置循环控制的一些初始条件。

(2)判断部分:循环的控制条件,是一个布尔表达式,用来判断循环要不要继续执行。

(3)循环体部分:被循环控制反复执行的代码。

(4)迭代部分:用来修改循环的控制条件,以使循环趋向于终止。

1.while语句

while语句是一种先判断条件,然后根据条件决定是否执行循环体的循环语句。

while语句的语法格式如下:

while(循环条件){

   循环体

}

关于while语句的三点说明:

(1)循环体如果包含一个以上的语句,应该用花括弧括起来,以语句块的形式出现。

(2)在循环体中应有使循环趋向于结束的语句,即循环要素中的迭代部分。

(3)如果条件一开始就为false,则循环体一次都不执行。

2.do…while语句

    do…while语句用于循环体至少执行一次的情形。它和while语句类似,区别是while语句为先判断条件是否满足再执行循环体,而do…while语句则先执行循环体一次后,再判断条件是否满足。因此do…while语句中的循环体至少被执行一次,而while语句的循环体可能一次都不执行。

do…while语句语法格式如下:

do{

循环体

}while(条件);

3.for循环语句

    for语句使用最为灵活,不仅可以用于循环次数已经确定的情况,而且可以用于循环次数不确定而只给出循环结束条件的情况,它完全可以代替while语句。

for循环语句的语法格式如下:

for(表达式1;表达式2;表达式3){

循环体

}

其中:

表达式1:初始化表达式,负责对控制变量赋初值。

表达式2:判断条件表达式,值为布尔型的表达式,指定循环条件。

表达式3:循环控制变量修改表达式,负责修改循环控制变量,改变循环条件。

关于for语句的几点说明:

(1)for语句的一般形式中的表达式1、表达式2、表达式3都可以省略,但是分号不能省略。

(2)表达式2必须是关系表达式(如i<=100)或逻辑表达式(如a<b&& x<y)

(3)表达式1可以是设置循环变量初值的赋值表达式,也可以是与循环变量无关的其他表达式。如:for (sum=0;i<=100;i++)  sum=sum+i;

(4)表达式3也可以是与循环控制无关的任意表达式。

(5)表达式1和表达式3可以使用用逗号分割的语句序列来进行多个操作。

如:for(i=1,sum=0;i<=100;sum+=i,i++);  但是这种用逗号分割的语句序列只适用于for循环

提示: 利用for循环编程时,for的三个表达式最好都与循环控制有关。

4.循环的嵌套

    一个循环体内又包含另一个完整的循环结构称为循环的嵌套。内嵌的循环中还可以嵌套循环,这就是多层循环。三种循环(while循环、do-while循环和for循环)可以互相嵌套。

2.6.3 流程跳转语句

    Java中有三种跳转语句,分别是:break语句、continue语句、return语句。

1.break语句

    在前面所学的switch语句中,break语句已经得到了应用。在Java提供的各类循环中,break语句也提供了一种方便的结束循环的方法。

(1)break;  //用来终止当前循环

(2)break 标号;//结束标号所指的代码块,程序流程从内层循环或内层程序块中退出,执行代码块后面的语句。

2.continue语句 

    continue语句只能用在循环语句中,用于结束本次循环或指定的标号循环,即跳过循环体中下面尚未执行的语句,然后进入循环的起始处进行终止条件判断,以决定是否继续循环。

Continue语句有以下两种形式:

(1)continue;//终止当前循环,

(2)continue 标号;//直接跳转到标号指明的外层循环中

3.return语句 

    return语句通常用在一个方法的最后,其作用是将程序流程从当前方法(被调方法)中返回到主调方法中。return语句有如下两种使用形式:

(1)return表达式;

(2)return;

    当含有return语句的方法被调用时,执行return语句将从当前方法中退出,返回到调用该方法的语句处。如果执行的return语句后带有表达式,将同时返回表达式的结果;如果执行的是第二种形式的return语句,则不返回任何值。

2.7 数组

    数组是由一组相同类型的数据按一定顺序排列的集合。

    数组的主要特点如下:

     (1)数组中的所有元素都具有相同的数据类型。

     (2)组中的各元素是有先后顺序的,它们在内存中按照这个先后顺序连续存放在一起。

     (3)每个数组元素使用数组名和它在数组中的顺序位置来表示。如a[0]表示名字为a的数组中的第一个元素,a[1]表示数组a中的第二个元素。

2.7.1  一维数组

    一维数组是最简单的数组,其逻辑结构是线性表。

    使用一维数组的一般过程是:一维数组的声明、创建和引用

    1.一维数组的声明

    声明数组要定义数组的名称、维数和数组元素的类型。声明一维数组的格式有如下两种形式:

    (1)数组类型    数组名[];

    (2)数组类型[]    数组名;

    例如: int  score[];或int[] score;          //声明一个一维数组,数组名为score,元素类型为int型。

    说明:

    (1)数组类型可以是任意的Java类型,包括基本类型和引用类型;

    (2)数组名必须是合法的标识符;

    (3)[]中不能有内容。

    2.一维数组的创建

    创建数组的方式有如下两种:

    (1)用运算符new创建数组

    格式如下:数组名=new 数组类型[长度];

    例如:score = new int[3] 或int n=3;score = new int[n];  

    声明数组与创建数组两个步骤可以一起完成,两步合并如下:int  score[] = new int[3];

数组score的存储分配

    (2)用静态的初始化方法创建数组

    在定义数组的同时对数组元素分配空间并赋值,这种赋值方法,称为对数组的静态内存分配方式,也称为对数组的静态初始化。

    其格式如下:

    数据类型[] 数组名 ={初值1,初值12,…,初值n};或数据类型[] 数组名 =new数据类型[]{初值1,初值12,…,初值n};

    例如:int score[] ={7,6,5}; 或 int score[] =new int []{7,6,5}; 

    3. length的使用

    对于创建好的数组,其元素个数称为数组的长度。对于一维数组,“数组名. length”的值就是数组的长度。

    例如:score.length就表示数组score的长度。

    4.一维数组元素的引用

    数组元素的引用方式:

    数组名[下标];

    例如:score[0]代表第1个元素,score[1]代表第2个元素,score[n]代表第n+1个元素。

    其中“下标”可以是整型常量或表达式。例如int i=2; score[i-1]=5;

    Java数组元素的下标从“0”开始,到“长度-1”结束。引用数组的元素时下标不能超出范围,否则会产生“数组访问越界异常”

2.7.2 多维数组

    Java中,多维数组被看作是数组的数组,因此,多维数组的声明和创建是通过对一维数组的嵌套来实现的。即数组的元素又是数组的形式。多维数组中最常用的是二维数组,下面以二维数组为例介绍多维数组的使用。

    1.二维数组的声明

    数组元素类型  数组名[][]; 或   数组元素类型[][]  数组名;

    例如:int a[][]; 或 double [][]b;

    2.二维数组的创建

    对于多维数组,有两种为数组分配内存的方式:

    (1)直接为每一维分配内存空间。

    格式如下:数组名= new 数据类型[行数][列数];   

    例如:  a=new int[2][5]; //创建了一个包括两行五列的二维数组a。

    (2)从最高维开始,分别为每一维分配内存空间。

    例如:a= new int[2][]; //创建了一个包括两行的二维数组a。

              a[0] =new int[3]; //二维数组a的第一行的长度为3。

              a[1] =new int[5]; //二维数组a的第二行的长度为5。

     注意:Java语言中,由于把二维数组看作是数组的数组,数组空间不是连续分配的,所以不要求每一维的大小都相同

    3.二维数组的初始化

    其格式如下:

    数据类型  数组名 [][]= {{第1行的初值},{第2行的初值},…{第n行的初值}};

    举例说明:int a[][] ={ {5,6,7,8,9},{1,2,3} };

    上例中声明了一个整型数组a,数组有2行,第一行有5个元素,第二行有3个元素。

    在二维数组中,想要获取整个数组的行数,则可以使用“数组名.length”来获取。要想获取某行元素的个数,则可以使用“数组名[下标].length”来获取。

    4.二维数组元素的引用

    引用方式:数组名[行下标][列下标];

    例如:a[0][0]代表第1行第1列的元素,a[1][2]代表第2行第3列的元素。

    其中“行下标”和“列下标”可以是整型常量或表达式,并且都是从“0”开始,到“长度-1”结束。引用二维数组的元素时下标不能超出范围,否则会产生“数组访问越界异常”。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,561评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,218评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,162评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,470评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,550评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,806评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,951评论 3 407
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,712评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,166评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,510评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,643评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,306评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,930评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,745评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,983评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,351评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,509评论 2 348

推荐阅读更多精彩内容