Download presentation
Presentation is loading. Please wait.
1
第二章 Java基本语法 讲师:复凡
2
本章内容 2.1 关键字 2.2 标识符 2.3 变 量 基本数据类型 基本数据类型转换 2.4运算符 2.5 程序流程控制 2.6 数组
3
2.1 关键字 关键字的定义和特点 定义:被Java语言赋予了特殊含义,用做专门用途的字符串(单词) 特点:关键字中所有字母都为小写
2.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
4
用于定义访问权限修饰符的关键字 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
5
保留字 Java保留字:现有Java版本尚未使用,但以后版本可能会作为关键字使用。自己命名标记符时要避免使用这些保留字 byValue、cast、future、 generic、 inner、 operator、 outer、 rest、 var 、 goto 、const
6
2.2 标识符 标识符: 定义合法标识符规则: Java 对各种变量、方法和类等要素命名时使用的字符序列称为标识符
2.2 标识符 标识符: Java 对各种变量、方法和类等要素命名时使用的字符序列称为标识符 凡是自己可以起名字的地方都叫标识符。 定义合法标识符规则: 由26个英文字母大小写,0-9 ,_或 $ 组成 数字不可以开头。 不可以使用关键字和保留字,但能包含关键字和保留字。 Java中严格区分大小写,长度无限制。 标识符不能包含空格。 注意:在起名字时,为了提高阅读性,要尽量有意义,“见名知意”。
7
Java中的名称命名规范 包名:多单词组成时所有字母都小写:xxxyyyzzz
8
2.3 变 量 变量的概念: 使用变量注意: 定义变量的格式: 内存中的一个存储区域 该区域有自己的名称(变量名)和类型(数据类型)
2.3 变 量 变量的概念: 内存中的一个存储区域 该区域有自己的名称(变量名)和类型(数据类型) Java中每个变量必须先声明,后使用 该区域的数据可以在同一类型范围内不断变化 使用变量注意: 变量的作用域:一对{ }之间有效 初始化值 定义变量的格式: 数据类型 变量名 = 初始化值 变量是通过使用变量名来访问这块区域的
9
(补充)程序的执行过程 内 程 序 存 栈(stack) 堆(heap) 硬 盘 静态域 常量池 (方法区) 3.执行过程中的内存管理 代码
2.找到main方法开始执行 (补充)程序的执行过程 3.执行过程中的内存管理 程 序 代码 操作系统代码 内 存 栈(stack) 1.load到内存区 局部变量、对象声明的引用 堆(heap) 硬 盘 new出来的类或数组的实例(含成员变量) 静态域 静态变量 常量池 (方法区) 字符串常量
10
对于每一种数据都定义了明确的具体数据类型,在内存中分配了不同大小的内存空间。
变量的分类-按数据类型 对于每一种数据都定义了明确的具体数据类型,在内存中分配了不同大小的内存空间。 整数类型(byte,short,int,long) 数值型 基本 数据类型 浮点类型(float,double) 字符型(char) 数据类型 布尔型(boolean) 类(class) 字符串在这里 引用 数据类型 接口(interface) 数组([ ])
11
在方法体外,类体内声明的变量称为成员变量。 在方法体内部声明的变量称为局部变量。
补充:变量的分类-按声明的位置的不同 在方法体外,类体内声明的变量称为成员变量。 在方法体内部声明的变量称为局部变量。 ●注意:二者在初始化值方面的异同: 同:都有生命周期 异:局部变量除形参外,需显式初始化。 实例变量(不以static修饰) 成员变量 所有 变量 类变量(以static修饰) 形参(方法签名中定义的变量) 局部变量 方法局部变量(在方法内定义) 代码块局部变量(在代码块内定义)
12
整数类型:byte、short、int、long
Java各整数类型有固定的表数范围和字段长度,不受具体OS的影响,以保证java程序的可移植性。 java的整型常量默认为 int 型,声明long型常量须后加‘l’或‘L’ 类 型 占用存储空间 表数范围 byte 1字节=8bit -128 ~ 127 short 2字节 -215 ~215-1 int 4字节 -231 ~ 231-1 long 8字节 -263 ~ 263-1
13
浮点类型:float、double 与整数类型类似,Java 浮点类型也有固定的表数范围和字段长度,不受具体OS的影响。
Java 的浮点型常量默认为double型,声明float型常量,须后加‘f’或‘F’。 浮点型常量有两种表示形式: 十进制数形式:如: f (必须有小数点) 科学计数法形式:如:5.12e E E-2 类 型 占用存储空间 表数范围 单精度float 4字节 -3.403E38 ~ 3.403E38 双精度double 8字节 -1.798E308 ~ 1.798E308
14
字符类型:char char 型数据用来表示通常意义上“字符”(2字节) 字符型常量的三种表现形式:
字符常量是用单引号(‘ ’)括起来的单个字符,涵盖世界上所有书面语的字符。例如:char c1 = 'a'; char c2 = '中'; char c3 = '9'; Java中还允许使用转义字符‘\’来将其后的字符转变为特殊字符型常量。例如:char c3 = ‘\n’; // '\n'表示换行符 直接使用 Unicode 值来表示字符型常量:‘\uXXXX’。其中,XXXX代表一个十六进制整数。如:\u000a 表示 \n。 char类型是可以进行运算的。因为它都对应有Unicode码。
15
boolean 类型适于逻辑运算,一般用于程序流程控制:
if条件控制语句; while循环控制语句; do-while循环控制语句; for循环控制语句; boolean类型数据只允许取值true和false,无null。 不可以0或非 0 的整数替代false和true,这点和C语言不同。
16
基本数据类型转换 自动类型转换:容量小的类型自动转换为容量大的数据类型。数据类型按容量大小排序为:
有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那种数据类型,然后再进行计算。 byte,short,char之间不会相互转换,他们三者在计算时首先转换为int类型。 当把任何基本类型的值和字符串值进行连接运算时(+),基本类型的值将自动转化为字符串类型。 char int long float double byte short
17
练习1 String str1 = 4; //判断对错:错
String str2 = 3.5f + “”; //判断str2对错:对System.out.println(str2); //输出:3.5 System.out .println(3+4+“Hello!”); //输出:7Hello! System.out.println(“Hello!”+3+4); //输出:Hello!34 System.out.println(‘a’+1+“Hello!”); //输出:98Hello! System.out.println(“Hello”+‘a’+1); //输出:Hello!a1
18
强制类型转换 自动类型转换的逆过程,将容量大的数据类型转换为容量小的数据类型。使用时要加上强制转换符(()),但可能造成精度降低或溢出,格外要注意。 通常,字符串不能直接转换为基本类型,但通过基本类型对应的包装类则可以实现把字符串转换成基本类型。 如: String a = “43”; int i = Integer.parseInt(a); boolean类型不可以转换为其它的数据类型。
19
补充: String类 值null可以赋值给任何引用类型(类、接口、数组)的 变量,用以表示这个引用类型变量中保存的地址为空。
String类是一个典型的不可变类,String对象创建出来 就 不可能被改变。创建出的字符串将存放在数据区,保证 每个字符串常量只有一个,不会产生多个副本。 String s0 = “hello”; String s1 = “hello”; String s2 = “he” + “llo”; System.out.println(s0 ==s1); System.out.println(s0 ==s2); 输出: true
20
练习2 判断是否能通过编译 1)short s = 5; s = s-2; //判断:no 2) byte b = 3;
b = b + 4; //判断:no b = (byte)(b+4); //判断:yes 3)char c = ‘a’; int i = 5; double d = .314; double result = c+i+d; //判断:yes 4) byte b = 5; short s = 3; short t = s + b; //判断:no b=3+4 ,3和4都是常量,所以java在编译时期会检查该常量的和是否超出byte类型的范围。如果没有可以赋值。 b=b1+b2不可以,是因为b1和b2是变量,因为变量的值会变化,不确定具体的值,所以默认使用int类型进行存储。
21
2.4 运算符 运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等。 算术运算符 赋值运算符 比较运算符(关系运算符) 逻辑运算符
2.4 运算符 运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等。 算术运算符 赋值运算符 比较运算符(关系运算符) 逻辑运算符 位运算符 三元运算符
22
1.算术运算符 运算符 运算 范例 结果 + 正号 +3 3 - 负号 b=4; -b -4 加 5+5 10 减 6-4 2 * 乘
3*4 12 / 除 5/5 1 % 取模 7%5 ++ 自增(前):先运算后取值 自增(后):先取值后运算 a=2;b=++a; a=2;b=a++; a=3;b=3 a=3;b=2 - - 自减(前):先运算后取值 自减(后):先取值后运算 a=2;b=- -a a=2;b=a- - a=1;b=1 a=1;b=2 字符串相加 “He”+”llo” “Hello”
23
算术运算符的注意问题 如果对负数取模,可以把模数负号忽略不记,如:5%-2=1。 但被模数是负数则不可忽略。此外,取模运算的结果不一定总是整数。 对于除号“/”,它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。 例如:int x=3510;x=x/1000*1000; x的结果是? “+”除字符串相加功能外,还能把非字符串转换成字符串.例如:System.out.println("5+5="+5+5); //打印结果是? 以下二者的区别: System.out.println('*' + '\t' +'*'); System.out.println("*" + '\t' +'*');
24
练习1:算术运算符:自加、自减 输出: i= i1= i= i2= public class TestSign{
public static void main(String[] args){ int i1 = 10,i2 = 20; int i = i1++; System.out.print(“i=”+i); System.out.println(“i1=”+i1); i = ++i1; i = i2--; System.out.println(“i2=”+i2); i = --i2; } 输出: i= i1= i= i2=
25
2.赋值运算符 符号:= 当“=”两侧数据类型不一致时,可以使用自动类型转换或使用强制类型转换原则进行处理。 支持连续赋值。
扩展赋值运算符: +=, -=, *=, /=, %= 思考1: short s = 3; s=s+2; ① s+=2; ② ①和②有什么区别?
26
2.赋值运算符 思考2: boolean b1 = false; //区分好==和=的区别。 if(b1=true)
System.out.println("结果为真"); else System.out.println("结果为假"); 思考3: int i = 1; i *= 0.1; System.out.println(i);// i++;
27
3.比较运算符 比较运算符的结果都是boolean型,也就是要么是true,要么是false。 比较运算符“==”不能误写成“=” 。
运算 范例 结果 == 相等于 == false != 不等于 != true < 小于 < false > 大于 > true <= 小于等于 <= false >= 大于等于 >= true instanceof 检查是否是类的对象 “Hello” instanceof String true 比较运算符的结果都是boolean型,也就是要么是true,要么是false。 比较运算符“==”不能误写成“=” 。
28
4.逻辑运算符 &—逻辑与 | —逻辑或 !—逻辑非 && —短路与 || —短路或 ^ —逻辑异或 a b a&b a|b !a a^b
&—逻辑与 | —逻辑或 !—逻辑非 && —短路与 || —短路或 ^ —逻辑异或 a b a&b a|b !a a^b a&&b a||b true false
29
4.逻辑运算符 逻辑运算符用于连接布尔型表达式,在Java中不可以写成3<x<6,应该写成x>3 & x<6 。
“&”和“&&”的区别: 单&时,左边无论真假,右边都进行运算; 双&时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。 “|”和“||”的区别同理,||表示:当左边为真,右边不参与运算。 异或( ^ )与或( | )的不同之处是:当左右都为true时,结果为false。 理解:异或,追求的是“异”!
30
练习2:请写出每题的输出结果 int x = 1; int y=1; if(x++==2 & ++y==2){ x =7; }
System.out.println("x="+x+",y="+y); int x = 1,y = 1; if(x++==2 && ++y==2){ x =7; } System.out.println("x="+x+",y="+y); int x = 1,y = 1; if(x++==1 | ++y==1){ x =7; } System.out.println("x="+x+",y="+y); int x = 1,y = 1; if(x++==1 || ++y==1){ x =7; } System.out.println("x="+x+",y="+y);
31
5.位运算符 位运算是直接对二进制进行运算 位运算符 运算符 运算 范例 << 左移
3 << 2 = 12 --> 3*2*2=12 >> 右移 3 >> 1 = 1 --> 3/2=1 >>> 无符号右移 3 >>> 1 = 1 --> 3/2=1 & 与运算 6 & 3 = 2 | 或运算 6 | 3 = 7 ^ 异或运算 6 ^ 3 = 5 ~ 反码 ~6 = -7 位运算是直接对二进制进行运算
32
5.位运算符 位运算符的细节 << >> >>> & | ^ ~
空位补0,被移除的高位丢弃,空缺位补0。 >> 被移位的二进制最高位是0,右移后,空缺位补0; 最高位是1,空缺位补1。 >>> 被移位二进制最高位无论是0或者是1,空缺位都用0补。 & 二进制位进行&运算,只有1&1时结果是1,否则是0; | 二进制位进行 | 运算,只有0 | 0时结果是0,否则是1; ^ 相同二进制位进行 ^ 运算,结果是0;1^1=0 , 0^0=0 不相同二进制位 ^ 运算结果是1。1^0=1 , 0^1=1 ~ 正数取反,各二进制码按补码各位取反 负数取反,各二进制码按补码各位取反
33
6.三元运算符 格式: (条件表达式)? 表达式1:表达式2; 为true,运算后的结果是表达式1; 为false,运算后的结果是表达式2;
表达式1和表达式2为同种类型 三元运算符与if-else的联系与区别: 1)三元运算符可简化if-else语句 2)三元运算符要求必须返回一个结果。 3)if后的代码块可有多个语句 练习: 获取两个数中的较大数 获取三个数中的较大数
34
运算符的优先级 高 ●运算符有不同的优先级,所谓优先级就是表达式运算中的运算顺序。如右表,上一行运算符总优先于下一行。
. () {} ; , R—>L ~ !(data type) L—>R * / % + - << >> >>> < > <= >= instanceof == != & ^ | && || ? : = *= /= %= += -= <<= >>= >>>= &= ^= |= 运算符的优先级 高 ●运算符有不同的优先级,所谓优先级就是表达式运算中的运算顺序。如右表,上一行运算符总优先于下一行。 ● 只有单目运算符、三元运算符、赋值运算符是从右向左运算的。 表达式:就是具有一定语法规则的语句。 低
35
2.5 程序流程控制 顺序结构 分支结构 循环结构 程序从上到下逐行地执行,中间没有任何判断和跳转。 根据条件,选择性地执行某段代码。
2.5 程序流程控制 顺序结构 程序从上到下逐行地执行,中间没有任何判断和跳转。 分支结构 根据条件,选择性地执行某段代码。 有if…else和switch两种分支语句。 循环结构 根据循环条件,重复性的执行某段代码。 有while、do…while、for三种循环语句。 注:JDK1.5提供了foreach循环,方便的遍历集合、数组元素。
36
2.5 程序流程控制 顺序结构 Java中定义成员变量时采用合法的前向引用。如: public class Test{
2.5 程序流程控制 顺序结构 Java中定义成员变量时采用合法的前向引用。如: public class Test{ int num1 = 12; int num2 = num1 + 2; } 错误形式: int num2 = num1 + 2;
37
分支语句1: if-else语句 if语句三种格式: 1. if(true){ 执行代码块; } 2. if(条件表达式){ else{
…… else{
38
if-else语句应用举例 public class TestAge{
public static void main(String args[]){ int age = 75; if (age< 0) { System.out.println("不可能!"); } else if (age>250) { System.out.println("是个妖怪!"); } else { System.out.println(“人家芳龄 " + age +" ,马马乎乎啦!"); }
39
if语句例题1 从键盘输入小明的期末成绩。 当成绩为100分时,奖励一辆BMW; 当成绩为(80,99]时,奖励一个台iphone5s; 当成绩为[60,80]时,奖励一本参考书; 其它时,什么奖励也没有。
40
if语句例题2 编写程序:由键盘输入三个整数分别存入变量num1、num2、num3,对它们进行排序(使用 if-else if-else),并且从小到大输出。
41
分支结构2:switch语句 switch(变量){ case 常量1: 语句1; break; case 常量2: 语句2; … … case 常量N: 语句N; default: 语句; }
42
switch语句应用举例 public class Test{
public static void main(String args[]){ int i = 1; switch (i) { case 0: System.out.println("zero"); break; case 1: System.out.println("one"); default: System.out.println("default"); }
43
switch语句应用举例 public class Test{
public static void main(String args[]){ String season = “summer”; switch (season) { case “spring”: System.out.println(“春暖花开"); break; case “summer”: System.out.println(“夏日炎炎"); case “autumn”: System.out.println(“秋高气爽"); case “winter”: System.out.println(“冬雪皑皑"); default: System.out.println(“季节输入有误"); }}}
44
switch语句有关规则 switch(表达式)中表达式的返回值必须是下述几种类型之一:byte,short,char,int,枚举,String; case子句中的值必须是常量,且所有case子句中的值应是不同的; default子句是可任选的,当没有匹配的case时,执行default break语句用来在执行完一个case分支后使程序跳出switch语句块;如果没有break,程序会顺序执行到switch结尾
45
例 题 1.使用 switch 把小写类型的 char型转为大写。只转换 a, b, c, d, e. 其它的输出 “other”。 2.对学生成绩大于60分的,输出“合格”。低于60分的,输出“不合格”。 3.根据用于指定月份,打印该月份所属的季节。 3,4,5 春季 6,7,8 夏季 9,10,11 秋季 12, 1, 2 冬季 4. 编写程序:从键盘上输入2014年的“month”和“day”,要求通过程序输出输入的日期为2014年的第几天。
46
int a = 3; switch语句练习1 使用switch语句改写下列if语句: int x = 100; if(a==1) x+=5;
else if(a==2) x+=10; else if(a==3) x+=16; else x+=34;
47
switch和if语句的对比 if和switch语句很像,具体什么场景下,应用哪个语句呢?
如果判断的具体数值不多,而且符合byte、 short 、int、 char这四种类型。虽然两个语句都可以使用,建议使用swtich语句。因为效率稍高。 其他情况:对区间判断,对结果为boolean类型判断,使用if,if的使用范围更广。
48
switch语句练习2 编写程序:从键盘上读入一个学生成绩,存放在变量score中,根据score的值输出其对应的成绩等级:
score>= 等级:A 70=<score< 等级: B 60=<score< 等级: C score< 等级:D If else
49
switch语句练习3 从键盘分别输入年、月、日,判断这一天是当年的第几天 注:判断一年是否是闰年的标准:
1)可以被4整除,但不可被100整除 2)可以被400整除
50
循环结构 循环语句功能 循环语句的四个组成部分 循环语句分类 在某些条件满足的情况下,反复执行特定代码的功能
初始化部分(init_statement) 循环条件部分(test_exp) 循环体部分(body_statement) 迭代部分(alter_statement) 循环语句分类 for 循环 while 循环 do/while 循环
51
for 循环语句 语法格式 for (初始化表达式①; 布尔值测试表达式②⑤⑦; 更改表达式){ 语句或语句块③⑥ ; } 1 2 4 3
52
应用举例 public class ForLoop { public static void main(String args[]){
int result = 0; for(int i=1; i<=100; i++) { result += i; } System.out.println("result=" + result);
53
for语句例题 编写程序fbb.java,从1循环到150并在每行打印一个值,另外在每个3的倍数行上打印出“foo”,在每个5的倍数行上打印“biz”,在每个7的倍数行上打印输出“baz”。 1 2 3 foo 4 5 biz 6 foo 7 baz … 15 foo biz …. 105 foo biz baz …
54
for语句练习 1.打印1~100之间所有奇数的和 2.打印1~100之间所有是7的倍数的整数的个数及 总和(体会设置计数器的思想) 3.输出所有的水仙花数,所谓水仙花数是指一个3 位数,其各个位上数字立方和等于其本身。 例如: 153 = 1*1*1 + 3*3*3 + 5*5*5
55
while 循环语句 语法格式 while( 布尔值测试表达式){ 语句或语句块; [更改语句;] } 应用举例 [初始化语句]
public class WhileLoop { public static void main(String args[]){ int result = 0; int i=1; while(i<=100) { result += i; i++; System.out.println("result=" + result);
56
do-while 循环语句 语法格式 应用举例 do{ 语句或语句块; [更改语句;] }while(布尔值测试表达式);
[初始化语句] do{ 语句或语句块; [更改语句;] }while(布尔值测试表达式); 应用举例 public class WhileLoop { public static void main(String args[]){ int result = 0, i=1; do{ result += i; i++; }while(i<=100); System.out.println("result=" + result); }
57
循环语句练习 编写程序一:求1到100之间所有偶数的和。用for和while语句分别完成。
编写程序二:从键盘读入个数不确定的整数,并判断读入的正数和负数的个数,输入为0时结束程序。 note: 最简单无限循环格式:while(true) , for(;;),无限循环存在的原因是并不知道循环多少次,需要根据某些条件,来控制循环。
58
嵌套循环 将一个循环放在另一个循环体内,就形成了嵌套循环。其中,for ,while ,do…while均可以作为外层循环和内层循环。
实质上,嵌套循环就是把内层循环当成外层循环的循环体。当只有内层循环的循环条件为false时,才会完全跳出内层循环,才可结束外层的当次循环,开始下一次的循环。 设外层循环次数为m次,内层为n次,则内层循环体实际上需要执行m*n=mn次。 例题:1)九九乘法表 2)1—100之间的所有质数
59
特殊流程控制语句1 break 语句 break语句用于终止某个语句块的执行 { …… break; …… }
{ …… break; …… } break语句出现在多层嵌套的语句块中时,可以通过标签指明要终止的是哪一层语句块 label1: { …… label2: { …… label3: { …… break label2;
60
特殊流程控制语句1 break 语句用法举例 public class TestBreak{
public static void main(String args[]){ for(int i = 0; i<10; i++){ if(i==3) break; System.out.println(" i =" + i); } System.out.println("Game Over!");
61
特殊流程控制语句2 continue 语句 continue语句用法举例 continue语句用于跳过某个循环语句块的一次执行
public class ContinueTest { public static void main(String args[]){ for (int i = 0; i < 100; i++) { if (i%10==0) continue; System.out.println(i); } } }
62
特殊流程控制语句3 return:并非专门用于结束循环的,它的功能是结束一个方法。当一个方法执行到一个return语句时,这个方法将被结束。
与break和continue不同的是,return直接结束整个方法,不管这个return处于多少层循环之内
63
特殊流程控制语句说明 break只能用于switch语句和循环语句中。 continue 只能用于循环语句中。
二者功能类似,但continue是终止本次循环,break是终止本层循环。 break、continue之后不能有其他的语句,因为程序永远不会执行其后的语句。 标号语句必须紧接在循环的头部。标号语句不能用在非循环语句的前面。
64
0512-57882866 www.bcdaren.com 昆山爱达人 1250121864 昆山爱达人信息技术有限公司 视频录制:
视频提供 视频录制: 联系电话: 官网地址: 联系公众号: 昆山爱达人 联系QQ: 编程达人APP:
Similar presentations