第二章
Java基本语法
本章内容
? 基本数据类型
? 运算符和表达式
? 字符串
? 控制语句
? 数组
课前思考
1,Java中的标识符的命名规则是 什
么?
2,Java中有哪些什么类型?
3、各数据类型间转换,什么时候是
自动转换,什么时候是强制转换?
4、运算符的优先关系是什么的?
5,Java中的字符串如何初始化?
6、控制语句有哪些?什么情况下用
哪个?
7、如何定义数组,访问数组?
2.1 基本数据类型
2.1.1 标识符和保留字
1,标识符
?程序员对程序中的各个元素加以命
名时使用的命名记号称为标识符
(identifier)。
?标识符可由顺序任意的大小写字母,数
字,下划线( _),美元符 ($)组成。但标
识符不能以数字开头,不能是 Java中的
保留关键字。
例,userName,User_Name,_sys_val,
$num为合法的标识符;
2mail room#,class hello-world为非
法的标识符
2、保留字
?具有专门的意义和用途,不能当
作一般的标识符使用,这些标识
符称为保留字 (reserved word),也
称为关键字。
?Java语言中的保留字均用小写字
母表示。
2.1.2 数据类型概述
1,Java中的数据类型划分
?简单数据类型包括:
?整数类型,byte,short,int,long
?浮点类型,float,double
?字符类型,char
?布尔类型,boolean
?复合数据类型包括,
? class
? interface
?数组
2、常量和变量
?常量:用保留字 final来实现
如,final int IP=3;
?变量,int count; char c=’a';
2.1.3 简单数据类型
1,布尔类型 — boolean
布尔型数据只有两个值 true和 false,
例如,boolean b=true;
2.字符类型 --char
?字符常量,
字符常量是用单引号括起来的一个
字符,如 'a','A';
?字符型变量,
类型为 char,它在机器中占 16位,
其范围为 0~ 65535。
字符型变量的定义如,char c='a';
/*指定变量 c为 char型,且赋初值
为 'a'*/
3、整型数据
?整型常量:
?十进制整数。如 123,- 456,0
?八进制整数。以 0开头,如 0123表
示十进制数 83,- 011表示十进制
数- 9。
?十六进制整数。以 0x或 0X开头,
如 0x123表示十进制数 291,-
0X12表示十进制数- 18。
?整型变量:
数据类型 所占位数 数的范围
byte 8 -27~ 27-1
short 16 -215~ 215-1
int 32 -231~ 231-1
long 64 -263~ 263-1
4.浮点型(实型)数据
?实型常量:
? 十进制数形式。由数字和小数点组成,
且必须有小数点。如 0.123,1.23,123.0
? 科学计数法形式。如,123e3或 123E3,
其中 e或 E之前必须有数字,且 e或 E后
面的指数必须为整数。
? float型的值,必须在数字后加 f或 F。如
1.23f。
?实型变量:
5.简单数据类型的例子:
public class Assign {
public static void main (String args [ ] ) {
数据类型 所占位数 数的范围
float
double
32
64
3.4e-038 ~ 3.4e+038
1.7e-038 ~ 1.7e+038
? int x,y ; //定义 x,y两个整型变量
? float z = 1.234f ;
//指定变量 z为 float型,且赋初值为 1.234
? double w = 1.234 ;
//指定变量 w为 double型,且赋初值为 1.234
? boolean flag = true ;
//指定变量 flag为 boolean型,且赋初值为 true
? char c ; //定义字符型变量 c
? String str ; //定义字符串变量 str
? String str1 = " Hi " ; //指定变量 str1为
String型,且赋初值为 Hi
? c = ' A ' ; //给字符型变量 c赋值 'A'
? str = " bye " ; //给字符串变量 str赋值
"bye"
? x = 12 ; //给整型变量 x赋值为 12
? y = 300; //给整型变量 y赋值为 300
? }
? }
2.1.4 简单数据类型中各类型数据
间的优先关系和相互转换
1、不同类型数据间的优先关系如下:
低 --------------------------------------------->高
byte,short,char-> int -> long -> float -> double
2、自动类型转换规则
整型,实型,字符型数据可以混合运算。运算
中,不同类型的数据先转化为同一类型,
然后进行运算,转换从低级到高级;
3、强制类型转换
高级数据要转换成低级数据,需用
到强制类型转换,如:
int i;
byte b=(byte)i;
/*把 int型变量 i强制转换为 byte型 */
2.2 运算符和表达式
2.2.1 运算符
参与运算的数据称为操作数,
?按操作数的数目来分,可有:
?一元运算符:++,--,+,-
?二元运算符:+,-,>
?三元运算符:?:
?基本的运算符按功能划分,有下面几
类:
1、算术运算符,+,―, *,/,%,
++,―― 。
例,3+2; a-b; i++; --i;
2、关系运算符,>,<,>=,<=,
==,!=。
例,count>3; I==0; n!=-1;
3、布尔逻辑运算符,!,&&,|| 。
例,flag=true; !(flag); flag&&false;
4、位运算符,>>,<<,>>>,&,|,^,~。
例,a=10011101; b=00111001;则有如下结
果:
a<<3 =11101000;
a>>3 =11110011 a>>>3=00010011;
a&b=00011001; a|b=10111101;
~a=01100010; a^b=10100100;
5、赋值运算符 =,及其扩展赋值运算符如 +=,
―=, *=,/=等。
例,i=3; i+=3; //等效于 i=i+3;
6、条件运算符?,
例,result=(sum= =0? 1, num/sum);
7、其它:
包括分量运算符 ·,下标运算符 [],实
例运算符 instanceof,内存分配运算符
new,强制类型转换运算符 (类型 ),方
法调用运算符 () 等。例:
System.out.println("hello world");
int array1[]=new int[4];
?2.2.2 表达式
? 表达式是由操作数和运算符按一定的
语法形式组成的符号序列
1,表达式的类型
表达式的类型由运算以及参与运算的操
作数的类型决定,可以是简单类型,
也可以是复合类型:
?布尔型表达式,x&&y||z;
?整型表达式,num1+num2;
2、运算符的优先次序
表达式的运算按照运算符的优先顺
序从高到低进行,同级运算符从左
到右进行。
2.3 字符串
2.3.1 字符串的表示
?字符串常量
字符串常量是用双引号括住的一串
字符。如,"Hello World!"
?String类的构造方法
String( char chars[ ] );
String( char chars[ ],int startIndex,int
numChars );
String( byte ascii[ ],int hiByte );
String( byte ascii[ ],int hiByte,int startIndex,
int numChars );
?String使用示例:
String s=new String() ; //生成一个空串
?用 StringBuffer表示字符串
StringBuffer( ); /*分配 16个字符的缓冲区 */
StringBuffer( int len ); /*分配 len个字符的缓
冲区 */
StringBuffer( String s );
/*除了按照 s的大小分配空间外,再分配 16个字
符的缓冲区 */
2.3.2 访问字符串
1、类 String中提供了 length( ),charAt( )、
indexOf( ),lastIndexOf( ),getChars( )、
getBytes( ),toCharArray( )等方法。
2、类 StringBuffer提供了 length( )、
charAt( ),getChars( ),capacity()等方法。
2.3.3 修改字符串
1,String类提供的方法:
2,StringBuffer类提供的方法:
StringBuffer中对字符串的连接操作是
对源串本身进行的,操作之后源串的
值发生了变化,变成连接后的串。
2.3.4 其他操作
1、字符串的比较
String中提供的方法:
equals( )和 equalsIgnoreCase( )
2、字符串的转化
java.lang.Object中提供了方法 toString( )把
对象转化为字符串。
3、字符串 "+"操作
运算符 '+'可用来实现字符串的连接:
String s = "He is "+age+" years old";
其他类型的数据与字符串进行 "+"运算时,
将自动转换成字符串。具体过程如下:
String s=new StringBuffer("he
is").append(age).append("years
old").toString();
2.4 控制语句
2.4.1 分支语句
分支语句提供了一种控制机制,使得
程序的执行可以跳过某些语句不执行,
而转去执行特定的语句。
1、条件语句 if-else
if(boolean-expression)
statement1;
2、多分支语句 switch
switch (expression){
case value1, statement1;break;
case value2, statement2;break;
…………
case valueN, statemendN;break;
[default, defaultStatement; ]
}
2.4.2 循环语
1,while语句
[initialization]
while (termination){
body;
[iteration;]
}
2,do-while语句
[initialization]
do {
body;
[iteration;]
} while (termination);
3,for语句
for
(initialization;termination;iteration){
body;
}
2.4.3 跳转语句
1,break语句
?在 switch语中,break语句用来终止 switch
语句的执行。使程序从 switch语句后的第
?在 Java中,可以为每个代码块加一个括号,
一个代码块通常是用大括号 {}括起来的一
段代码。
2,continue语句
? continue语句用来结束本次循环,跳过循
环体中下面尚未执行的语句,接着进行终
止条件的判断,以决定是否继续循环。如:
continue;
?可以用 continue跳转到括号指明的外层循
环中 。如,continue outerLable;
3、返回语句 return
?return语句从当前方法中退出,返回
到调用该方法的语句处。
?return语句通常用在一个方法体的最
后,否则会产生编译错误,除非用在 if-
else语句中
2.5 数组
2.5.1 一维数组的定义
1,一维数组的定义
type arrayName[ ];
类型 (type)可以为 Java中任意的数据型,
包括简单类型和复合类型。
例,int intArray[ ]; Date dateArray[];
2、一维数组的初始化
? 静态初始化
int intArray[]={1,2,3,4};
String stringArray[]={"abc","How",
"you"};
?动态初始化
1)简单类型的数组
int intArray[]; intArray = new
2)复合类型的数组
String stringArray[ ];
String stringArray = new String[3];/*为数
组中每个元素开辟引用 空间 (32位 ) */
stringArray[0]= new String("How");//为第
一个数组元素开辟空间
stringArray[1]= new String("are");//为第二
个数组元素开辟空间
stringArray[2]= new String("you");// 为第
三个数组元素开辟空间
3、一维数组元素的引用
数组元素的引用方式为:
arrayName[index]
index为数组下标,它可以为整型常数或表
达式,下标从 0开始。每个数组都有一个属
性 length指明它的长度,例如:
intArray.length指明数组 intArray的长度。
2.5.2 多维数组
1,二维数组的定义
type arrayName[ ][ ]; type [ ][ ]arrayName;
2、二维数组的初始化
?静态初始化
int intArray[ ][ ]={{1,2},{2,3},{3,4,5}};
? 动态初始化
int a[ ][ ] = new int[2][3];
例,int a[ ][ ] = new int[2][ ];
a[0] = new int[3];
a[1] = new int[5];
对二维复合数据类型的数组,必须首先为最高维分配引
用空间,然后再顺次为低维分配空间。而且,必须为
3、二维数组元素的引用
对二维数组中的每个元素,引用方式
为,arrayName[index1][index2]
例如,num[1][0];
4、二维数组举例:
小结
这一章零碎的知识点很多,要求要记忆的东
西也很多,需要大家整理自己的知识体系。
如果你在此之前学过其他的计算机语言,那
你就会感到很轻松,其实对于学习者,与其
他的计算机语言相比,java基本语法学起来
并没有什么不同。只是有些规则不要混淆就
可以了 。
课后任务
? 习题:
课后习题 2.1 2.2 2.3 2.5
? 实验题目:
1、编写 Java程序,实现字符串的翻转。
2、分别用 while do……while for 循环求解
1),50!
2),1!+2!+3!+......+10!
3、用 switch,break 输出每一个月的天数 (二月定为
28天 )
4、求解 0~500之间被 7整除的数之和 (练习 continue)
5、编写一个程序,用选择法对数组
a[]={20,10,50,40,30,70,60,80,90,100}进行从大到小
的排序。