一、Java基础案例教程(Java编程基础)
学习目标:
1、掌握Java基本语法、常量、变量、流程控制语句、方法以及数组。
2、熟悉Java运算符的使用。
3、了解Java代码的基本格式。
2.1Java的基本语法
Java中的程序代码都必须放在一个类中,类需要使用class关键字定义,在class前面可以有一些修饰符,格式如下:
在编写Java代码时,需要特别注意下列几个关键点:
(1)Java中的程序代码可分为 结构定义语句和功能执行语句,其中,结构定义语句用于声明一个类或方法,功能执行语句用于实现具体的功能。每条功能执行语句的最后都必须用分号(;)结束
(2)Java语言严格区分大小写。例如,定义一个类时,Computer和computer是两个完全不同的符号,在使用时务必注意。
(3)虽然Java没有严格要求用什么样的格式来编排程序代码,但是,出于可读性的考虑,应该让自己编写的程序代码整齐美观、层次清晰。以下两种方式都可以,但是建议使用后一种。
方式一:
这一种语法比较美观,很好认,很整齐,更不会出现错误
方式二:
这种语法也可以,但是放一排不够美观,不是很清晰,很乱,很容易出错
Java中的注释
在编写程序时,为了使代码易于阅读,通常会在实现功能的同时为代码加一些注释。
注释是对程序的某个功能或者某行代码的解释说明,它只在Java源文件中有效,在编译程序时编译器会忽略这些注释信息,不会将其编译到class字节码文件中去。
Java中的注释有三种类型,具体如下:
1、单行注释:通常用于对程序中的某一行代码进行解释,用符号“//”表示,“//”后面为被注释的内容,具体示例如下:
可以加在代码的后面也可以加在上方,都是表示这行代码的意思
2、多行注释:顾名思义就是在注释中的内容可以为多行,它以符号“/*”开头,以符号“*/”结尾,多行注释具体示例以下:
3、文档注释:以“/**”开头,并在注释内容末尾以“*/”结束。
Java中的标识符
在编程过程中,经常需要在程序中定义一些符号来标记一些名称,如,包名、类名、方法名 、参数名、变量名等,这些符号被称为标识符
标识符可以由任意顺序的大小写字母、数字、下划线(_)和美元符号($)组成,但不能以数字开头,不能是Java中的关键字。
关键字是编程语言里事先定义好并赋予了特殊含义的单词,也称作保留字。和其他语言一样,Java中保留了许多关键字,例如,class、public等,下面列举的是Java中所有的关键字。
Java的常量
常量就是在程序中固定不变的值,是不能改变的数据。
在Java中,常量包括整型变量、浮点数变量、布尔常量、字符处理等。
1、整型常量
整型常量是整数类型的数据,它的表现形式有四种,具体如下:
二进制,由数字0和1组成的数字序列,如00110101.
八进制,以0开头并且其后由0~7范围(包括0和7)内的整数组成的数字序列。如,0342.
十进制,由数字0~9范围(包括0和9)内的整数组成的数字序列。如,198.整数以十进制表示时,第一位不能是0,0本身除外。
十六进制,以0x或者0X开头并且其后由0~9、A~F(包括0和9、A和F)组成的数字序列、如0x25AF.
2、浮点数常量
浮点数常量就是在数学中用到的小数,分为float单精度浮点数和double双精度浮点数两种类型。其中,单精度浮点数后面以F或f结尾,而双精度浮点数则以D或d结尾。当然,在使用浮点数时也可以在结尾处不加任何的后缀,此时虚拟机会默认为double双精度浮点数。浮点数常量还可以通过指数形式来表示。具体示例如下:
上述列出的浮点数常量中用到的e和f,初学者可能会感到困惑,在后面的2.2.2小节中将会详细介绍。
3、字符常量
字符常量用于表示一个字符,一个字符常量要用一对英文半角格式的单引号(‘’)引起来,它可以是英文字母、数字、标点符号、以及由转义序列来表示的特殊字符。具体示例如下:
上面的示例中,‘\u0000’表示一个空白字符,即在单引号之间没有任何字符,之所以能这样表示是因为,Java采用的是Unicode字符集,Unicode字符以\u开头,空白字符在Unicode码表中对应的值为‘\u0000’.
4、字符串常量
字符串常量用于表示一串连续的字符,一个字符串常量要用一对英文半角格式的双引号(“”)引起来,具体示例如下:
一个字符串可以包含一个字符或多个字符,也可以不包含任何字符,即长度为零。
5、布尔常量
布尔常量即布尔型的两个值true和false,该常量用于区分一个事物的真与假。
6、null常量
null常量只有一个值null,表示对象的引用为空,关于null常量将会在第三章中详细介绍。
2.2Java中的变量
变量的定义
在程序运行期间 ,随时可能产生一些临时数据,应用程序会将这些数据保存在一些内存单元中,每个内存单元都用一个标识符来标识。这些内存单元我们称之为变量,定义的标识符就是变量名,内存单元中存储的数据就是变量的值。
右边的代码中,第一行代码的作用是定义了两个变量x和y,也就相当于分配了两块内存单元,在定义变量的同时为变量x分配了一个初始值0,而变量y没有分配初始值,变量x和y在内存中的状态如图所示。
变量的数据类型
Java是一门强类型的编程语言,它对变量的数据类型有严格的限定。在定义变量时必须声明变量的类型,在为变量赋值时必须赋予和变量同一种类型的值,否则程序会报错。
1、整数类型变量
用来存储整数数值,即没有小数部分的值。
整数类型分为4种不同的类型:字节型(byte)、短整型(short)、整型(int)和长整型(long)。
占用空间指的是不同类型的变量分别占用的内存大小
取值范围是变量存储的值不能超出的范围
2、浮点数类型变量
浮点数类型变量用来存储小数数值。
浮点数类型分为两种:单精度浮点数(float)、双精度浮点数(double),double型所表示的浮点数比float型更精确。
在取值范围中,E表示以10为底的指数,E后面的“+”号和“-”号代表正指数和负指数,例如1.4E-45表示1.4*10.
3、字符类型变量
(1)用于存储一个单一字符,在Java中用char表示
(2)每个char类型的字符变量都会占用2个字节
(3)赋值时,要用英文半角格式的单引号(‘’)把字符括起来,如‘a’,
(4)也可以赋值为0~65535范围内的整数,计算机会自动将这些整数转化为所对应的字符,如数值97对应的字符为‘a’。
4、布尔类型变量
布尔类型变量用来存储布尔值,在Java中用boolean表示,该类型的变量只有两个值,即turn和false.具体示例如下:
变量的类型转换
当把一种数据类型的值赋给另一种数据类型的变量时,需要进行数据类型转换。
根据转换方式的不同,数据类型转换可分为两种:自动类型转换和强制类型转换。
1、自动类型转换
也叫隐式类型转换,指的是两种数据类型在转换的过程中不需要显示地进行声明。
要实现自动类型转换,必须同时满足两个条件,
第一是两种数据类型彼此兼容。
第二是目标类型的取值范围大于源类型的取值范围。
(1)整数类型之间可以实现转换,如byte类型的数据可以赋值给short、int、long类型的变量,short、char类型的数据可以赋值给int、long类型的变量,int类型的数据可以赋值给long类型的变量。
(2)整数类型转换为float类型,如byte、char、short、int类型的数据可以赋值给float类型的变量
(3)其它类型转换为double类型,如byte、char、short、int、long、float类型的数据可以赋值给double类型的变量。
2、强制类型转换
强制类型转换也叫显示类型转换,指的是两种数据类型之间的转换需要进行显式地声明。
当两种类型彼此不兼容,或者目标类型取值范围小于源类型时,自动类型转换无法进行,这时就需要进行强制类型转换。
强制类型转换的格式如下所示:
变量的作用域
变量需要在它的作用范围内才可以被使用,这个作用范围称为变量的作用域。
在程序中,变量一定会被定义在某一对大括号中,该大括号所包含的代码区域便是这个变量的作用域。
案例代码
2.3Java中的运算符
算术运算符
算术运算符就是用来处理四则运算的符号,这是最简单、最常用的运算符号。
案例如下:
赋值运算符
赋值运算符的作用就是将常量、变量或表达式的值赋给某一个变量,表中列出了Java中的赋值运算符及用法。
在赋值运算符的使用中,需要注意以下几个问题:
(1)在Java中可以通过一条赋值语句对多个变量进行赋值
(2)除了“=”,其它的都是特殊的赋值运算符,以“+=”为例,x+=3就相当于x=x+3,首先会进行加法运算x+3,再将运算结果赋值给变量x。-=、*=、/=、%=赋值运算符都可以此类推。
案例如下:
比较运算符
比较运算符用于对两个数值或变量进行比较,其结果是一个布尔值,即ture或flase。
比较运算符在使用时需要注意一个问题,不能将比较运算符“==”误写成赋值运算符“=”。
逻辑运算符
逻辑运算符用于对布尔型的数据进行操作,其结果仍是一个布尔型。
案例如下:
案例代码:商城库存清单程序设计来熟悉本阶段的知识点。
运行结果如下:
2.4选择结构语句
if条件语句
*if条件语句分为三种语法格式,具体如下:
(1)if语句
(2)if...else语句
(3)if...else if... else语句
*由于这三种语法格式都有自身的特点,因此,接下来将针对这三种格式进行详细地讲解。
switch条件语句
*switch语句也是一种很常见的选择语句,和if条件语句不同,它只能针对某个表达式的值做出判断,从而决定执行哪一段代码。
*在switch语句中,使用switch关键字来描述一个表达式,使用case关键字来描述和表达式结果比较的目标值,当表达式结果比较的目标值,当表达式的值和某个目标值匹配时,会执行对应case下的语句,switch语句的基本语法。
案例如下:
运行结果如下:
案例如下:
2.5循环结构语句
while循环语句
while语句和if条件语句有点类似,都是根据条件判断来决定是否执行后面的代码,区别在于,while循环语句会反复地进行条件判断,只要条件成立,{}内的执行语句就会执行,直到条件不成立,while循环结束。
while循环语句的语法结构如下所示:
while循环语句的执行流程如下图所示:
案例代码
通过一个案例来打印1~4之间的自然数
运行结果如下:
do...while循环语句
do...while循环语句和while循环语句功能类似,其语法结构如下所示:
do...while循环语句的执行流程图如下图所示:
for循环语句
for循环语句是最常用的循环语句,一般用在循环次数已知的情况下,其语法格式如下所示:
在上述语法格式中,for后面的()中包括三部分内容,初始化表达式、循环条件和操作表达式,它们之间用“;”分隔,{}中的执行语句为循环体
案例代码
通过一个案例实现对自然数1~4进行求和
循环嵌套
嵌套循环是指在一个循环语句的循环体中在定义一个循环语句的语法结构。while、do...while、for循环语句都可以进行嵌套,并且它们之间也可以互相嵌套,如最常见的在for循环中嵌套for循环,格式如下:
案例代码
使用“*”打印直角三角形
运行结果如下:
跳转语句(break、continue)
跳转语句用于实现循环执行过程中程序流程的跳转,在Java中的跳转语句有break语句和continue语句
1、break语句,用在switch条件语句和循环语句中,它的作用是终止某个case并跳出switch结构
2、continue语句,用在循环语句中,它的作用是终止本次循环,执行下一次循环
2.6方法
什么是方法
假设有一个游戏程序,程序在运行过程中,要不断地发射炮弹。发射炮弹地动作需要编写100行地代码,在每次实现发射炮弹地地方都需要重复地编写这100行代码,这样程序会变得很臃肿,可读性也非常差
为了解代码重复编写的问题,可以将发射炮弹的代码提取出来放在一个{}中,并为这段代码取这个名字,这样在每次发射炮弹的地方通过这个名字来调用发射炮弹的代码就可以了
上述过程中,所提取出来的代码可以被看做是程序中定义的一个方法,程序在需要发射炮弹时调用该方法即可。
在Java中,声明一个方法的具体语法格式如下所示:
修饰符:是对访问权限的限定,例如,public、static都是修饰符
返回值类型:用于限定方法返回值的数据类型
参数类型:用于限定调用方法时传入参数的数据类型
参数名:是一个变量,用于接收调用方法时传入的数据
return关键字:用于结束方法以及返回方法指定类型的值
返回值:被return语句返回的值,该值会返回调用者
2.7数组
数组的定义
数组是指一组数据的集合,数组中的每个元素被称为元素,在数组中可以存放任意类型的元素,单同一个数组中的元素类型必须一致。
在Java中,可以使用下列格式定义一个数组,具体示例如下:
上述语句就相当于在内存中定义了100个int类型的变量,第一个变量的名称为x[0],第二个变量的名称为x[1],以此类推,第100个变量的名称为x[99],这些变量的初始值都是0.
为了更好地理解数组的定义方式,可以把上述代码定义为两行来写,具体如下:
接下来,通过两张内存图来说数组在创建过程中的内存分配情况,具体如下所示:
在Java中,为了方便我们获得数组的长度,提供了一个length属性,在程序中可以通过“数组名length”的方式来获得数组的长度,即元素的个数。
数组的常见操作
在操作数组时,经常需要依次访问数组中的每个元素,这种操作叫做数组的遍历。
数组排序
在操作数组时,经常需要对数组中的元素进行排序,其中冒泡排序是比较常见的一种算法,冒泡过程中,不断比较数组中相邻的两个元素,较小者向上浮,较大者往下沉,整个过程中和水中气泡上升的原理相似。
数组排序的过程如下所示:
(1)从第一个元素开始,将相邻的两个元素依次比较,直到最后两个元素完成比较,如果第一个元素比后一个大,则交换位置,整个过程完成后,数组中最后一个元素就是最大值。
(2)除最后一个元素,将剩余的元素继续进行两两比较,过程与第一步类似,这样数组中第二大的元素放在了倒数第二个位置。
(3)以此类推,持续对越来越少的元素重复上面的步骤,直到没有任何一个元素需要比较为止。
多维数组
多维数组可以简单地理解为在数组中嵌套数组。在程序中比较常见的就是二维数组
二维数组的定义有很多方式,具体如下:
方式一:
上面的代码定义了一个3行4列的二维数组,它的结构如下图所示:
方式二:
上述方式与第一种方式类型,只是数组中每个元素的长度不确定,采用第二种方式常见的数组结构如下图所示:
方式三:
采用上述方式定义的二维数组有三个元素,这三个元素都是数组,分别是{1,2}、{3,4,5,6}、{7,8,9}.
接下来,通过一张图来描述方式三定义的数组结构