第二章变量、数据类型和运算符_第1页
第二章变量、数据类型和运算符_第2页
第二章变量、数据类型和运算符_第3页
第二章变量、数据类型和运算符_第4页
第二章变量、数据类型和运算符_第5页
已阅读5页,还剩60页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第二章第二章 变量、数据类型和运算变量、数据类型和运算符符 第二章第二章 变量、数据类型和运算符变量、数据类型和运算符技能目标:技能目标:通过本章学习,了解Java程序设计相关的基本概念,掌握Java标识符、关键字、数据类型、运算符与表达式等编程基础知识,为后续章节学习编程做准备。知识目标:知识目标: 掌握常量、变量的概念; 会使用常用数据类型:int, float,double, char; 会使用基本运算符:赋值运算符、算术运算符; 会进行数据类型转换; 掌握常用的输入输出数据的方法任务:任务: 完善教务管理系统,输出学生相关信息,并计算学生完善教务管理系统,输出学生相关信息,并计算学生总

2、成绩、成绩平均分和成绩差总成绩、成绩平均分和成绩差2.1 Java的基本数据类型2.1.1标识符和关键字1.标识符 Java语言采用更为国际化的Unicode字符集。在这种字符集中,每个字符用2个字节即16位表示。这样,整个字符集中共包含65535个字符。其中,前面256个字符表示ASCII码,使Java对ASCII码具有兼容性。除了数字09、英文字母AZ、az及+、-、*、/等ASCII字符外,Unicode字符集还提供了其他语言文字,如拉丁语、希腊语、汉字等。 2.1.1标识符和关键字 在Java程序设计语言中,用来标识变量、类、方法的名字,称为标识符。Java语言要求标识符必须符合以下的

3、命名规则: 标识符由字母、数字、下划线“_”和美元符号“$”组成; 标识符的首字符必须是英文字母、下划线或美元符; 关键字不能作为标识符; 标识符区分大小写,或者说大小写敏感; 标识符的长度不受限制。 2.1.1标识符和关键字例如,以下是合法的标识符: studentName _studentName $studentName Teacher School例如,以下是非法的标识符: 2student student-Name classroom# class 123Java约定:关键字、变量名、对象名、方法名、包名通常全部字母小写;如果由多个单词构成标识符,则首字母小写,其后单词首字母大写,如

4、studentName;类名首字母大写,如MyFrame;常量名全部字母均大写,如PI。2.1.1标识符和关键字2关键字 在Java语言中,有一些被定义为特定意义或操作的字符串,这些字符串称为关键字或保留字。 分类:1)基本数据类型:byte、short、int、long、float、double、char、boolean、true、false;2)程序结构相关:if、else、switch、case、break、default、do、while、for、continue ;3)类和接口相关:class、interface、public、protected、private、extends、im

5、plements、abstract、final、static、new;4)异常处理相关try、catch、finally、throw、throws;5)其它情况2.1.2 基本数据类型 Java语言定义了八种基本数据类型,这八种基本数据类型又可以归为以下四类,逻辑类型(boolean),字符类型(char),整数类型(byte、short、int、long),浮点类型(double、float)。 Java引用数据类型主要包括数组(array)、类(class)和接口(interface),这三个概念将在后面的章节中详细介绍。2.1.3 常量 常量是指在程序执行过程中始终保持不变的量,是一个简

6、单值的标识符或名字。根据数据类型的不同,常量有整型、浮点型、字符型、字符串型、布尔型等。 2.1.3 常量1.整型常量 Java整型常量有十进制、八进制和十六进制3种形式。 十进制整型常量是由不以0开始的、09的数字组成的数据组合。如123、-456等。 八进制整型常量是由以0开始的、07的数字组成的数据组合。如0123表示十进制数83,017表示十进制数15。 十六进制的整型常量是以0 x或0X开始的、09的数字和AF(或af)的字母组成的数据组合。如0 x123表示十进制数291、0X2A表示十进制数42。 一个整型常量的隐含类型为int,若要表示一个长整型(long)数值时,需要在整数后

7、加上后缀L或l。如123L表示该数为长整型数123。 2.1.3 常量2.浮点型常量 浮点型常量也称为实型常量,分为双精度(double)和单精度(float)两种类型。 双精度在内存中占8个字节,数值精度较高,数值后面可加D或d,也可省略,系统默认的实数类型为双精度类型,如1.23默认为双精度类型常量。 单精度浮点数占4个字节的内存,数值精度相对于双精度较低,浮点数后必须跟F或f。如1.23F为单精度类型常量。 实型常量只能采用十进制表示,有小数和指数两种形式。当一个实数很大或很小时,可以使用指数形式,其指数部分用字母E或e表示,如1.23E5、-4.5e3F。 2.1.3 常量3.字符型常

8、量 字符型常量是指由单引号括起来的单个Unicode字符集中的字符,如A、2、#、等。对于不可显示或有特殊意义的字符,Java语言允许用带“”开始的字符序列表示,如n、t。表2-3中列出了Java语言中以“”开始的特殊字符,这些符号对标准输出起控制作用。2.1.3 常量4.布尔型常量 布尔型常量有两个值:true和false,分别表示“真”和“假”两个状态,在计算机内用一个二进制位来表示。Java语言中不支持像C或C+语言中用非0或0来表示“真”或“假”两种状态。 布尔类型也称为逻辑类型,一般用于逻辑测试,在程序的流程控制语句中经常使用。2.1.4 变量 变量是指程序运行过程中其值发生改变的量

9、。在Java程序中是通过变量来操作内存中的数据的,因此程序在使用任何变量之前首先应该在该变量和内存单元之间建立联系,这个过程称为定义变量或声明变量。 2.1.4 变量1.变量定义 变量必须先定义后使用。变量的定义需要指出变量的类型、名称,还可以为其赋初值,一般格式: 数据类型 变量; 数据类型 变量1,变量2,变量n; 数据类型 变量=数据值; 其中,数据类型可以是一个基本数据类型,也可以为引用数据类型,而数据值则是相应的数值或者是引用数据类型的一个实例(对象),如果同时定义了多个相同类型的变量,则它们之间用逗号分隔。2.1.4 变量例如:boolean b; /定义变量b为布尔型char c

10、=A; /定义变量c为字符型,且赋值为Aint i=2; /定义变量i为整型,且赋值为2float f=1.2f; /定义变量f为单精度浮点型,且赋 值为1.2,必须加后缀 fdouble d=3.4; /定义变量d为双精度浮点型,且赋值为3.4int i,j,k; /定义多个整型变量i,j,k2.1.4 变量例2-1输出本班Java课考试最高分。public class MaxScore public static void main(String args) int score = 99; System.out.println(本次Java考试最高分: + score); 程序运行结果:本

11、次Java考试最高分: 992.1.4 变量例2-2输出本班Java课考试取得最高分的同学的学号、姓名、性别、Java课考试成绩。public class MaxScore public static void main(String args) String name=李雷; String num=20140101; char sex=男; int score = 99; System.out.println(本次Java考试最高分: + score); System.out.println(姓名:+name); System.out.println(学号:+num); System.out

12、.println(性别:+sex); 2.符号常量定义常量有两种形式:直接常量和符号常量。在2.1.3节中讲到的常量均为直接常量,直接常量是指在程序中直接引用的常量。符号常量声明的形式与变量声明基本一样,只需要用关键字final标识,final写在最前面。例如:final float PI=3.14f;final int MIN=1;Java约定符号常量全部用大写字母表示。标识符一旦被声明为符号常量,在程序中就不能够再改变。符号常量是以标识符形式出现的常量,符号常量必须先声明后使用。声明符号常量可以提高程序的可读性,使程序易于修改。2.1.5 数据类型转换 Java数据类型转换分为两种情形:一

13、是自动类型转换,二是强制类型转换。2.1.5 数据类型转换1.自动类型转换自动类型转换总是按照数据类型的运算精度由低到高进行,它们的顺序是:byteshortintlongfloatdouble2.1.5 数据类型转换例2-3某班期中考试Java考试平均分80.25分,期末比期中多2分,计算期末考试平均分。public class Conv1 public static void main(String args) double midAvg = 80.25; / 期中平均分double finalAvg; / 期末平均分int rise = 2; / 增长的分数finalAvg = midA

14、vg + rise; / 自动类型转换System.out.println(期末平均分是: + finalAvg); / 显示期末考试平均分程序运行结果: 期末平均分是:82.252.1.5 数据类型转换 2.强制类型转换 不同类型的数据之间进行运算时,低精度类型的数据可以自动转换成高精度类型的数据。若让高精度数据转换成低精度数据,需要强制类型转换。 强制类型转换也叫显性转换,在程序代码中利用转换语句进行转换。转换语句的格式如下: (数据类型)表达式 例如: int i=(int)12.3; int i=(int)12.3+1.2; /语法错误2.1.5 数据类型转换 例2-4 去年联想笔记本

15、所占的市场份额是30,今年增长的市场份额是2.6,求今年所占的份额。 public class Conv2 public static void main(String args) int before = 30; / 联想笔记本市场份额double rise = 2.6; / 增长的份额/ 计算今年的市场份额(double型变量强制转化成int型变量)int now = before + (int) rise; / 现在的份额, 比较 now=(int)(before+rise)区别System.out.println(今年的市场份额是: + now);程序的运行结果如下:今年的市场份额是:

16、322.2运算符与表达式2.2.1 算术运算符与算术表达式 算术运算符分为:单目算术运算符和双目算术运算符,单目算术运算符的优先级较双目算术运算符的高。 2.2运算符与表达式(1)双目运算符+、-、*、/完成加、减、乘、除四则运算,%求两个操作数相除的余数。这5个运算符均适用于整数和浮点数类型。“/”根据操作数类型实现整除和实数除法运算,即两个整数相除为整除,两个浮点数相除为实数除法。例如: 3/2 /整除,运算结果是整数1 3.0/2 /实数除法,运算结果是浮点数1.5 3%2 /余数为整数1 -3%2 /余数为-1,结果符号与被除数相同 12.3%2 /余数为0.3 2.2运算符与表达式(

17、2)递增1运算符分为前缀+(如+i)和后缀+(如i+);前缀+是先加后引用,表达式和i的值都为加1以后的值。后缀+是先引用后加,表达式为i未加1之前的值,i的值变为加1以后的值。(3)递减1运算符也分为前缀-(如-j)和后缀-(如j-),其运算与递增1类似。 例如: int i=2; i+; /使用变量i之后加1,i值增1后为3 +i; /在使用变量i之前加1,i值增1后为4 -i; /i值减1后为3 i-; / i值减1后为22.2运算符与表达式例2-5 算术运算举例。public class Arith public static void main(String args) int a=

18、10; int b=20; int c=a+b; /c=30 int d=b-a; /d=10 int e=a*b; /e=200 int f=b/a; /f=2 int g=b%a; /g=0 int h=a+; /h=10,a=11 int i=-b; /b=19,i=19 System.out.println(a=+a); System.out.println(b=+b); System.out.println(c=+c); System.out.println(d=+d); System.out.println(e=+e); System.out.println(f=+f); Syst

19、em.out.println(g=+g); System.out.println(h=+h); System.out.println(i=+i); 2.2运算符与表达式程序的运行结果:a=11b=19c=30d=10e=200f=2g=0h=10i=192.2运算符与表达式 例2-6某学生期末考试3门课成绩分别为English课95分、Java课90分、db课86分,编程实现求Java课和db课的分数之差及3门课的平均分。 2.2运算符与表达式public class CalScorepublic static void main(String args) int english = 99;

20、/ English分数int java = 95; / Java分数int db = 86; / DB分数int dif; / 课程差double avg; / 平均分/ 显示3门课程的成绩System.out.println(-);System.out.println(EnglishtJavatDB);System.out.println(english + tt + java + tt + db);System.out.println(-);/ 计算java 课和db课的成绩差dif = java - db;System.out.println(Java和DB的成绩差: + dif);/

21、计算平均分avg = (english + java + db) / 3;System.out.println(3门课的平均分是: + avg);2.2运算符与表达式程序运行结果:-English Java DB99 95 86-Java和DB的成绩差:93门课的平均分是: 93.02.2.2关系运算符与关系表达式 关系运算符用于比较两个操作数之间的关系,形成关系表达式。关系表达式将返回一个布尔值:true或false。它们多用于在控制结构的判断条件中。 参加关系运算的操作数可以是整数、浮点数、字符、字符串和布尔类型,运算结果是布尔类型。例如: 2=2.0 /结果是true J liLei;

22、/ 将比较结果保存在boolean变量中System.out.println(韩梅成绩比李雷高吗 ? + isBig); / 输出比较结果2.2.3逻辑运算符与逻辑表达式 逻辑运算符(&、|、!)用于两个逻辑型数据进行逻辑运算,结果为逻辑类型。 若两个操作数都是true,进行逻辑与运算(&)后输出true;否则输出false。 若两个操作数至少有一个为true,进行逻辑或运算(|)后输出true,只有两个操作数都为false时,结果为false。 逻辑非运算符(!)属于单目运算符,它只对一个操作数进行操作,生成与操作数相反的值:若操作数为true,则运算结果为false;若操作

23、数为false,则运算结果为true。 2.2.3逻辑运算符与逻辑表达式 在对逻辑与和或进行运算时,先计算运算符左侧表达式的值,如果使用该值能得到整个表达式的值,则跳过运算符右侧表达式的值,否则计算运算符右侧表达式,并得到整个表达式的值。 例如: true|a /结果是true false&a /结果是false2.2.3逻辑运算符与逻辑表达式例2-8 利用关系和逻辑运算判断一个字符是否为小写字母。public class IsChar public static void main(String args) char c=; /定义字符变量c boolean isChar=(c=a&

24、amp;c=z); /判断字符c是否在az之间 System.out.println(字符+c+是否为小写字母:+isChar); 程序运行结果: 字符是否为小写字母:false2.2.4位运算符与位运算表达式 位运算符用于二进制位进行操作,位运算只限于对整型或字符型数据进行运算。Java语言中的位运算符总体来说分为两类:按位运算和移位运算。相应地有两类位运算符:按位运算符和移位运算符。 2.2.4位运算符与位运算表达式1.按位运算符 Java中有4个按位运算符,分别是按位与(&)、按位或(|)、按位非()和按位异或(),用于对二进制数据进行按位操作。按位运算符对操作数中对应的位执行布

25、尔运算,并最终生成结果。 若两个操作数对应位都是1,则按位与运算后结果为1,否则为0。 若两个操作数对应位中至少有一个为1,则按位或运算后结果1,只有在两个对应位上都为0时,结果才为0。 按位异或是判断两个操作数的对应位上的值是否相异,若相异,则结果为1,否则为0。 按位非属于单目运算符,它生成的是与操作数上的位相反的值,操作数为0,则结果为1;操作数为1,则结果为0。 2.2.4位运算符与位运算表达式例如:2&3 /结果为2,等价于二进制数00000010&00000011,结果为000000103|4 /结果为7,等价于二进制数00000011|00000100,结果为00

26、0001115 /结果为-6,等价于二进制数00000101,结果为1111101067 /结果为1,等价于二进制数0000011000000111,结果为000000012.2.4位运算符与位运算表达式2.移位运算符 Java中有3个移位运算符,分别是左移位()、无符号右移位(),用于对二进制数据进行移位操作。 左移位运算符()将运算符左边的运算对象向右移动运算符右侧指定的位数。它使用了“符号扩展”,若值为正数,则在高位插入0;若值为负数,则在高位插入1。 无符号右移位运算符(),它使用了“零扩展”,无论正负,都在高位插入0。2.2.4位运算符与位运算表达式例如: 12 /结果为1,等价于二

27、进制数00000110右移2位后为00000001 -62 /结果为-2,等价于二进制数11111010右移2位后为11111110 62 /结果为1,等价于二进制数00000110无符号右移2位后为000000012.2.5赋值运算符与赋值表达式 赋值运算符“=”作用是给变量赋值。赋值运算符的优先级最低,它是从右到左的结合。 2.2.5赋值运算符与赋值表达式1.基本赋值 基本赋值的形式: 变量=表达式; 基本赋值的作用是将“=”右边的值赋给左边的变量,表达式可以是常量表达式或者变量表达式,后面加上分号即构成一个完整的赋值语句。 在Java语言中,赋值时要求类型必须匹配,如果左边的变量的类型精

28、度高于右边的表达式的类型精度,右边的表达式类型会自动转换为左边的变量的类型;如果左边的变量的类型精度低于右边的表达式的类型精度,出现精度丢失,编译时提示错误,需要进行强制类型转换。 例如: int i=5; /类型匹配,直接赋值 double d=5; /类型不匹配,系统自动将5转换为5.0进行赋值 int i=5.0; /类型不匹配,无法自动转换,编译时提示出错。2.2.5赋值运算符与赋值表达式2.复合赋值 在Java语言中,有时在赋值运算符“=”前加上其他运算符,得到复合赋值运算符 2.2.5赋值运算符与赋值表达式例2-9 复合赋值运算符的例子。public class TestAssig

29、n public static void main(String args) int i=1,j=2; i+=j; /相当于i=i+j;i被赋值为3 System.out.println(i=+i); i*=j; /相当于i=i*j;i被赋值为6 System.out.println(i=+i); i/=(j-1); /相当于i=i/(j-1);i被赋值为6 System.out.println(i=+i); 程序运行结果: i=3 i=6 i=62.2.6 基他运算符 Java语言中除了以上几类运算符外,还有一些其他功能的运算符,如:条件运算符(?:)、点运算符(.)、实例运算符(insta

30、nceof)、new运算符、数组下标运算符()等。2.2.6 基他运算符1. 条件运算符(?:) 条件运算符是Java语言中唯一的一个三目运算符。格式如下: 条件表达式?表达式1:表达式2; 运算方式是:首先判断条件表达式,当条件表达式为true时,取表达式1的值,否则,取表达式2的值。 例如: int score=95; String grade; grade=(score=90)?优秀:合格;2.2.7 运算符的优先级 在一个表达式中往往存在多个运算符,在对它进行计算时,需要按运算符的优先顺序依次从高到低进行,优先级较高的运算符首先执行,然后是优先级较低的运算符,同级运算符则按其结合方向进

31、行。括号可以改变运算顺序 2.3 数据的输入与输出2.3.1数据的输出显示 在学习Java的图形用户界面之前,Java程序的运行结果主要显示在DOS窗口或显示在系统的控制台面板。Java中的输出方法主要有三种:print()、println()、printf()。2.3 数据的输入与输出1.print()和println()输出语句格式为:System.out.print(“要输出显示的内容”);或者System.out.println(“要输出显示的内容”); 这两条输出语句的区别是:print方法输出完内容不换行,而println方法输出完显示内容后换行。2.3 数据的输入与输出例如: S

32、ystem.out.println(本次考试平均分:+(a+b+c)/3); 可以在输出的内容中加入转义符,如“n”、“t”等,以控制输出内容的格式。如: System.out.println(本次考试平均分:t+(a+b+c)/3);2.3 数据的输入与输出2.printf() printf()函数调用的一般形式为: System.out.printf(“格式控制字符串”,输出列表); 其中,“格式控制字符串”用于指定输出格式。格式控制字符串可由格式字符串和非格式字符串组成。格式字符串以%开头,在%后跟有各种格式字符,以说明输出数据的类型、形式、长度、小数位数等。例如: %d表示按十进制整型

33、输出。 %c表示按字符型输出。 %f表示按浮点型输出。2.3 数据的输入与输出例2-10 使用printf函数格式输出数据。public class PrintNum public static void main(String args) int a=2,b=3;System.out.printf(%d %dn,a,b);System.out.printf(%d,%dn,a,b);System.out.printf(a=%d,b=%dn,a,b); System.out.printf(a=%3d,b=%3dn, a,b); 程序运行结果:2 32,3a=2,b=3a= 2,b= 32.3.2

34、键盘输入数据Java语言可以通过键盘输入数据,对不同类型的变量进行赋值。Java语言有几种不同的方法可以从键盘输入数据。如:命令行参数、Scanner、BufferedReader、对话框输入等方式。本节只介绍后三种输入数据的方法。2.3.2键盘输入数据1.使用Scanner输入数据 Scanner是SDK1.5新增的一个类,该类在java.util包中,可以使用该类创建一个对象: Scanner sc=new Scanner(System.in); 然后借助sc对象可实现读入各种类型数据。读入方法为: nextInt():读入一个整型数据。 nextLong():读入一个长整型数据。 nex

35、tFloat():读入一个单精度浮点数。 nextDouble():读入一个双精度浮点数。 nextLine():读入一个字符串。2.3.2键盘输入数据 例2-11改写例题2-6,从键盘输入本次考试三门课的考试成绩,然后求成绩差和平均分。2.3.2键盘输入数据import java.util.*;public class CalScorepublic static void main(String args) int english ; / English分数int java ; / Java分数int db ; / DB分数int dif; / 课程差double avg; / 平均分Sca

36、nner sc=new Scanner(System.in);/使用Scanner类创建对象scSystem.out.println(请输入3门课的考试成绩:);System.out.println(EnglishtJavatDB);english=sc.nextInt(); /对象in调用方法nextInt(),从键盘输入一个整数java=sc.nextInt();db=sc.nextInt();/ 显示3门课程的成绩System.out.println(-);System.out.println(EnglishtJavatDB);System.out.println(english + t

37、t + java + tt + db);System.out.println(-);/ 计算java 课和db课的成绩差dif = java - db;System.out.println(Java和DB的成绩差: + dif);/ 计算平均分avg = (english + java + db) / 3;System.out.println(3门课的平均分是: + avg);2.3.2键盘输入数据程序运行结果:请输入3门课的考试成绩:English Java DB90 95 86-English Java DB90 95 86-Java和DB的成绩差:93门课的平均分是: 90.02.3.2

38、键盘输入数据2.使用BufferedReader输入数据 也可以使用BufferedReader类输入数据,这个类从字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取。 它使用read()或readLine()方法读入字符或字符串,所以当输入数据要求为数值时需要进行处理,即将字符串转换成整型、浮点型等类型。这时可以用Integer.parseInt()这个函数,将一个字符串解析成一个整数; 类似地有Float.parseFloat()将一个字符串解析成一个单精度浮点数;Double.parseDouble()将一个字符串解析成一个双精度浮点数。 BufferedReader类位于java.io包中,所以要使用这个类,就要引入java.io这个包。使用BufferedReader类的readLine()方法必须处理java.io.IOException异常(Exception)。使用BufferedReader来输入数据,理解起来要复杂得多。但是使用这个方法的步骤是固定的,每次使用前先如法炮制就可以了。 2.3.2键盘输入数据例2-12 输入

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论