资源描述
第三章 Java 语言基础,主要内容: 数据类型、变量、常量 表达式 流程控制语句,问题:,定义一个变量时,如何确定合理的数据类型? 引用类型和基本数据类型变量有何不同? 如何确定变量的生命周期?,Java 的基本数据类型,3.2 数据类型、变量与常量,数据类型的特点(与C的区别),各种数据类型占用固定的内存长度,与具体的软硬件平台无关(跨平台内在要求); 各类型都有一个缺省值(C无缺省值);,选择合适的整数类型,考虑实际需求和程序的性能 如定义一个变量保存月份 byte month;节省内存 long month;占用太多内存 int month; 简化运算时强制类型转换操作,因为整数运算返回值只能是int或long 如:byte month=1; month=(byte)(month+2);/无强制类型转换则编译出错,Unicode 编码,Java语言对字符数据类型(char) 采用 Unicode 编码(UCS-2),收录所有语言文字中的字符,一种跨平台的字符编码。 其它常用字符编码有: ASCII编码:主要表达现代英语和其他西欧语言中的字符。 ISO-8859-1编码:8位,用于西欧语言中的字符编码。 GB2312编码:包括对简体中文字符的编码。 GBK编码:对GB2312编码的扩展,分为汉字区和图形符号区。 UTF编码:把Unicode编码转换为操作系统支持的编码。,标识符(与C规定相同),用来标识一个包、类名、对象、方法、变量等。 标识符由字母、数字、下划线 _ 和美元符号 $ 组成; 以字母、下划线 _ 或美元符号 $ 开头; 大小写有区别; 见名知义; P36/表3-2,指出不合法标识符的错误; 习题3-4,类名(接口名) 名词 第一字母大写,每一单词首字母大写。 例:AccountBook 方法名 动词 第一字母小写,每一单词首字母大写。 例:balanceAccount() 变量名 名词 第一字母小写,每一单词首字母大写。 常量名 全部大写,单词间用下划线分开 . 例:HEAD_COUNT,常 量,布尔常量:true , false 整型常量 十进制: 以非 0 开头 八进制: 以 0 开头 017 = 15 十六进制:以 0 x 开头 0 x2f = 47 浮点常量 单精度(32位): 以 F、f 表示,如:8.1f; 双精度(64位) :带 D、d 或不加后缀,如:8.1 字符串常量 字符串可以连接:“Hello” + “ Java” 得到 “Hello Java”,字符常量,如:a、8以及(转义符),变 量,强制声明(与C相同) 格式:数据类型 变量名 = 初始值 ; 如:boolean m_bFalg = true ; double m_dScore ;,基本数据类型的使用示例,例子3-1: 调试程序,回答问题: 1、该程序保存的文件名是什么?为什么要这样命名? 2、在执行程序时,系统怎么知道该从哪里开始程序? 3、第8行long l=123456789L的L的含义是什么?去掉可以吗?为什么? 4、第10行float f=3.1415925F的F含义是什么?去掉可以吗?为什么? 5、第12行String s=“你好!”,中文的显示问题,String是基本数据类型吗? 6、char chc = 中 ;,字符串与数字的互相转化,见P37例32: int i = Integer.parseInt( string ); 以上函数的定义为: public static int parseInt ( Strings ) throws NumberFormatException,变量的作用域(重点),作用域是指它的存在范围,只在这个范围内,程序代码才能访问它。 Java的变量的作用域就是声明变量的语句所在的语句块。 例子3-2:代码12行变量br的作用域,s和i的声明应放在try语句外。,变量的初始化及默认值,Java的变量必须先定义,后初始化,再使用。 对于类的成员变量,JVM会先自动赋默认值。 对于局部变量,JVM不会自动初始化为默认值。 例子:VaribleAvailable.java,引用类型类,定义类(新的数据类型) class MyDate int day ; int month ; int year ; 基本数据类型直接分配内存空间 int I,j,k ; 引用类型 ? MyDate d1 ; d1 = new MyDate() ;,引用类型类,MyDate d1 = new MyDate() ;,d1.day = 8 ; d1.month = 8; d1.year = 2008 ;,3.3表 达 式,由变量、常量、对象、方法调用和操作符组成的式子。表达式的值即运算后的结果。 类型转换: 自动转换:从占用内存较少的类型转化成占用内存较多的类型; 强制转换:byte b = 10 ;int i = -1 ; b = (byte ) i ;,算 术 运 算,双目运算符 +(加) - (减) * (乘) /(除) %(取余) 单目运算符 + +(自增)- -(自减) -(求相反数) 例:int x =2 ; int y = ( + + x ) * 3 ; 求x=?,y=? 结果:x = 3, y = 9 例:int x =2 ; int y = ( x + + ) * 3 ; 求x=?,y=? 结果: x = 3, y = 6 P41例34:,关 系 运 算,= =(等于)! =(不等于) (大于) =(大于等于) =(小于等于) 用于比较数据的大小关系,结果为布尔型;,逻 辑 运 算,Bitwise运算符: 问函数的作用; 对象运算符 instanceof 用来测定一个对象是否属于某一个特定类的实例,形式如下: obj instanceof ClassName(InterfaceName) 例:Dog dog=new Dog(); dog instanceof XXX在以下情况下为true XXX为Dog类,Dog类的直接或间接父类,Dog类实现的接口,以及所有父类实现的接口。,Animal a=new Dog(); System.out.println(a instanceof Animal);/true System.out.println(a instanceof Dog); /true System.out.println(a instanceof Cat); /false,3.字符串连接操作符“” “”连接字符串,生成新的字符串。其一个操作数为String类型,另一个操作数可以是任意类型。因为在java.lang.Object类中定义了toString()方法。 如:String s=“Age:”+1+2;/s的内容为Age:12,4.“”与对象的equal()方法 “”用来比较两个操作数是否相等。当“”两边都是引用类型变量时,这两个变量都必须引用同一个对象时结果才为true。 Object类的equal()方法是比较引用的是否为同一个对象。java.io.File,java.util.Date,java.lang.String,包装类都覆盖了Object类的equal()方法,它们的比较规则为如果两个对象的类型一致,并且内容一致,则返回true。,String s1=new String(“Hello”); String s2=new String(“Hello”); System.out.println(s1=s2);/false System.out.println(s1.equals(s2);/true,可以在用户自定义的类中覆盖Object.equals()方法,重新定义比较规则。 例见Person.java:定义一个Person类,实现两个Person实例,只要名字相同就可以认为是同一个。,运算符的优先级与结合性,运算符的优先级决定了表达式中不同运算执行的先后顺序。 运算符的结合性决定了并列的相同运算的先后执行顺序。,例子:习题3-8 设A=3,b=-5,f=true; -a%b+为2, (a=1,生活中使用if判断的实例?,分支语句(2),2选择语句 if-else if(boolean-expression) statement1;else statement2;,生活中使用if-else选择的实例?,分支语句(3),3多分支语句 (1)if-else if else 语句 if (boolean-expression1) statement1;else if (boolean-expression2) statement2;else if (boolean-expressionN) statementN;else statement;,分支语句(4),3多分支语句 (2)switch 语句(开关语句) switch (expression) case value1 : statement1; break;case value2 : statement2; break; case valueN : statementN; break;default : defaultStatement; ,3.4.3循环语句,循环体,条件表达式,条件表达式,循环体,表达式 3,表达式 1,循环体,表达式 2,T,T,T,F,F,F,(b) do-while 语句,(a) while 语句,(c) for 语句,图 3-9 Java 的三种循环语句流程,While的例子3-8:找到所有的水仙花数。水仙花数是三位数,各位数字的立方和等于数本身。(Narcissus.java) Do-while例子3-9:从用户键盘输入一个字符后,输出这个字符对应的ASCII码。直到输入为”#”字符结束。(showCharValue.java) For语句例子3-10:找出10000以内的完全数。完全数是等于其所有因子和(包括1但不包括这个数本身)的数。(PerfectNum.java),跳 转 语 句 continue 、break 、 return (无 goto); continue 语句 不带标号(与C相同): 终止当前循环,跳过本循环中剩余的语句,直接进入下一次循环。 带标号(Java特有): 格式: continue 标号名;,例 打印 1 100 之间的素数: First_loop: for (int i=1; i100; i+) for ( int j=2; ji; j+) if ( i % j = 0 )/ i 不是素数 continue First_loop ;/ 跳到外层循环 System .out .println ( i ) ; ,break 语句 不带标号的 break : 跳出它所在的 switch 分支或最内层循环体。 带标号的 break : 跳出标号标志的语句块; break 标号名 ; for () a: b: break b; break a; ,小 结,数据类型的特点(缺省值、内存长度固定、引用数据类型) 表达式 流程控制语句,指出程序的错误: public class MyJavaClass public static void main() System.out.println(Am I wrong?); System.out.println(程序结束。); ,课堂编程实践,编一程序产生3个20以内的随机数作为三角形的三条边,检验是否构成三角形,若可以,输出三条边的长度,计算其面积并输出。 提示: a,b,c是三角形的三条边,则任意两边的和大于第三边。(或任意两边的差小于第三边)。 面积=Math.sqrt(s*(s-a)*(s-b)*s-c),其中 s=1.0/2*(a+b+c),
展开阅读全文