1 实验目的
(1)熟悉基本数据类型及其占用空间大小,熟悉标识符的定义特点;
(2)熟悉常见转义字符的含义;
(3)掌握不同类型数据的赋值转换原则,熟悉自动转换与强制转换的含义;
(4)掌握常用运算符的使用。
2 知识要点
2.1 基本数据类型、变量
(1)标识符的命名原则:以字母,下划线(_),美元符($)开始的一个字符序列,后面可以跟字母,下划线,美元符,数字。
(2)基本数据类型(见表2-1)
表2-1 基本数据类型
| 类型标识 | 含义 | 所占字节 | 默认值 |
| byte | 字节型 | 1 | 0 |
| short | 短整型 | 2 | 0 |
| int | 整型 | 4 | 0 |
| long | 长整型 | 8 | 0 |
| float | 单精度浮点型 | 4 | 0.0F |
| double | 双精度浮点型 | 8 | 0.0D |
| char | 字符型 | 2 | 0 |
| boolean | 布尔型 | 1 | false |
● 十六进指表示形式:以0x开头,如:0xa1;
● 整数默认int型,长整数可在后面加L;
● 实数默认双精度型,要明确表示为float型在数据后加F。
● 布尔型数据只有true和false两个值;
● 字符型数据是用单引号括起来。
2.2 特殊字符—转义符
Java字符采用Unicode编码。“\ ” (反斜杠)在字符表示或字符串中有特殊作用,它和之后的字符合并解释,用于表示一些特殊字符。见表2-2。
表2-2 常见转义符
| 转义字符 | 描述 |
| \’ | 单引号字符 |
| \" | 双引号字符 |
| \\\ | 反斜杠 |
| \r | 回车 |
| \n | 换行 |
| \f | 走纸换页 |
| \t | 横向跳格 |
| \b | 退格 |
(1) 自动转换次序
byte-->short→char→int→long→float→double
按照箭头所示方向,处于左边的数据类型的数据可以自动转换赋值给右边的数据类型的变量,但反之,将处于右边的数据类型的数据赋值给处于左边的数据类型的变量必须经过强制转换。
(2) 布尔类型不能与其他类型进行转换;
(3) 赋值时强制转换可能导致数据丢失精度。
2.4 输出语句的使用
(1)print()方法与println()的差异是前者输出后不换行,而后者换行。
(2)输出时可以通过“+”号将任何数据与字符串拼接。如果拼接的是基本类型变量,则在其位置输出变量值,如果是对象,则在其位置输出对象的toString()方法的返回结果。
2.5 容易用错的运算符
(1)++或--的位置相关性。
不妨假设原来a值为4,则使用++或--运算符后的结果如表2-3所示。
表2-3 ++和—运算符的位置相关性
| 使用形式 | 原来a值 | 运算后a值 | 表达式的值 |
| a++ | 4 | 5 | 4 |
| ++a | 4 | 5 | 5 |
| a-- | 4 | 3 | 4 |
| --a | 4 | 3 | 3 |
赋值语句形式:变量名=表达式;
功能:计算表达式的结果,并将结果给变量赋值,变量的结果也为赋值表达式的结果。
“==”是关系运算符,是比较运算符两边的数据是否相等。表达式的结果为true或false。
(3)求余(%)与除号(/)的使用
注意两个整数进行除法运算是整除,结果将不包含小数部分,而一个是整数、另一个为实数,则转化为实数后再计算,结果为实数。具体样例见表2-4。
表2-4 求余与除号运算符
| 运算 | 结果 | 说明 |
| 7 / 5 | 1 | 整除的商 |
| 7 %5 | 2 | 求整除后的余数 |
| 7.0 / 5.0 | 1.4 | 实数除 |
| 7.0 / 5 | 1.4 | 转化为实数运算 |
| 7 / 5.0 | 1.4 | 转化为实数运算 |
| 7.0 % 5.0 | 2.0 | 求余数 |
逻辑运算符有可能不必计算运算符两边的表达式即可确定结果,其副作用见表2-5。
表2-5 逻辑运算符的附加特点
| 表达式 | 何时结果为true | 附加特点 |
| op1 && op2 | op1 和 op2都是true | op1为false时,不计算op2 |
| op1 || op2 | op1 或 op2是true | op1为true时,不计算op2 |
移位运算符左移1位将数值增大1,右移则缩小1倍;按位逻辑运算相当于每位的1对应true,0对应false的逻辑运算,将各位的运算结果拼接后的数据即为结果。各类位运算符的具体功能见表2-6。
表2-6 各类位运算符的功能
| 运算符 | 用法 | 操作 |
| ~ | ~op | 结果是op按比特位求反 |
| >> | Op1 >> op2 | 将op1右移op2个位(带符号) |
| << | Op1 << op2 | 将op1左移op2个位(带符号) |
| >>> | op1 >>> op2 | 将op1右移op2个位(不带符号的右移) |
| & | Op1 & op2 | op1 和 op2都是1时,相应的位才是1 |
| | | Op1 | op2 | op1 或 op2是1时,相应的位为1 |
| ^ | Op1 ^ op2 | op1和op2是不同值时,相应的位为1 |
在一个表达式中运算的优先次序由相邻运算符的优先级决定,同一级运算符的运算次序根据运算符的结合性决定运算次序。如果是左结合则按自左向右的次序进行。
3 样例分析
样例1: 调试分析以下程序的运行结果:
public class test {
public static void main(String a[]) {
int m=0;
System.out.println("m++="+m++);
System.out.println("++m="+(++m));
boolean x;
x=(5>3)&&(4==6);
System.out.println("x="+x);
m=m%2;
System.out.println("result="+m+1);
int y=m*m+2*m-1;
System.out.println("m="+m+",y="+y);
}
}
【输出结果】
m++=0
++m=2
x=false
result=01
m=0,y=-1
【说明】(1) 注意m++和++m的求值差异;(2)注意输出语句中与字符串的拼接运算次序。字符串“result”先与m的值拼接,然后再与1拼接。
样例2:已知梯形的上底为3,下底为5,高为2.4,求其面积。
【参考程序1】
public class Area {
public static void main(String a[]){
double x=3; // 上底
double y=5; // 下底
double z=2.4; // 高
double s=(x+y)*z/2; //计算面积
System.out.println("面积="+s);
}
}
【参考程序2】
public class Area {
public static void main(String a[]){
double s=(3+5)*2.4/2; //计算面积
System.out.println("面积="+s);
}
}
【说明】计算机编程解法可以是多样的,只要能实现目标即可。但要注意程序的可读性,对引入的变量通常要加以注释。
4 上机练习
✧ 基本题
1) 编程观察如下输出语句:
System.out.println("hello test escape char");
在“escape”处换上各种转义字符测试输出效果。如何实现如下输出:
Hello "test"
Hello ‘\test’
2) 设有如下代码段,考虑赋值转换问题:
int a=234;
byte b=a;
System.out.println("a="+a+",b="+b);
将a,b的类型以及数据进行各种替换,观察什么时候能赋值,什么时候需要使用强制转换,什么时候不能强制转换,什么时候强制转换会丢失数据。
3) 编写一个程序求半径R为10的圆的面积。公式为:S=πR2
注:π可用Math类的常量PI表示(即Math.PI)。
✧ 提高题
1) 设有一个边长为30的等边三角形,三角形内有一个内切圆,计算除内切圆外三角形内其它部分的面积。
【提示】先算三角形面积,再计算圆的面积,其差即为结果。
2) 调试分析以下程序的运行结果:
public class test {
public static void main(String a[]) {
int m=10,n=517;
System.out.println(n % m);
System.out.println(n / m);
System.out.println(m >> 2);
System.out.println(m & n);
System.out.println(Integer.toBinaryString(m));
System.out.println(Integer.toBinaryString(m >> 2));
}
}
注意:Integer.toBinaryString(int)用于将一个整数转化为二进制形式的数字串。在进行位运算时,注意观察二进制的数据变化规律。
5 思考题
1) 现有一个int类型的整数和一个double类型的数进行加法运算,则得到的结果类型为:
A.int类型 B. double类型 C. float类型 D. long类型
2)下面程序段的输出结果是:
int a = 2;
System.out.print( a++);
System.out.print( a);
System.out.print(++a);
A.333 B.334 C.234 D.233
3) 以下代码的输出结果?
public class Test{
int x=3;
public static void main(String argv[]){
int x= 012;
System.out.println(x);
}
}
A.12 B.012 C.10 D.3
4) 下列定义语句正确的是:
A.char c="\\n"; B.int i=12; C.float f=2.8; D.boolean b=null;
5)检查如下代码:
public class Quiz2_l{
public static void main(String[] args) {
int a = 8;
int b = -8;
System.out.print(a<<2);
System.out.print("," + (b>>1) );
}
}
下列哪条语句正确描述了程序在编译和运行时的行为?
A.编译成功,输出为“32,-4 ”
B. 编译成功,输出为“16,4 ”
C. 编译成功,输出为“32,21474834”
D. 编译成功,输出为“16,21474834”
E. 编泽器拒绝表达式 b>>,因为不能对一个负数应用>>操作符
6)以下代码中变量result的可能类型有哪些?
byte b = 11;
short s = 13;
result = b * ++s;
A.byte, short, int, long, float, double
B.boolean, byte, short, char, int, long, float, double
C.byte, short, char, int, long, float, double
D.byte, short, char
E.int, long, float, double
7)以下代码的输出结果为:
System.out.println(" " +2 + 3);
System.out.println(2 + 3);
System.out.println(2 + 3 +"");
System.out.println(2 + "" +3);
A.第3行出现编译错误
B.输出23, 5, 5 和23.
C.输出5, 5, 5 和23.
D.输出 23, 5, 23 和23.
8)设有如下变量说明:
byte myByte;
int myInt;
long myLong;
char myChar;
float myFloat;
double myDouble;
以下赋值语句哪个需要强制转换。
A.myInt = myByte;
B.myInt = myLong;
C.myByte = 3;
D.myInt = myChar;
E.myFloat = myDouble;
F.myFloat = 3;
G.myDouble = 3.0;
9)考虑如下两语句:
1. boolean passingScore = false && grade == 70;
2. boolean passingScore = false & grade == 70;
表达式grade == 70 在什么地方被计算
A.在 1 和 2中均计算
B.在 1 和 2中均未计算
C.在1中计算,在2中未计算
D.在2中计算,在1中未计算
E.非法,因为 false 应写 FALSE
10)设有一个整数x 其二进制值为10011100 (用1 字节表示),则执行如下语句后 z的二进制值为:
int y = 1 << 7;
int z = x & y;
A.10000001 B.10000000 C.00000001
D.10011101 E.10011100
11) 以下哪些编译正确?
A.short myshort = 99S;
B.String name = 'Excellent tutorial Mr Green';
C.char c = 17c;
D.int z = 015;
12) 以下哪些是java关键字?
A.double B.Switch C.then D.instanceof
13) 以下程序行的输出结果为?
System.out.println(010|4);
A.14 B.0 C.6 D.12
14) 设有如下变量
char c = 'c';
int i = 10;
double d = 10;
long l = 1;
String s = "Hello";
以下哪些语句编译不出错?
A.c=c+i; B. s+=i; C. i+=s; D. c+=s;
15) 整型变量a,b的值定义如下:
int a=3;
int b=4;
则表达式 ++a==b的值为:
A.4 B.false C.3 D.true
16) 执行下列代码后输出结果为:
public class test {
public static void main(String args[]) {
int a=2;
int b=3;
int c=7;
int d=a>c?a:c;
d=d>>2>b? d:b;
System.out.println(b);
}
}
A.2 B.3 C.5 D.7下载本文