Java基础程序设计主要包括Java的关键字、标识符、数据类型、运算符、流程控制和数组共六部分内容。


1. 关键字

  关键字即被Java语言赋予特殊含义,用做专门用途的字符串或单词,其特点是所有字母都为小写,具体如下表所示:

关键字类别

关键字

用于定义数据类型的关键字

class、interface、enum、byte、short、int、long、float、double、char、boolean、void

用于定义数据类型值的关键字

true、false、null

用于定义流程控制的关键字

if、else、switch、case、default、while、do、for、break、continue、return

用于定义访问权限修饰符的关键字

private、protected、public

用于定义类、函数、变量修饰符的关键字

abstract、final、static、synchronized

用于定义类与类之间关系的关键字

extends、implements

用于定义创建、引用与判断实例的关键字

new、this、super、instanceof

用于异常处理相关操作的关键字

try、catch、finally、throw、throws

用于包相关操作的关键字

package、import

其他修饰符关键字

native、strictfp、transient、volatile、assert

  注意:除关键字外,Java还定义有保留字,即现有Java版本尚未使用,但以后版本可能会作为关键字使用。自己命名标记符时要避免使用保留字,如byValue、cast、future、generic、inner、operator、outer、rest、var 、goto 、const。


2. 标识符

java程序设计教程第二版电子版 java程序设计基础第二版_数据类型


3. 数据类型

  变量即内存中的一块区域,拥有变量名和数据类型,该区域的数据可以在统一类型范围内通过赋值不断变化;变量均有初始化值,通过使用变量名来访问其所在内存中的这块区域的。注意:计算机以补码的形式存储所有的整数。

3.1 变量的分类

  按数据类型划分:

  • 基本数据类型:数值型(byte、short、int、long、float、double)、字符型(char)和布尔型(boolean);
  • 引用数据类型:类(class,如String)、接口(interface)、数组([])。

  按声明位置划分:

  • 成员变量:类变量(static修饰)、实例变量(无static修饰);
  • 局部变量:形参(方法签名中定义的变量)、方法局部变量、代码块局部变量;
  • 异同之处:成员变量和局部变量都有生命周期,但局部变量除形参外需显式初始化。
3.2 基本数据类型

基本数据类型

占用存储空间

表数范围

备注

byte

1字节=8bits

-128~127

……

short

2字节

-215~215-1

……

int

4字节

-231~231-1

Java整型常量默认为int型

long

8字节

-263~263-1

声明long型常量需后加“l”或“L”

float

4字节

-3.403E38~3.403E38

单精度浮点型:声明float型常量需后加“f”或“F”,如.512f、5.12e2f、51.2E-2等

double

8字节

-1.798E308~1.798E308

双精度浮点型:Java浮点型常量默认为double型;可使用科学计数法形式表示

char

2字节

单引号括起,涵盖所有书面语字符和转义字符

可直接使用Unicode值表示字符常量,如’\uXXXX’,其XXXX代表十六进制整数;char类型是可以进行计算的,因其有对应的Unicode码

boolean


true、false,无null

与C语言不同,不可用0或非0值代表false或true

3.3 基本数据类型转换

  (1) 自动类型转换:容量小的类型自动转换为容量大的数据类型,示意图如下:

  

java程序设计教程第二版电子版 java程序设计基础第二版_数据类型_02

  • 多种类型的数据混合运算时,系统先自动将所有数据转换成容量最大的那种数据类型,再进行计算;
  • byte、short、char之间不会相互转换,其三者之前在计算时会自动转换为int类型;
  • 当把任何基本类型的值和字符串值进行连接运算时(+),基本类型的值将自动转化为字符串类型。

  (2) 强制类型转换:自动类型转换的逆过程,将容量大的转换为容量小的数据类型

  • boolean类型不可以转换为其它的数据类型;
  • 使用时要加上强制转换符“( )”,但可能造成精度降低或溢出;
  • 字符串不能直接转换为基本类型,需要借助基本类型对应的包装类来实现。

4. 运算符

  运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等,主要包括算术运算符、赋值运算符、比较运算符、逻辑运算符、位运算符和三元运算符,具体说明如下:

运算符类型

具体运算符

注意事项

算术运算符

+(正号、加、字符串连接)、-(负号、减)、*、/、%、++(自增)、- -(自减)

取模运算结果的符号取决于被模数,且结果不一定是整数

赋值运算符

=、+=、-=、*=、/=、%=

支持连续赋值;扩展赋值运算符既能实现运算,又不会改变原有数据类型

比较运算符

==、!=、>、<、>=、<=、instanceof

也叫关系运算符,结果为true或false

逻辑运算符

&(逻辑与)、|(逻辑或)、!(逻辑非)、&&(短路与)、||(短路或)、^(逻辑异或)

注意&与&&的区别

位运算符

<<(左移)、>>(右移)、>>>(无符号右移)、&(按位与)、|(按位或)、^(按位异或)、~(反码)

防止有效位移出;可使用按位异或运算实现两个变量值的互换

三元运算符

(条件表达式) ? 表达式1 : 表达式2

要求两个表达式的数据类型一致


5. 流程控制

程序流程控制

具体内容

注意事项

顺序结构

从上倒下逐行执行,中间无任何判断和跳转

成员变量采用合法的前向引用

分支结构

if-else

switch-case

注意if条件表达式的前后顺序

switch变量的数据类型必须为byte、short、char、int、枚举或String

循环结构

for循环

while循环

do-while循环

可以实现嵌套循环

组成部分:初始化(init_statement)、循环条件(test_exp)、循环体(body_statement)、迭代(alter_statement)四部分

特殊流程控制

break语句:用于终止某个语句块的执行

continue语句:用于跳出某个循环语句块的一次执行

return语句:用于结束循环,直接结束当前方法

break语句:多层嵌套时可通过标签指明要终止哪一层语句块

continue语句:多层嵌套时可通过标签指明跳过哪一层循环

continue用于终止此次循环,而break用于终止本层循环,其之后均不能有其他语句


6. 数组

  数组是多个相同类型数据的组合,实现对这些数据的统一管理;其中,数组中的元素可以是任何数据类型,包括基本数据类型和引用数据类型;而数组本身属于引用类型,数组型数据是对象,其中的元素相当于该对象的成员变量。

6.1 一维数组与二维数组

数组

一维数组

两维数组

备注

声明方式

type var[] 或 type[] var

type var[][] 或 type[][] var

Java语言中声明数组时不能指定其长度,即int a[5];是非法的

初始化

动态初始化:

声明并初始化数组与数组元素的赋值操作分开进行

如:int a[]=new int[2]; a[0]=3; a[1]=9;

静态初始化:

声明并初始化数组与数组元素的赋值操作同时进行

如:int a[] = new int[]{3, 9};

动态初始化:

String[][] names = new String[3][2];//方式一names = new String[2][];//方式二

names[0] = new String[5];

names[1] = new String[6];


静态初始化:

int[][] as = new int[][]{{1,2,3},{4,5}};

初始化即为数组元素分配存储空间;

数组一旦初始化,其长度是不可变的;

引用

数组下角标

数组下角标

易发生空指针和数组下标越界的异常

遍历


for(int i=0;i<arr.length;i++) {

  arr[i]=i;}

for(int i=0;i<names.length;i++) {  for(int j=0;j<names[i].length;j++) {

    names[1][1]="qbc";

  }

}

6.2 数组的默认初始化值
  • 对于byte、short、int、long类型的数组而言,元素的默认初始化值为0;
  • 对于float、double类型的数组而言,元素的默认初始化值为0.0;
  • 对于char类型的数组而言,元素的默认初始化值为空格;
  • 对于boolean类型的数组而言,元素的默认初始化值为false;
  • 对于引用数据类型的数组而言,元素的默认初始化值为null(注意其与0不同)。
6.3 内存的基本结构
  • 栈空间(stack):存放局部变量、对象的引用;
  • 堆空间(heap):new出来的东西,即新建的数组或对象;
  • 方法区:存放包名、类名和方法的定义,常量池(如字符串常量池);
  • 静态域:存放静态变量。
6.4 一维数组的内存结构

  例如数组初始化语句int[] scores = new int[4];的执行过程为:

  • 在栈空间中,声明scores变量,用于存放对象的引用;
  • 在堆空间中,创建长度为4的int型数组,其初始化值为0;
  • 将创建的数组在堆空间中的首地址传递给scores变量;
  • 由此,即建立起栈空间中scores变量与堆空间新建int型数组之间的关系。
6.5 数组常用算法

  数组的常用算法包括数组的复制、反转和排序,排序可采用冒泡法和直接选择排序等方法;其中,java.util.Arrays类的sort()方法提供了数组元素排序的功能,如Arrays.sort(arr);即可对arr数组的元素按从小到大的方式排序。

// 冒泡排序:从小到大
for(int i = 0; i < arr.length - 1; i++) {
    for(int j = 0; j < arr.length - i; j++) {
        if(arr[j] > arr[j + 1]) {
            int temp = arr[j];
            arr[j] = arr[j + 1];
            arr[j + 1] = temp;
        }
    }
}

// 直接选择排序:从小到大
for(int i = 0; i < arr.length; i++) {
    for(int j = i + 1; j < arr.length; j++) {
        if(arr[i] > arr[j]) {
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
    }
}