掌握Java基本语法,常量,变量,流程控制语句,方法以及处理
了解Java代码的基本格式
熟悉Java运算符的使用
Java中的程序代码都必须放在一个类中。类需要使用关键字class定义,在class前面可以有一些修饰符,格式如下
修饰符 class 类名{
程序代码
}
在编写Java代码时,需要特别注意下列几个关键点:
(1)Java中的程序可分为结构定义语句和功能执行语句,其中,结构定义语句用于声明一个类或方法,功能执行语句用于实现具体的功能,每条功能执行语句的最后都必须要用;结束。
(2)Java语言严格区分大小写,例如,定义一个类时,Computer和computer是俩个完全不同的符号,在使用时一定要主要。
虽然Java没有严格要求用什么样的格式来编排代码,但是,出于可读性的考虑,应该让自己编写的程序代码整齐美观,层次清晰。
Java程序中一句连续的字符串不能分开在俩行中书写,如果想将一个太长的字符串分俩行书写,可以将字符串分成俩个字符串,然后用加号(+)将这俩个字符串连起来,在加号(+)处断行。
在编写程序时,为了使代码易于阅读,通常会在实现功能的同时为代码加一些注释。
注释是对程序的某个功能或者某行代码的解释说明,它只在Java源文件中有效,在编译程序时编译器会忽略这些注释信息,不会将其编译到class字节码文件中去。
Java中的注释有三种类型,具体如下
单行注释:通常用于对程序中的某一行代码进行解释,用符号"\\"表示,"\\"后面为被注释的内容。
int c=5; //定义一个整型变量
多行注释:顾名思义就是在注释中的内容可以为多行,他以符号"/*"开头,以符号"*/"结尾。示例
/* int a=1;
int b=3; */
文档注释:以"/**"开头,并在注释内容末尾以"*/"结束。
Java中的标识符
在编译过程中,经常需要在程序中定义一些符号来标记一些名称,如,包名,类名,方法名,参数名,变量名等,这些符号被称为标识符。
标识符可以由任意顺序大小写字母,数字,下划线(_)和美元符号($)组成,但不能以数字开头,不能是Java中的关键字。
建议初学者在定义标识符时还应该遵循以下规则:
1 包名所有字母一律小写。例如,cn.itcast.test。
2 类名和接口名 每个单词的首字母都要大写。如:ArrayList,lterator.
3 常量名所有字母都大写,单词之间用下划线连接。例如:DAY_OF_MONTH.
4 变量名和方法名的第一个单词首字母小写,从第二个单词开始每个单词首字母大写。例如lineNumber,getLineNumber。
5 在程序中,应该尽量使用有意义的英文单词来定义标识符,使得程序便于阅读。例如使用userName表示用户名,password表示密码。
Java中的关键字
关键字是编程语言里事先定义好并赋予了特殊含义的单词,也称作保留字。和其他语言一样,Java中保留了许多关键字,例如class,public等,下面列举的是Java中所有的关键字。
abstract boolean break byte case catch char const class contine default do double else extends false final finally float for goto if implements import instanceof int interface long native new mull package private protected public return short static strictfp super switch this throw throws transient true try void volatile while synchronized
java中的常量
常量就是在程序中固定不变的值,是不能改变的数据。
在Java中,常量包括整形常量,浮点数常量,布尔常量,字符常量等。
1、整型常量
>整型常量是整数类型的数据,它的表现形式有四种,具体如下:
二进制:由数字o和1组成的数字序列,如:00110101。
八进制:以0开头并且其后由0~7范围(包括0和7)内的整数组成的数字序列,如:0342。
十进制:由数字0~9范围(包括0和9)内的整数组成的数字序列。如:198。
整数以十进制表示时,第一位不能是0,0本身除外
十六进制:以0x或者ox开头并且其后由0~9、A~F(包括0和9、A和F)组成的数字序列,如0x25AF。
2、浮点数常量
浮点数常量就是在数学中用到的小数,分为float单精度浮点数和double双精度浮点数两种类型。其中,单精度浮点数后面以F或f结尾,而双精度浮点数则以D或d结尾。当然,在使用浮点数时也可以在结尾处不加任何的后缀,此时虚拟机会默认为double双精度浮点数。浮点数常量还可以通过指数形式来表示。具体示例如下:
2e3f 3.6d 0f 3.84d 5.022e+23f-
上述列出的浮点数常量中用到的e和f,初学者可能会感到困惑,在后
面会详细介绍。
3、字符常量
字符常量用于表示一个字符,一个字符常量要用一对英文半角格式的单引号('')引起来,它可以是英文字母、数字、标点符号、以及由转义序列来表示的特殊字符。具体示例如下:
'a' ‘1''\r''\uoooo'.
上面的示例中,'\u0000'表示一个空白字符,即在单引号之间没有任何字符。之所以能这样表示是因为,Java采用的是Unicode字符集,Unicode字符以\u开头,空白字符在Unicode码表中对应的值为'\uOOO0'。
4 字符串常量
字符串常量用于表示一串连续的字符,一个字符串常量要用一对
英文半角格式的双引号("")引起来,具体示例如下:
"HelloWorld" "123" "Welcome \n XXX" "
一个字符串可以包含一个字符或多个字符,也可以不包含任何字符,即长度为零。
5 布尔常量
布尔常量即布尔型的两个值true和false,该常量用于区分一个事物的真与假。
6 null常量
null常量只有一个值null,表示对象的引用为空。关于null常量将会
在后面中详细介绍。
变量的定义
变量的定义
在程序运行期间,随时可能产生一些临时数据,应用程序会将这些数据保存在一些内存单元中,每个内存单元都用一个标识你来标识。这些内存单元我们称之为变量,定义的标识符就是变量名,内存单元中存储的数据就是变量的值。
下边的代码中,第一行代码的作用是 定义了两个变量x和y,也就相当于分配了两块内存单元,在定义变量的同内存时为变量x分配了一个初始值0,而变 intx 0
量y没有分配初始值,变量x和y在内存中的状态如下所示。
int x=0,y;. 内存 int x 0
y= x+3;. int y
变量的数据类型
dava是一门强类型的编程语言,它对变量的数据类型有严格的限定。在定义变量时必须声明变量的类型,在为变量赋值时必须赋予和变量同一种类型的值,否则程序会报错。
整数类型(byte,short, int,long)
数值型
浮点类型(loatdouble)
基本数据类型 字符型(char)
布尔型(boolean)
数据类型 类(class)
接口(interface)
引用数据类型 数组
校举(enum)
注解(Annotation)
1 数类型变量
用来存储整数数值,即没有小数部分的值。
整数类型分为4种不同的类型:字节型(byte)、短整型(short)、整型(int)和长整型(long)。
类型名 占用空间。 取值范围
byte 8位(1个字节) -2^~2^7-1
shorte 16位(2个字节) -2^15~2^15-1
int 32位(4个字节) -2^31~2^31-1
long 64位(8个字节) -2^63~2^63-1
占用空间指的是不同类型的变量 分别占用的内存大小
取值范围是变量存储的值不能超出的范围
为一个long类型的变量赋值时需要注意一点,所赋值的后面要加上一个字母“L”(或小写“1”),说明赋值为long类型。如果赋的值未超出int型的取值范围,则可以省略字母“L”(或小写“1”)
long num=2200000000L;//所赋的值超出了int型的取值范围,后面必须加上字母L+
long num=198L; // 所赋的值未超出int型的取值范围,后面可以加上字母L
long num =98; //所赋的值未超出int型的取值范围,后面可以省略字母 L
2 浮点数类型变量
浮点数类型变量用来存储小数数值。
浮点数类型分为两种:单精度浮点数(float)、双精度浮点数
(double),double型所表示的浮点数比float型更精确。
类型名 占用空间 取值范围
floate 32位(4个字节)。 1.4E-45~3.4E+38,-3.4E+38~-1.4E-454
doubles 64位(8个字节)。 4.9E-324~17E+308-1.7E+308~-49E-324
在取值范围中,E表示以10为底的指数,E后面的“+”号和“-”号
代表正指数和负指数,例如1.4E-45表示1.4*10-45。
在为一个float类型的变量赋值时需要注意一点,所赋值的后面一定
要加上字母“F”(或“f”),而为double类型的变量赋值时,可
以在所赋值的后面加上字符“D”(或“d”),也可不加。
float f=123.4r/ //为一个float类型的变里赋值,后面必须加上字母f
double d1 = 100.1; //为一个double类型的变量赋值,后面可以省略字母d
double d2=199.3d; //为一个double类型的变里赋值,后面可以加上字母de
在程序中也可以为一个浮点数类型变量赋予一个整数数值.
3 字符类型变量
用于存储一个单一字符,在Java中用char表示。
每个char类型的字符变量都会占用2个字节。
赋值时,要用英文半角格式的单引号('')把字符括起来,如'a'
也可以赋值为0~65535范围内的整数,计算机会自动将这些整数转化为所对应的字符,如数值97对应的字符为'a'。
char c='a';//为一个char类型的变里赋值字符a
char ch=97;//为一个char类型的变里赋值整数97,相当于赋值字符a
4 布尔类型变量
布尔类型变量用来存储布尔值,在Java中用boolean表示,该类型
的变量只有两个值,即true和false。具体示例如下:
boolean flag = false; //声明一个boolean类型的变量,初始值为falses
flag=true; //改变flag变量的值为true
变量的类型转换
当把一种数据类型的值赋给另一种数据类型的变量时,需要进行数据类型转换。
根据转换方式的不同,数据类型转换可分为两种:自动类型转换
和强制类型转换。
1、自动类型转换
也叫隐式类型转换,指的是两种数据类型在转换的过程中不需要显式地进行声明。
要实现自动类型转换,必须同时满足两个条件,
第一是两种数据类型彼此兼容,
第二是目标类型的取值范围大于源类型的取值范围。
byte b=3;
intx=b; //程序把byte类型的变量b转换成了int类型,无须特殊声明
(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、强制类型转换
强制类型转换也叫显式类型转换,指的是两种数据类型之间的转换需要进行显式地声明。
当两种类型彼此不兼容,或者目标类型取值范围小于源类型时,
自动类型转换无法进行,这时就需要进行强制类型转换。
强制类型转换的格式如下:
目标类型变量=(目标类型)值
变量的作用域
变量需要在它的作用范围内才可以被使用,这个作用范围称为变量的作用域。
在程序中,变量一定会被定义在某一对大括号中,该大括号所包含的代码区域便是这个变量的作用域。
public static void main(Stringl] arge)
int x=4;{
int y-9 } y的作用域 X的作用城
案例代码
算术运算符
算术运算符看上去比较简单,也很容易理解,但在实际使用时有很多需要
注意的问题,具体如下:
(1)在进行自增(++)和自减(--)的运算时,如果运算符放在操作数的前
面则是先进行自增或自减运算,再进行其它运算。反之,如果运算符放在操
作数的后面则是先进行其它运算再进行自增或自减运算。
(2)在进行除法运算时,当除数和被除数都为整数时,得到的结果也是一个
整数。如果除法运算有小数参与,得到的结果会是一个小数。
(3)在进行取模(%)运算时,运算结果的正负取决于被模数(%左边的数)的
符号,与模数(%右边的数)的符号无关。
赋值运算符
赋值运算符的作用就是将常量、变量或表达式的值赋给某一个变
量,表中列出了Java中的赋值运算符及用法。
运算符 运算 范例 结果)
= 赋值 a=3;b=2; a=3;b=2
+= 加等于。 a=3;b=2;a+=b a=5;b=2
-= 减等于。 a=3;b=2;a-=b a=1;b=2
*= 乘等于。 a=3;b=2;a*=b a=6;b=2
/= 除等于。 a=3;b=2,a/=b a=1b=2
%= 模等于。 a=3;b=2,a%=b a=1b=2
在赋值运算符的使用中,需要注意以下几个问题:
(1)在Java中可以通过一条赋值语句对多个变量进行赋值
int.x, y z
x=y=z / / 为三个变量同时赋值
int x=y=z=5; // 这样写是错误的
(2)除了“=”,其它的都是特殊的赋值运算符,以“+=”为例,x+=3
就相当于x=x+3,首先会进行加法运算x+3,再将运算结果赋值给变量xa
-=、*=、/=、%=赋值运算符都可依此类推。
比较运算符
比较运算符用于对两个数值或变量进行比较,其结果是一个布尔
值,即true或false。
运算符 运算 范例 结果
== 相等于 4==3 false
!=2 不等于 4!=3 true
< 小于 4<3 false
> 大于 4>3 true
<=4 小于等于 4<=3 false
>=0 大于等于 4>=3 true
比较运算符在使用时需要注意一个问题,不能将比较运算符“==”
误写成赋值运算符“=”。
逻辑运算符用于对布尔型的数据进行操作,其结果仍是一个布尔型。
在使用逻辑运算符的过程中,需要注意以下几个细节:
(1)逻辑运算符可以针对结果为布尔值的表达式进行运算。如:x>3&&y!=0
(2)运算符“&”和“&&”都表示与操作,当且仅当运算符两边的操作数都为true时,其结果才为true,否则结果为false。当运算符“&”和“&&”的右边为表达式时,两者在使用上还有一定的区别。在使用“&”进行运算时,不论左边为true或者false,右边的表达式都会进行运算。如果使用“&&”进行运算,当左边为false时,右边的表达式不会进行运算,因此“&&”被称作短路与。
(3)运算符“1”和“11”都表示或操作,当运算符两边的操作数任何一边的值为true时,其结果为true,当两边的值都为false时,其结果才为false同与操作类似,“11”表示短路或,当运算符“11”的左边为true时,右边的表达式不会进行运算。
(4)运算符“^”表示异或操作,当运算符两边的布尔值相同时(都为true
或都为false),其结果为false。当两边布尔值不相同时,其结果为true。
在对一些比较复杂的表达式进行运算时,要明确表达式中所有运算符参与运算的先后顺序,把这种顺序称作运算符的优先级。
if条件语句
if条件语句分为三种语法格式,具体如下;
(1)if语句
(2)if...else语句
(3)if...else if...else语句
1、if语句:
if语句是指如果满足某种条件,就进行某种处理,其语法格式如
所示:
if(条件语句){
代码块 }
上述语法格式中,判断条件是一个布尔值,当值为true时,才会执
行{}中的语句。
if语句的执行流程图如下
2 if else 语句
if else 语句是指如果满足某种条件,就进行,某种处理,否则就进行 另一种处理,其语法格式如下
if else语句的流程图如下图所示
在Java中有一种特殊的运算叫做三元元算,它和if else语句类似,语法如下
三元运算符通常用于对某个变量进行赋值,当判断条件成立时,运算结果为表达式1的值,否则结果表达式2的值
3 if else 语句
if else语句用于对多个条件进行判断,进行多种不同的处理。其语法格式如下图所示
switch条件语句
switch语句也是一种很常见的选择语句。和if条件语句不同,它只
能针对某个表达式的值做出判断,从而决定执行哪一段代码。
在switch语句中,使用switch关键字来描述一个表达式,使用case关键字来描述和表达式结果比较的目标值,当表达式的值和某个目标值匹配时,会执行对应case下的语句,switch语句的基本语法
需要注意的是,在switch语句中的表达式只能是byte、short、char、int、枚举(JDK1.5引入的)、String类型(JDK17引入的)的值,如果传入其他值,程序会报错。
例如,在程序中使用数字1~7表示周一到周日,如果想根据某个输入的数字输出中文格式的星期值,可以通过右边所示的代码来实现
在使用switch语句的过程中,如果多个case条件后面的执行语句是一样的,则该执行语句只需书写一次即可。
例如,要判断一周中的某一天是否为工作日,同样使用数字1~7来表示星期一到星期天,当输入的数字为1、2、3、4、5时就视为工作日,否则就视为休息日。
while语句和if条件语句有点类似,都是根据条件判断来决定是否执行后面的代码,区别在于,while循环语句会反复地进行条件判断,只要条件成立,{}内的执行语句就会执行,直到条件不成立, while循环结束。
while循环语句的语法结构如下所示:
while循环语句的执行流程图
do while循环语句和while循环语句功能类似,其语法结构如下
do while循环语句的执行流程图如下
for循环语句是最常用的循环语句,一般用在循环次数已知的情况下,其语法格式如下
在上述语法格式中,for后面的()中包括三部分内容,初始化表达式,循环条件和操作表达式,它们之间用“;”分隔。{}中的执行语句为循环体
如果用 1表示初始化表达式.2 表示循环条件。 3 表示操作表达式。 4 表示循环体,则for的执行流程图如下
循环嵌套
嵌套循环是指在一个循环语句的循环体中再定义一个循环语句的语法结构。while、do.….while、for循环语句都可以进行嵌套,并且它们之间也可以互相嵌套,如最常见的在for循环中嵌套for循环,格式如下:
跳转语句(break、continue)
跳转语句用于实现循环执行过程中程序流程的跳转,在Java中的跳转语句有break语句和continue语句
1、break语句:用在switch条件语句和循环语句中,它的作用是终止某个case并跳出switch结构。
2、continue语句:用在循环语句中,它的作用是终止本次循环,执行下一次循环
continue
猜数字游戏
什么是方法
假设有一个游戏程序,程序在运行过程中,要不断地发射炮弹。发射炮弹的动作需要编写100行的代码,在每次实现发射炮弹的地方都需要重复地编写这100行代码,这样程序会变得很臃肿,可读性也非常差。
为了解决代码重复编写的问题,可以将发射炮弹的代码提取出来放在一个0)中,并为这段代码起名字,这样在每次发射炮弹的地方通过这个名字来调用发射炮弹的代码就可以了。
上述过程申,所提取出来的代码可以被看作是程序申定义的一个方法,程序在需要发射炮弹时调用该方法即可。
在Java中,声明一个方法的具体语法格式如下图所示
修饰符:是对访问权限的限定,例如,public、static都是修饰符
返回值类型:用于限定方法返回值的数据类型
参数类型:用于限定调用方法时传入参数的数据类型
参数名:是一个变量,用于接收调用方法时传入的数据
return关键字:用于结束方法以及返回方法指定类型的值
返回值:被return语句返回的值,该值会返回调用者
方法的重载
Java允许在一个程序中定义多个名称相同的方法,但是参数的类或个数必须不同,这就是方法的重载
数组
数组的定义
数组是指一组数据的集合,数组中的每个元素被称为元素,在数组中可以存放任意类型的元素,但同一个数组中存放的元素类型必须一致。
在Java中,可以使用下列格式定义一个数组,具体示例如下:
int[] x=new int[100];
上述语句就相当于在内存中定义了100个int类型的变量,第一个变量的名称为x[0],第二个变量的名称为x[1],以此类推,第100个变量的名称为x[99],这些变量的初始值都是0。
为了更好地理解数组的定义方式,可以把上述代码定义为两行来写,具体如下:
int[] x; // 声明一个int[]类型的变量+
x=new int[100]; //创建一个长度为100的数组
接下来,通过两张内存图来说明数组在创建过程中的内存分配情况,具体如下所示:
在Java中,为了方便我们获得数组的长度,提供了一个length属性,在程序中可以通过“数组名.length”的方式来获得数组的长度,即元素的个数。
当数组被成功创建后,数组中元素会被自动赋予一个默认值,根据元素类型的不同,默认初始化的值也是不一样的
在初始化数组时还有一种方式叫做静态初始化,就是在定义数组的同时就为数组的每个元素赋值。数组的静态初始化有俩种方式
数组的常见操作
1 数组遍历
在操作数组时,经常需要依次访问数组中的每个元素,这种操作叫做数组的遍历
数组排序
在操作数组时,经常需要对数组中的元素进行排序,其中冒泡排序是比较常见的一种算法。冒泡过程中,不断比较数组中相邻的两个元素,较小者向上浮,较大者往下沉,整个过程和水中气泡上升的原理相似。
数组排序的过程如下所示:
(1)从第一个元素开始,将相邻的两个元素依次比较,直到最后两个元素完成比较,如果第一个元素比后一个大,则交换位置。整个过程完成后,数组中最后一个元素就是最大值
(2)除最后一个元素,将剩余的元素继续进行两两比较,过程与第一步类似,这样数组中第二大的元素放在了倒数第二个位置
(3)以此类推,持续对越来越少的元素重复上面的步骤,直到没有任
何一个元素需要比较为止。
数组最值
在操作数组时,经常需要获取数组中元素的最值
多维数组
多维数组可以简单地理解为在数组中嵌套数组。在程序中比较常见的就是二维数组。
二维数组的定义有很多方式,具体如下
上面的代码定义了一个3行4列的二维数组,它的结构如下图
上诉方式与第一种方式类似,只是数组中每个元素的长度不确定,采用第二种方式常见的数组结构如下
采用上述方式定义的二维数组有三个元素,这三个元素都是数组,分别是{1,2}{3,4,5,6}{7,8,9}
接下来,通过一张图来描述方式三定义的数组结构
多维数组对元素的访问也是通过角标的方式,例如,访问二维数组中第一个元素数组的第二个元素的方式如下
arr[0][1];
41跟38一样
42跟39一样
43跟40一样
随机点名器