实验2  Java符号与表达式
2.1 实验目的
1)熟悉基本数据类型及其占用空间大小,熟悉标识符的定义特点;
2)熟悉常见转义字符的含义;
3)掌握不同类型数据的赋值转换原则,熟悉自动转换与强制转换的含义;
4)掌握常用运算符的使用。
2.2 知识要点 
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
        八进制表示形式:以0(零)开头,如:012
        十六进指表示形式:以0x开头,如:0xa1
        整数默认int型,长整数可在后面加L
        实数默认双精度型,要明确表示为float型在数据后加F
        布尔型数据只有truefalse两个值;
        字符型数据是用单引号括起来。
2.2.2  特殊字符转义符
 Java字符采用Unicode编码。“\ (反斜杠)在字符表示或字符串中有特殊作用,它和之后的字符合并解释,用于表示一些特殊字符。见表2-2
2-2 常见转义符
转义字符
描述
\
单引号字符
\"
双引号字符
\\
反斜杠
\r
回车
\n
换行
\f
走纸换页
\t
横向跳格
\b
退格
2.2.3 自动类型转换与强制类型转换
1 自动转换次序
byte-->shortcharintlongfloatdouble
    按照箭头所示方向,处于左边的数据类型的数据可以自动转换赋值给右边的数据类型的变量,但反之,将处于右边的数据类型的数据赋值给处于左边的数据类型的变量必须经过强制转换。
2 布尔类型不能与其他类型进行转换;
3 赋值时强制转换可能导致数据丢失精度。
2.2.4 输出语句的使用
1print()方法与println()的差异是前者输出后不换行,而后者换行。
2)输出时可以通过“+”号将任何数据与字符串拼接。如果拼接的是基本类型变量,则在其位置输出变量值,如果是对象,则在其位置输出对象的toString()方法的返回结果。
2.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
2)赋值运算(=)与相等比较(==)的差异
赋值语句形式:变量名=表达式;
功能:计算表达式的结果,并将结果给变量赋值,变量的结果也为赋值表达式的结果。
==”是关系运算符,是比较运算符两边的数据是否相等。表达式的结果为truefalse
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
求余数
4)逻辑与(&&)与逻辑或(||)的使用,尤其是副作用。
逻辑运算符有可能不必计算运算符两边的表达式即可确定结果,其副作用见表2-5
2-5 逻辑运算符的附加特点
表达式
何时结果为true
附加特点
op1 && op2
op1 op2都是true
op1false时,不计算op2
op1 || op2
op1 op2true
op1true时,不计算op2
5)位运算符的使用
移位运算符左移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 op21,相应的位为1
^
Op1 ^ op2
op1op2是不同值时,相应的位为1
6)运算符的优先级
    在一个表达式中运算的优先次序由相邻运算符的优先级决定,同一级运算符的运算次序根据运算符的结合性决定运算次序。如果是左结合则按自左向右的次序进行。
2.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);
      }
    }
【说明】计算机编程解法可以是多样的,只要能实现目标即可。但要注意程序的可读性,对引入的变量通常要加以注释。
2.4 上机练习
      基本题
1 编程观察如下输出语句:
System.out.println("hello test escape char");
在“escape”处换上各种转义字符测试输出效果。如何实现如下输出:
Hello "test"
    Hello \test
2 设有如下代码段,考虑赋值转换问题:
int a=234; 

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。