标识符 Java基本数据类型 常量、变量和赋值 类型转换 运算符与表达式 第2讲 基本数据类型与表达式 标识符 Java基本数据类型 常量、变量和赋值 类型转换 运算符与表达式
目标 在程序中定义合适的标识符 理解3种基本数据类型并能正确地使用 根据需要定义变量 正确地构造表达式
引例 已知三角形的三条边,计算它的周长与面积。 分析:逐步求精,分解,逐步逼近。 根据第1章讨论的知识,我们知道Java程序是由类组成的。因此可以将问题转化为“设计一个计算三角形周长与面积的类”。 先假设类已经定义好了,直接考虑如何根据需要处理数据。
{ public static void main (String[] args) { int a,b,c,p; float area; //文件名Ex2_1.java import java.io.*; public class Ex2_1 { public static void main (String[] args) { int a,b,c,p; float area; a=8; b=5; c=10; p=a+b+c; area=(float)Math.sqrt((p-a)*(p-b)*(p-c)*p/2); System.out.println("The length of three side is"+a+","+b+","+c); System.out.println("The sides of triangle is:"+p); System.out.println("The area of triangle is:"+area); } 引入类 定义主类 定义main()方法 声明变量 给变量a、b、c赋值 计算周长和面积 输出结果
标识符 标识符可以由字母、数字、下划线(_)及美元符号($)按一定的顺序组合而成,但不能以数字开头。 average、table12、$price等均为有效的标识符 5_step则为非法标识符。 Java语言对标识符还有如下规定: 标识符的长度不限,但不宜过长。 一般遵循“见名知义”原则,即为标识符取一个能代表其意义的名称。 标识符区分字母的大小写。如Student和student是两个不同的标识符。 标识符不能是关键字。
关键字 关键字是指被系统所保留使用并赋予特定意义的一些标识符,这些关键字不能被编程人员用作标识符。它们只能按照预先定义好的方式使用,不能作为其他用途。 true、false、null cast、future、generic、inner、operator、outer、rest、var
Java基本数据类型 Java中的数据类型分为基本数据类型和复杂数据类型两类。 基本数据类型包括数值型、字符型及布尔型。 复杂数据类型包括类、接口和数组等,也称为引用类型,即通过对象的创建,获得引用类型的值。
数值型(一) Java的数值型数据又分为整数和浮点数两种类型,整数不带小数点,浮点数含有小数点。 整数有byte(字节型)、short(短整型)、int(整型)及long(长整型)等4种。在数值后加l或L表示该数值是long类型 浮点型数据有float(单精度浮点型)和double(双精度浮点型)两种。在数值后面加一个F或者f表示float类型的数据 Java默认所有的浮点值属于double类型的数据。 例如: int i=3; long j=26L; double k=0.5 float m=5.0f;
数值型(二) 存储数据要占用一定的存储空间,不同类型的数据所占用的存储空间不同。所有数值类型依据其占用的内存空间大小进行区分。在设计程序的过程中,程序员需要选择大小合适的变量类型,否则有可能造成内存空间的浪费。
字符型 Java中的字符型数据用char表示,它的值用16个bit来存储,取值范围是0~65536。它表示的是Unicode码表所定义的国际化字符集中所收集的所有字符。 Java中的字符可以比较大小,类似于ASCII码的大小比较。 例如,char grade1='A', grade2='B'; Java用单引号来表示字符型数据。如'A'、'c'、'#'、'&'与'9'等等。
布尔型 布尔型(boolean)是一种表示逻辑值的简单数据类型。它的取值只能是常量true或false这两个值中的一个,在存储器中占8个bit。通常用于程序中的一些逻辑判断从而对程序的运行进行控制。 例如,根据成绩的及格线60分,判断考试是否通过。 int grade; boolearn passing; if (grade>=60) passing=true; else passing=false;
常量 常量(constant),顾名思义就是在程序运行过程中其值不会被改变的量,常量也叫常数,也被称为“字面量”。在Java语言中,常量按其数据类型可分为整型常量、浮点型常量、字符型常量、字符串常量与布尔型常量等5种类型。 整型常量和浮点型常量都属于数值型。 字符型常量是指Unicode字符集中的所有单个字符,包括可以打印的字符和不可打印的控制字符。
字符常量 字符型常量的表示形式有四种: (1)以单引号括起来的单个字符,如‘a’。 (2)以单引号括起来的“\”加三位八进制数,形为'\ddd',其中d可以是0~7中的任一个数,如'\141'表示字符'a'。其中ddd的取值范围只能在八进制数的000~777之间,因而它不能表示出Unicode字符集中的全部字符。 (3)以单引号括起来的“\u”加四位十六进制数,可以表示出Unicode字符集中的所有字符。 (4) 对于那些不能被直接包括的字符以及一些控制字符,如‘\\’、‘\’’。
字符串常量 final 数据类型 常量名称=常量值; 字符串常量就是用双引号括起来的由零到多个字符组成的字符序列。如“Hello World!”,“I am a programmer.\n”等。字符常量的八进制、十六进制表示法和转义序列在字符串中同样可用。 布尔型常量只有两个值,true和false。 常量定义格式: final 数据类型 常量名称=常量值;
常量举例 例2.2 一套房子每天的租金是45.6元,如果租30天,试编程计算应付房租。 public class Ex2_2 { public static void main(String args[]) final int Day=30; final double Pay=45.6; final String Str="It is begin!"; double total; total=Day*Pay; System.out.println(Str); System.out.println("*_________________________*"); System.out.println("Day="+Day+"\tPay="+Pay); System.out.println("total="+total); } 定义了三个常量
变量 变量(variables)是Java程序中的一个基本存储单元,是在程序运行过程中其值可以改变的量。 一个变量蕴含有三个含义: (1)变量的名称。变量的名称简称变量名,变量名是用户自己定义的标识符,它表明了变量的存在性和唯一性; (2)变量的属性。即变量的数据类型; (3)变量的值。是指存放在变量名所标记的存储单元中的数据。 例如,int math=78,english=80;
//字符型变量和布尔型变量的定义及赋值 public class Ex2_4 { public static void main(String args[]) { char c1='a'; char c2='\141'; char c3='\u0061'; char c4='\\'; boolean f1=true,f2; f2=4<3; System.out.println(“字符型变量的值:c1=” +c1+ “c2=” +c2+ “c3=” +c3); System.out.println(“字符型变量的值:c4=”+c4); System.out.println(“布尔型变量的值:f1=” +f1+“f2=”+f2); } 程序中定义了四个字符型变量,用关键字char 定义字符型变量,其中c1、c2、c3的定义分别使用字符型的三种表示方法,c1以单引号括起来,c2以十六进制表示,c3以Unicode编码表示,运行结果均是字符'a'。c4用转义字符输出'\'。布尔型变量f1定义时赋值为true,f2赋值为4<3,这是一个比较表达式,结果为false。
赋值语句 赋值语句的一般形式为: 例子: 变量名=表达式; float value, price; value=0.0f; //value初值为0 price=0.5f; value=12*price; 变量名=表达式; 赋值语句执行的过程中,先计算出表达式的值,然后把该值存储到赋值运算符(=)左边的变量所代表的存储单元,并覆盖其原有的值。
类型转换——自动转换 自动转换是在程序运行过程中不需人为干预而自动进行的从一种数据类型到另一种数据类型的转换。有两种类型: 赋值转换 两种数据类型必须是兼容的,并且目标数据类型的取值范围比源数据类型的取值范围大。 表达式中的自动转换 short a,b; a=50; b=a/2; int a; float b; double c; c=a+b+c; 低-------------------------------------------->高 byte,short,char->int->long->float->double
类型转换——强制类型转换 对于不能自动进行的类型转换,就要强制类型转换。 强制类型转换的一般格式为: (目标数据类型)被转换数据 其中,目标数据类型是指要将被转换数据转换成的数据类型;被转换数据可以是变量、表达式等。 如要把double型变量money的值转换成int型,形式为:(int)money。 (目标数据类型)被转换数据
//从键盘读入一个字符,并输出这个字符。 import java.io.*; public class Ex2_6 { public static void main(String args[]) { char ch=‘ ’; System.out.println("Input a interger or character:"); try ch=(char)System.in.read(); //从键盘中读入一个字符 } catch (IOException e){ } System.out.println("The input is \’"+ch+"\’"); 程序定义了一个字符型变量ch,接收输入的字符。System.in.read()表示从键盘输入流中读入一个字节并返回它的值,返回值是0到255的int 值,需要进行异常处理。由于返回值为int型,因此要输出这个字符,须强制转换为char型。程序中用了try-catch语句进行异常处理。
运算符与表达式 一个常量或一个变量是最简单的表达式。 一般的表达式是指由数据和运算符连接在一起的符合Java语法规则的式子。如a=1、a+b-c*d、a<b等。这里的数据是常量或变量,表达式中数据的连接符+、-、*、=及<就是运算符。 Java的运算符主要包括算术运算符、关系运算符、逻辑运算符等,Java表达式主要有算术表达式、关系表达式、逻辑表达式、赋值表达式等。
算术运算符和算术表达式 单目运算符是指只对一个操作数运算的运算符。包括: ++(自增),a++、a-- :表示先使用a,再使a增(减)1; -(取反),a=1,b=-a(即b=-1) 双目运算符是指算术运算符的左、右两边均要有操作数。包括:+(和运算)、-(差运算)、*(积运算)、/(除运算)及%(求余运算)。 算术运算符连接的操作数为数值型。由算术运算符连接的式子称为算术表达式。
算术运算示例 public class Ex2_7 { public static void main(String args[]) { char a=97; int b,c=14, f=3; float d=0.6f, e, g; a++; b=c/f; c=c%f; d++; e=f*d; g=e%f; 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("g="+g); } }
关系运算符和关系表达式 关系运算符:用来比较两个值之间的大小关系。关系运算的结果是布尔(boolean)型,为真(true)或假(false)。 Java中关系运算符有6种: ==、!=、>、<、>=、<= 例如, int a=5, b=8; boolean c=a>b; 则结果c=false。
逻辑运算符和逻辑表达式 Java中共有6个逻辑运算符:!、&、^、|、&&、|| 。 如果它们的操作数是布尔类型的数据,其结果也是布尔类型。 &&和||也被称为“短路逻辑运算符”,在运算过程中会产生“短路效应”: a&&b,当a为false时不再判断b,直接判断a&&b的值为false; a||b,当a为true时不再判断b,直接判定a||b的值为true。 另外,当&、^和|的操作数为整数及字符时,它们会作为位运算符进行位运算。
关系表达式和逻辑表达式举例 public class Ex2_8 { public static void main(String args[]) { int a=3,b=8; boolean c,d,e=false,f1,f2,g=true; c=a>b; d=c&&(e=a<b); //c为false,e值未被改变 f1=g||(e=a<b); //g为true,e值未被改变 f2=f1|(g=a>b); //g值被改变 System.out.println("a="+a); System.out.println("b="+b); System.out.println("a>b="+c); System.out.println("c&&(e=a<b)="+d); System.out.println("e="+e); System.out.println("f="+f); System.out.println("g="+g); }
三元运算符 Java中,有一种特别的三元运算符构成的条件表达式。使用格式如下: 其中的?和:称为三元运算符,它们必须一同出现,此运算符需要三个操作数。其中语句1和语句2可以是复合语句。意思是,当条件表达式值为true时,执行语句1,否则执行语句2。 例如,(a>b)?a: (c>d)?c: d 其中a=5,b=8,c=1,d=9。根据右结合性,应先计算(c>d)?c:d。因为1>9为false,故取d=9为该表达式的结果。再计算(a>b)?a:d,结果为9。 条件表达式 ? 语句1 : 语句2
位运算符 Java中可以使用位运算直接对整数类型和字符类型的数据的位进行操作。 包括:~、<<、>>、>>>、&、^、|。 计算机中的数是以补码表示的。正数的补码就是其原码,负数的补码是其对应的正数按位取反(1变为0,0变为1)后再加1。
赋值运算符和赋值表达式 赋值运算符:= 。例如,a=b就是把变量b的值赋给变量a,则b与a的值相同,a原来的值丢弃。 扩展的赋值运算符 使程序表达简练,提高程序的编译速度。 就是把赋值运算符与算术运算符、逻辑运算符或位运算符中的双目运算符结合起来而形成的赋值运算符。 扩展赋值运算符:+=、-=、*=、/=、%=、&=、^=、|=、<<=、>>=、>>>=
运算符优先级 在一个表达式中可能有多个数据与运算符,那么,计算这个表达式时应该先计算哪些后计算哪些呢?这就要为运算符规定它们的优先级。 Java运算符的运算级别共分为15级,其中1级优先级最高,15级最低。 3*18+4/2(运算结果为56 ) 3*(18+4)/2(运算结果为33 ) 因为括号级别最高,先计算括号里的数据,再按照算术运算的规则,相同级别的先左后右,先乘以3再除以2。
作业和实验 作业 实验 P41-5,6,7(2)(3) P42-8,9,10 名称:Java的基本数据类型和表达式 目的 熟悉JCreator环境的使用。 能正确定义、使用变量和表达式。