Java语言基础—语法基础
主讲:董旭源
Contents
语句以及控制结构
表达式
运算符
数据表示以及数据类型
标识符、关键字
数组
标识符(Identifier)
?标识符定义
?在java语言中用来给一个类、变量或方法命名
的符号
?标识符的命名规则:
?以字母,“_”或“$”符号开头
?可以包含字母、“_”、“$”和数字符号
?大小写敏感
?不能与保留关键字冲突
?没有长度限制
标识符命名原则
?可读性
?望文生义
?举例(以下的标识符合法吗?)
?HelloWorld
?class
?_983
?data#
?$128
?classFirstJava{…}
关键字(Keywords:50个)
?被赋予特定含义
?专门用途,不能用作标识符
?都是小写
?Java中truefalse不是关键字,而是boolean
类型的字面量
?保留字:const,goto
?所有的关键字都是小写,friendly,sizeof不是
java的关键字
关键字列表
?abstractbooleanbreakbyte
casecatchcharclasscontinue
defaultdodoubleelseextends
enumfalsefinalfinallyfloat
forifimplementsimport
instanceofintinterfacelong
nativenewnullpackageprivate
protectedpublicreturnshortstatic
superswitchsynchronizedthis
throwthrowstransienttruetry
voidvolatilewhile
数据
?数据的表示
?常量
?变量
?数据的类型
数据的表示
?常量
?用字符串来表示,数据的值,但有不同的类型
?例如
?123(整型常量)
?''A''(字符常量)
?3.14159
?true/false(boolean常量)
?“helloworld”(字符串常量)
?被final修饰——值不可变的变量
?与C语言中的const
数据的表示
?变量
?本质上是内存的区域,作为Java最基本的存储
单元
?要素
?变量名、类型、作用域
?变量名:通过它来访问变量(值)
?变量的使用原则
?先声明,然后再赋值,才能使用
?Java是强类型,在声明变量是必须指定类型
?举例
变量分类
?按数据类型进行分类
?基本数据类型
?引用数据类型
?按位置(作用域)进行分类
?局部变量
?方法、语句块内部定义的变量
?成员变量
?方法外、类内部定义的变量
变量是有大小的
Java的数据类型
?基本数据类型
?数值型
?整数型:byte,short,int,long
?浮点型:float,double
?字符型:char
?布尔型:boolean
?引用数据类型
?数值
?类
?接口
Java的基本数据类型
?byte8-bit整形值
?short16-bit整形值
?int32-bit整形值
?long64-bit整形值
?float32-bit浮点数值
?double64-bit浮点数值
?char16-bitunicode编码的字符
?boolean布尔值(true或false)
举例
?byteb=1;
?计算机的表示:00000001
?byte的值范围是:-128~127
shorta=57;0000000000111001
1111111111000111
1,正整数,存储该数字的二进制原码。
shorta=-57;
2,负整数,存储该数字的二进制补码。
inta=57;00000000000000000000000000111001
inta=-57;11111111111111111111111111000111
高字节位低字节位
整数在计算机中的表示
浮点数据类型
?float32位(4个字节)
?double64位(8个字节)
?程序中浮点数据的表示
?直接在程序中书写的浮点数默认为dobule类
型。
?直接表示一个float类型的值必须在数字后跟
‘f’或‘F’
?直接表示一个double类型的值可以在数字后
跟‘d’或‘D’
问题
?Float型数据32位,与int相同,但float的范围
远比int大,为什么?
?为什么说浮点数表示有误差?
?为什么Java数据是可移植的,而C不能?
?浮点数的精度?
字符类型char
?其实就是一个无符号的16位整型,
?其范围为0~65535,用来存储该字符Unicode编码值
?因为Unicode编码中包含汉字的编码,所以一个char
类型的变量也可以存储一个汉字字符。
?在代码中直接给出的一个字符值必须用单引号括起来。
?charzhChar=?中’;
?charenChar=?a?;
?charucChar=?\u0060?;
?对某些不方便直接书写或直接书写有歧义的字符,
java语言规定用转义字符给出。
对字符变量赋值
?可以把char类型数据当作整数数据来操作。
?所以能给字符变量赋值的有
?字符本身
?整数(10、8、16进制)
?Unicode编码:?\u……?
转义符
转义字符描述
\ddd1到3位8进制数所表示的字符(ddd)
\uxxxx1到4位16进制数所表示的字符(xxxx)
\’单引号字符
\’’双引号字符
\\反斜杠字符
\r回车,把光标移至行首
\n换行
\f走纸换页
\t横向跳格
\b注:是退格back而非backspace(删除)
布尔类型
?布尔值表示真假
?区别
?在C/C++中,非零为真,但有4个假
?0(=48)
??\0?(=0)
?Null
?False
?但Java中只有true,false
?在Java规范中没有定义boolean的内存大小
?推荐是8bits
?但要取决于JVM的实现
类型转换
?强制类型转换
?一般的,大容量数据类型的变量不能赋给小容
量类型的变量
?隐式类型转换(类型提升)
类型的自动提升
char
byte
short
int
double
float
long
说明:
1,在本图中,顺着箭头方向的类型转换可以自动进行,
逆箭头方向的转换或无箭头类型之间的转换必须强制转换。
2,能将A类型变量自动转换成B类型变量的前提条件是这种
转换不会造成数据和精度的丢失,即A类型的取值范围是
B类型的取值范围的子集。
基本数据类型的取值范围
TypeBitsBytesMinimumRangeMaximumRange
boolean81Onlytwovalues:trueorfalse
byte81-2727-1
short162-215215-1
char1620216-1
int324-231231-1
long648-263263-1
float324NotneededNotneeded
double648NotneededNotneeded
运算符
?算术运算符
?若(操作数有double类型数据)
?表达式结果为double
?若(操作数有float类型数据)
?表达式结果为float
?若(操作数有long类型数据)
?表达式结果为long
?否则
?结果都是int
表达式
?符合一定语法规则的运算符、操作数序列
?表达式有类型和值
?表达式的运算顺序
?按运算符的优先级别进行
?优先级相同的按约定的结合方向进行
?三目运算符
?X?Y:Z
语句的控制结构
?顺序结构
?选择分支结构
?If
?If-else
?If-elseif-elseif-else
?switch(exp){casevalue1:statement1;break;}
?循环结构
?for(exp1;exp2;exp3){}
?while(exp){}
?do{}while(exp);
break&.continue
?break
?终止某个语句块的执行
?若在循环体中,可以强行退出循环
?若break;语句不出现在循环或者switch中时编
译会出错
?continue
?在循环体中使用continue表示终止当前(一次)循
环过程,即跳过循环体中continue语句后没有
执行的循环,并开始下一次循环过程
练习
?计算阶乘
?1!+2!+3!+4!+…+10!
?输出1~200以内的质数
?质数:除了1和自身外再也找不到其他约数
?编写程序,判断给定的某个年份是否是闰年。
?闰年的判断规则如下:
?(1)若某个年份能被4整除但不能被100整除,则
是闰年。
?(2)若某个年份能被400整除,则也是闰年。
练习
?利用for循环打印99乘法表?
?输出所有的水仙花数,把谓水仙花数是指一个数3
位数,其各各位数字立方和等于其本身,
?例如:153=111+333+555
数组
?定义
?数组也是对象
?内部元素的类型相同
?声明时要指定元素的类型
?每一个元素都是变量
创建数组
?声明一个数组
?例如:int[]nums;
?开辟内存空间
?如:nums=newint[7];
?初始化赋值
?如:num[0]=10;
?通过下标来访问数组的元素
?下标是数组的位置
其他形式创建数组
?声明、初始化
?如:int[]nums={1,2,3,4,5,6,7};
?使用new
?如:int[]nums=newint[]{1,2,3};
?错误示范
?int[]nums=newint[3]{1,2,3};
数组的内存表示
?画图
数组的遍历
?数组的属性:length
?只读属性
?下标越界
引用数据类型的数组
?Dog[]dogs=newDog[10];
?内存的表示?
?元素的默认值是
?Null
多维数组
?声明、初始化、遍历
?Java中的多维数组
?其实都是一维数组
?内存表示
数组的copy
?引用赋值vs.数组(对象)的拷贝
?手工copy数组
?使用System类中的静态方法
?System.arraycopy(src,src_index,dest,
dest_index,length)
练习
?定义一个int型的一维数组,包含10个元素,分
别赋一些随机整数,然后求出所有元素的最大值
,最小值,平均值,和值,并输出出来。
?完成九宫格程序?
TheEnd
Aimforperfection,butexpectittotakea
longtimetobecomeverygood
|
|