第二讲 Java中的数据和运算
| 主要内容 Java输入输出的初步运用 Java的标识符和保留字 Java的基本数据类型 Java基本数据类型转换 Java中的运算符 | 
问题:读取一个整数,输出该数的平方
算法
步骤一:读取一个整数字符串
步骤二:将字符串转换成整数Integer.parseInt(s)
步骤三:运算处理
步骤四:输出结果
程序清单[Square.java]
import javax.swing.*;
public class Square{
public static void main(String args[]){
String s=JOptionPane.showInputDialog("请输入一个整数:");
int n=Integer.parseInt(s);
int m=n*n;
System.out.println("你输入的数是:"+s);
System.out.println("其平方值是:"+m);
}
}
程序解析
² JOptionPane是javax.swing包中的类
² showInputDialog是JOptionPane的方法:显示一个输入对话框
² System.out.println(…):显示输出。
[注意]可以“+”号连接不同类型数据。
| 思考 1. 如何交互输入数据? 2. 用JoptionPane的showInputMessage方法输入的是什么类型的数据? 3. 一个数字组成的字符串如何转化成整数? 4. Java程序如何向字符窗口输出数据? | 
练习:输入一个圆半径,输出其面积。
标识符的定义规则
在Java程序中,包、类、属性、方法、对象、变量、符号常量、数组等等都要有名称。这名称即为“标识符”。
标识符的定义规则:
² 由字母、数字、_和$组成
² 开头字符必须是字母、下划线或$(不可以数字开头)
[注意]大小写敏感。myname与Myname是两个不同的标识符。
定义三原则:见名知义、规范大小写、不可用Java保留字
练习:从以下字符串中挑出合法的Java标识符。
| 2tow | Mary5 | else | Hello world | 
| bob | do | cheese_eat | Hello! | 
保留字(关键字)
保留字(reserved word):是 Java 语言规定了特定含义的标识符。
对于保留字,用户只能按照系统规定的方式使用,不能自行定义。
保留字一律用小写字母表示。
| abstract | for | private | 
| break | finally | return | 
| byte | final | static | 
| boolean | if | switch | 
| catch | import | short | 
| case | implements | synchronized | 
| class | instanceof | super | 
| char | interface | try | 
| continue | int | true | 
| do | length | this | 
| default | long | throw | 
| double | new | threadsafe | 
| else | null | throws | 
| extends | native | transient | 
| false | package | void | 
| final | public | while | 
| float | protected | …… | 
指定变量的数据类型可确定变量所需分配的内存尺寸。
char ch;
float x;
int a,b,c;
布尔型——boolean
布尔型常量:true和false (它们不对应于任何整数值!)
布尔型变量的定义如:boolean b=true;
字符类型——char
字符常量:用单引号括起来的一个字符,如‘a’,‘A’;
与C相同,Java也提供转义字符,如下图:
| 转义字符 | 描述 | 
| \ddd | 1到3位8进制数所表示的字符(ddd) | 
| \uxxxx | 1到4位16进制数所表示的字符(xxxx) 如\u0061表示’a’ | 
| \' \" | 单引号字符和双引号字符 | 
| \\ | 反斜杠 | 
| \r | 回车 | 
| \n | 换行 | 
| \t | 横向跳格 | 
| \f | 走纸换页 | 
| \b | 退格 | 
字符型变量的定义如:char c=‘a’;
说明:Java中的字符型数据是16位无符号型数据,它采纳Unicode集。
练习:编程测试16进制数41,51对应的字符,并相隔一个tab位输出。
整型
整型常量可用三种进制表示:
十进制整数:如:123,-456,0
八进制整数:0ddd (注意:ddd<=377)
如0123表示十进制数83,-011表示十进制数-9。
十六进制整数:以0x或0X开头
如0x123表示十进制数291,-0X12表示十进制数-18。
练习:分析程序运行结果。
public class DataTest{
public static void main(String[] args){
int x=010;
System.out.println("x="+x);
int y=0x10;
System.out.println("y="+y);
}
}
整型变量有byte、short、int、long
| 数据类型 | 字节数 | 所占位数 | 数的范围 | 
| byte | 1 | 8 | -27~27-1 | 
| short | 2 | 16 | -215~215-1 | 
| int | 4 | 32 | -231~231-1 | 
| long | 8 | 64 | -263~263-1 | 
注意:在进行处理时应注意变量的范围
byte x=129; 出错!
byte x=(byte)129; 结果x的取值是-127
原因:整数在内存中以补码保存。129—10000001-- -127
| 思考 1. 在Java中一个字符数据开销字节数? 2. 在Java中怎样给出一个八进制整常数? 3. 在Java中怎样给出一个十六进制整常数? 4. 在Java中如何输出数据? 5. Java表达整型的数据类型与C相比异同点? | 
浮点型(实型)
实型常量有两种表示形式
² 十进制数形式:由数字和小数点组成,如0.123, .123, 123.,123.0
² 科学计数法形式:如:123e3或123E3
其中e或E之前必须有数字,且e或E后面的指数必须为整数。
说明:单精度常量以f或F为后缀。双精度常量以d或D作后缀(默认)。
实型变量
| 数据类型 | 所占位数 | 数的范围 | 
| float | 32 | 3.4e-038~3.4e+038 | 
| double | 64 | 1.7e-308~1.7e+308 | 
字符串型
字符串常量是用双引号作为起止符的字符序列。如:”Hello”
字符串变量定义如:String s1,s2; String s1=”Hello”;
练习:试分析下面程序中的各变量
public class Assign {
public static void main(String[] args){
int x , y ;
float z = 1.234f ;
double w = 1.234 ;
boolean flag = true ;
char c ;
String str ;
| 请加入语句: 在第一行输出x、y、z、w的值 在第二行输出c、flag、str的值 
 | 
c = 'A';
str ="bye";
x = 12 ;
y = 300;
}
}
| 思考 1. 如何给出一个单精度常数? 2. 字符常量和字符串的定界符分别是什么? 3. 在Java中一个int型数据开销字节数? 4. 在Java中用什么类型的变量存储一个逻辑值? | 
Java基本数据类型转换
自动类型转换
整型、实型、字符型数据可以混合运算。步骤:先转化为同一类型,再运算。
转换总是从低级到高级,按下图所示:
低--------------------------------------------->高
byte,short,charà int à long à float à double
| 思考 1、x+y的值是什么类型? 2、x+y+z的值是什么类型? 3、a+b的值是什么类型? 4、a-x-y的值是什么类型? 5、x+c是值是什么类型? | 
int x;
byte y;
long z;
float a;
double b;
char c;
强制类型转换
高级数据要转换成低级数据,需用到强制类型转换,如:
y=(byte)x;
x=(int)(a+b);
a=(float)b;
阅读程序,分析运行情况
public class CharandInt1{
public static void main(String[] aa){
char y='a';
System.out.println(y);
}
}
public class CharandInt2{
public static void main(String[] aa){
int x=2;
char y='a';
System.out.println(y+x);
}
}
[思考] 如何修改程序使之输出结果为”c”?
class Test1{
public static void main(String[] aa){
char a='\u0041';
int b=a;
float c=b;
double d=c;
System.out.println(a+"\t"+b+"\t"+c+"\t"+d);
}
}
class Test2{
public static void main(String[] aa){
double e=65.5;
float f=e;
int g=f;
char h=g;
System.out.println(e+"\t"+f+"\t"+g+"\t"+h);
}
}
算术运算符
双目运算符
| 运算符 | 示例 | 含义 | 
| + | op1 + op2 | 加法运算 | 
| - | op1 - op2 | 减法运算 | 
| * | op1 * op2 | 乘法运算 | 
| / | op1 / op2 | 除法运算 | 
| % | op1 % op2 | 模运算(取余) | 
说明:
1)JAVA对“+”运算进行了扩展,字符串连接、数字与字符串连接
如: String s;
s="s="+4*5;
2) JAVA中的"%"取模运算,可对浮点数进行。符号同第一个操作数。
如52.3%10à2.3
class TestMod{
public static void main(String[] aa){
System.out.println(10%3);
System.out.println(10%-3);
System.out.println(-10%3);
System.out.println(-10%-3);
}
}
自增自减运算符
| 运算符 | 示例 | 含义 | 
| 前缀 ++ | ++ x | 加 1 后再引用 | 
| 前缀 -- | -- x | 减 1 后再引用 | 
| 后缀 ++ | x ++ | 先引用,再加 1 | 
| 后缀 -- | x -- | 先引用,再减 1 | 
说明:
1) ++与--运算符只能用于变量。错例:5++,++(a+b)
2) ++与--运算时结合方向自右向左。-i++相当于-(i++)
3) 两个+号(或-号)之间不能有空格
4) 应避免使用复杂的表达式
算术表达式:用算术运算符与括号将运算对象连接起来的、符合Java规则的式子。
运算级别:先*、/、%后+、-,“左结合”原则。如:n * -2, -n / -2
赋值运算符
基本赋值运算
形式: <变量> =<表达式>
作用:将右边表达式的值计算赋给左边的变量。
赋值语句:赋值表达式加上分号即可。
public class S3 {
public static void main(String[] args){
int a;
int b;
int c=(a=5)+(b=13);
System.out.println(a+" "+b+" "+c);
}
}
复合赋值运算
形式: <变量><简单运算符>=<表达式>
à<变量>=<变量><简单运算符>(<表达式>)
分别举例:
| 运算符 | 示例 | 含义 | 
| += | count += 2 | count = count + 2 | 
| -= | count -= 2 | count = count - 2 | 
| *= | count *= 2 | count = count * 2 | 
| /= | count /= 2 | count = count / 2 | 
类型转换
赋值时如果赋值号两边类型不同,则有如下两种可能:
² 自动转换。条件:等号右式类型比左边变量类型简单。
² 出错。 出错信息: possible loss of precision
关系运算符
| 运算符 | 示例 | 含义 | 
| == | op1 == op2 | 等于 | 
| != | op1 != op2 | 不等于 | 
| < | op1 < op2 | 小于 | 
| > | op1 > op2 | 大于 | 
| <= | op1 <= op2 | 小于等于 | 
| >= | op1 >= op2 | 大于等于 | 
注意:
[1] "= ="不要写成"="
关系表达式
op1 <关系运算符> op2
说明:
1) Java中,任何类型的数据(包括简单类型和复合类型),都可以通过"=="或"!="来比较是否相等。
2) 浮点数的比较小心慎用
3) 不同类型的数值量以及字符之间可以进行各种大小比较
class T1{
public static void main(String[] aa){
char x='4';
int y=4;
if (x==y)System.out.println(y);
else System.out.println((char)y);
}
}
4) 关系运算的结果是true和false(而不是1或0、T或F!)
5) 关系运算符优先级低于算术运算符,高于赋值运算符
逻辑运算符
| 运算符 | 示例 | 含义 | 
| && | op1 && op2 | 逻辑与 | 
| || | op1 || op2 | 逻辑或 | 
| ! | ! op | 逻辑非 | 
1) 逻辑运算的截断性。
class Test {
public static void main(String[] args){
int f=0;
if (f!=0 && 3/f>5)System.out.println("111");
else System.out.println("000");
}
}
思考:表达式 f!=0 && 3/f>5是否会发生除0溢出错误?
2) 优先级如下图示(从高到低)
| ! 算术运算 关系运算 && || = | 
条件运算符(? : )
e1? e2:e3
意义:若e1为真,则取值e2;为假取值e3。
例:
int a=1;
int b=4;
int max=a>b?a:b;
说明:
1) e1的类型必须为boolean型
2) e2与e3有相同的数据类型
练习:输入三个整数,输出其中的最大数(MaxValue.java)。
Java运算符的优先级
运算符的优先级
| 
 | () | 高 | 
| 
 | ++ -- ! 单目+ 单目- | |
| 
 | * / % | |
| 
 | + - | |
| 
 | < > <= >= | |
| 
 | = = != | |
| 
 | && | |
| 
 | || | |
| 
 | ? : | |
| 
 | = += -= *= /= %= | 低 | 
变量的作用域
即变量何时可访问,何时不能。有如下几个要点:
² 方法中声明的变量只在方法内访问
² 花括号内的变量在花括号里,及其内含的花括号里可访问
| class T1{ public static void main(String[] aa){ { int x=1; System.out.println(x); x++; } System.out.println(x); } } | 
练习:输入一个半径(实数),输出圆面积。
import javax.swing.*;
public class CircleArea{
public static void main(String[] args){
String s=JOptionPane.showInputDialog("请输入半径:");
float r=Float.parseFloat(s);
System.out.println(a);
}
}
实验一
1. 调试一个例程,理解Java程序的编辑、编译和执行方法。试观察源程序文件、字节码文件的扩展名。
2. 读取一个实型数,输出该数的平方。
3. 输入一个姓名,输出“Welcome, <姓名>”
4. 分析和调试程序,初步理解日期信息的获取:
import java.util.*;
public class Day {
public static void main(String[] args){
Calendar c= Calendar.getInstance();
System.out.print("今天的日期是:");
int y=c.get(c.YEAR);
int m=c.get(c.MONTH)+1;
int d=c.get(c.DATE);
System.out.println(y+"-"+m+"-"+d);
}
}
5. 仿照上题,输出当前时间。(HOUR,MINUTE,SECOND)。
 
                     
                    
                 
                    
                
 
         
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号