知ing

Java语言程序设计(第三版)

邵丽萍,邵光亚,张后扬 编 / 清华大学出版社

拼命菇凉@ 上传

查看本书


2.1  Java语言的基本元素
2.1.1  标识符
  标识符规则:必须以字母、下划线、“$”或汉字开头,后面的字符可以是字母、数字、下划线、“$”和汉字的一串字符
  说明:(1)不能是Java保留的关键字;
  (2)常量名一般以大写字母,变量名用小写字母,类名以大写字母开始;
  (3)区分大小写,如ad、Ad、aD、Da是四个不同的标识名。
2.1.2  关键字
    P20  表2.2
2.1.3  分隔符
  1.注释符
  (1)//   注释一行
   以“//”开始,终止于行尾,一般作单行注释,可放在语句的后面
  (2)/ *……*/  一行或多行注释
   以“/ *”开始,最后以“*/”结束,中间可写多行。
  (3)/ **……*/
   以“/ **”开始,最后以“*/”结束,中间可写多行。这种注释主要是为支持JDK工具javadoc而采用的。
  2.空白符
  如空格、回车、换行和制表符(Tab键)。系统编译程序时,只用空白符区分各种基本成分,然后忽略它。
  3.普通分隔符
  (1)“.”点号:用于分隔包、类或分隔引用变量中的变量和方法
  (2)“;”分号:Java语句结束的标志;
  (3)“:”冒号:说明语标号;
  (4)“{ }”大括号:用来定义复合语句、方法体、类体及数组的初始化;
  (5)“[  ]”方括号:用来定义数组类型及引用数字的元素值;
  (6)“( )”圆括号:用于在方法定义和访问中将参数表括起来,或定义运算的先后次序。
2.2  数据类型
  Java要求在程序中使用任何变量之前必须先声明其类型。
  Java的数据类型分为:
* 基本类型:整型、浮点型、布尔型、字符型
* 数组类型:一维数组和多维数组
* 复合类型:类、接口
2.2.1  基本数据类型
        表2.3  Java基本数据类型
说明
类型
位长/b
默认值
取值范围
布尔型
boolean
1
false
true , false
字节型
byte
8
0
-128~127
字符型
char
16
‘\u0000’
‘\u0000’~’\uffff’即0~65535
短整型
short
16
0
-32768~32767
整型
int
32
0
-231~231-1
长整型
long
64
0
-263~263-1
浮点型
(单精度)
float
32
0.0
+-1.4E-45或+-3.4028235E+38
双精度
double
64
0.0
+-4.9E-324  或
+-1.797693134862315E+308
说明:
  (1)一般情况下,没小数点的数字是int型,有小数点的数是double型;
  (2)String(字符串)型,如:“合肥”、“I am student” ;
  (3)Java的char类型采用UniCode(国际编码标准)的新字符处理方式,即大字符编码方案,汉字和字母均看作是一个字符,占两个字节;
  (4)Java程序是定义的变量若没有赋初值,Java取默认值。

C++基本数据类型有:整型(int)、字符型(char)、浮点型(float,double)、常量型
类型名
长度(字节)
取值范围
Char(signed  char)
1
-128~127
Unsigned  char
1
0~255
Short(short  int)
2
-32768~32767
Unsigned  short
2
0~65535
int(signed  int)
2
-32768~32767
Unsigned  int
2
0~65535
Long(signed  long)
4
-2147483648~2147483647
Unsigned  long
4
0~4294967295
Float
4
+-3.4*10e-38 ~ +-3.4*10e38
Double
8
+-1.7*10e-308~ +-1.7*10e308
Long  double
8
+-1.7*10e-308~ +-1.7*10e308
2.2.2  直接量与常量
  直接量(literal)是指在程序中直接给出的一个符号串,即其它语言称为的常量。
  Java的常量用final说明,约定常量标识符一般全部使用大写字母,常量在程序执行时不可更改。
  如:final int i=1;
    i=i+1;    //错,i是final(常量),不可更改值
  
  1.布尔型常量
    true  、   false
  注意:Java中的布尔型常量不能与0、-1、1等数字
    例:
     boolean A,b,C;
     A=false; 
     b=true;
     C=1;    //错
     boolean D=True;   //错,“True” 首字大写
  2.整型常量
  例:  45  , 045  ,0x45  ,  45L
     int  a=10    ;        // 十进制
     int  b=020   ;        // 八进制  以“0”(零)开头
     int  c=0x3A  ;       // 十六进制 以“0x”开头
     int  d=71  , Y=91  ;  //  对
     int  M=0xd1 , N=091 ;  // 错 “091”是八进制,不能有9
  说明:整型常量默认为32位int型,若在数值后加L或l,则表示为64位长整型
  3.浮点型常量
  例:  3.45   ,  4.512E12    4.5F   4.5D
  说明:(1)默认类型为64位double双精度类型(D或d),数字后面加F或f则是32位float单精度(实数)类型
  (2)double类型值有效空间大,但运行慢,结果精度不高
   float  a , b ;  double  x , y , z  ;
    a=7.4 ;    //错, 7.4默认是double型,不能赋予精度低的float型
    b=7.4F ;
    x=7.4E5;
    y=7.4E5D ;
    z=7.4E5F;    //对
  
  4.字符常量
  字符常量是由单引号括起来的单个字符,它可以是UniCode字符集中的任意一个字符。如  ‘A’ ‘#’  ‘宋’  ‘6’
  转义符号见P23 表2.4
  5.字符串常量
  用一对双引号起来的字符序列。
  例: “ABCD”  “学习Java”
    public class SC{
    public static void main(String arg[]){
    String  a="我是安徽\n合肥人";  //  “\n” 表示换行
    String  b='%' ;   //错   ‘%’是字符型,不能赋予String型
    System.out.println(A);  //错   A改为a
      }  }
2.2.3   变量
  Java通常用小写字母或单词作为变量名。
  变量具有名字、类型、值三元素
  1.变量的声明
  格式:类型  变量名[,变量名]=初值,… ;
  赋值:[类型]  变量名=值
  如:int a=5 ,  b=6 , c , d  ;
    String s=”合肥” ;
    float  m , n ;
    m=6.78f ;
  说明:
  (1)变量名必须在作用域中是唯一的,不同作用域中才允许相同名字的变量出现;
  (2)只要在同一代码块没有同名的变量名,可以在程序中任何地方定义变量,一个代码块就是两个相对的“{  }”之间部分。
  2.变量的使用范围
  每个变量的使用范围只在定义它的代码块中,包括这个代码块中包含的代码块。
  在类开始处声明的变量是成员变量,作用范围在整个类;
  在方法和块中声明的变量是局部变量,作用范围到它的“}”;
  见P25  例2.4:
  例:public class SC{
    int i=0;
    public static void main(String arg[]){
      int  i=1;
     System.out.println(i);    } }   //  输入  1
  3.变量类型的转换
  Java可以将低精度的数字赋值给高精度的数字型变量,反之则需要强制类型转换。
  强制转换格式:(数据类型)数据表达式
  如:int i;
    float  f=(float)34.6;   // 34.6默认是双精度,float f=34.6F也对
    i=(int)f;
    System.out.println(f);  // 输出34.6
    System.out.println(i);  // 输出34

 byte    short   char    int      long     float         double
字节型  短整型  字符型  整型   长整型  单精度实型  双精度实型
     低                                              高
2.3  运算符与表达式(与C、C++相同)
2.3.1  赋值运算符
简略形式
非简略形式
i+=j
i=i+j
i-=j
i=i-j
i*=j
i=i*j
i/=j
i=i/j
I%=j
i=i%j
例:a=b=c=0 ;  相当于c=0 ,  b=c ,  a=b ;
例:  int  k=10;  double  x=10, y=20 ;
   k/=4 ;    // 2
   x+=10;   // 20
   y*=y;    // 400
例: int  i=10  , j=3 ;
      i*=j+2  //  50 
2.3.2  算术运算符
  见P28 表2.7
  例   int i=1;
    System.out.println(i++);  // 输出 1
    System.out.println(++i);  // 输出 3
2.3.3  关系运算符
等于
不等于
小于
小于等于
大于等于
大于
==
!=
<
<=
>=
>
     如:public class SC{
       public static void main(String arg[])
       {  boolean  x , y ;
         int  i=5 ,  j=2 ;
          x=(i-4)= =(j-1) ;
          int  a=1 ;  double  b=1.0 ;
          y=a= =b;
          int  m=65 ; char  n='A' ;
          System.out.println(x) ;  // 输出true
          System.out.println(y) ;  // 输出true
         System.out.println(m= =n) ;  // 输出true
       }}
2.3.4  条件运算符
  格式:条件表达式  ?  表达式2 :表达式3
  功能:条件表达式为true,取“表达式2”值,为false,取“表达式3”的值
  例:  int a=0x10 , b=010 , max ;
        max=a>b ? a : b  ;
        System.out.println(max) ;    // 输出16
2.3.5  逻辑运算符
  见P29 表2.9
2.3.6  位运算符(不做要求)
2.3.7  其他运算符
  见P32 表2.11
  instanceof : 对象运算符,用于测试一个对象是否是一个指定类的实例
  例:有一个称为shape的类,shape的子类是polygonShape,如果有一个存储shape的变量实例shapeHolder,如何知道它是否是一个polygonShape呢?下述代码段会帮助解决这个问题:
  shape shapeHolder ;
  if (shapeHolder  instanceof polygonShape)
  {  polygonShape polygon=( polygonShape) shapeHolder ;
    …………
    …………     }
  当处理保存某一公用父类的子类对象的数据结构时,会经常遇到上面提及的情况。假设我们有一个基于画图程序的对象,并且存储了用户绘制的所有形状,若要打印这些数据,就要有一个循环遍历这些数据结构并打印每一形状,如果一种特殊的形状需要特殊的指令进行打印,就需要使用instanceof运算符。
  
  new     : 对象实例化运算符,实例化一个对象,即为对象分配内存
  
  +       : 字符串合并运算符,
         表:字符串创建规则
操作数
        规    则
Null变量
取值为空(null)会产生null字符串
整数
整数会被转换成十进制,表示字符串,如是是负数,前面会加上“-”号。
浮点数
被转换为紧缩格式的字符串,如果长度超过10个字符,会以指数形式表示。
字符
被转换为长度为1的包含相同字符的字符串
布尔值
转换成“true”或“false”
对象
对象的方法toString( )会被调用
  例:String  a="Hi" , b="你好"  ;
    int i=42  ;
    float j=42.0f  ;
    boolean f=i==j ;
    double d=489.47 ;
    System.out.println(a+b) ;  // 输出Hi你好
    a=a+f ;
    System.out.println(a);    // 输出Hitrue
    System.out.println(b+d);  // 输出你好489.47
2.3.8  运算优先级
  见P32 表2.12
  例: int a=3 , b=6 , k ;
     k=a+=b-=2 ;          // 先计算b-=2, 得4,再计算a+=4
     System.out.println(k) ;  // 输出 7
2.4  数组
  数组是有序数据的集合,数组中的每个元素具有相同的数组名,根据数组名和下标来唯一确定数组中的元素。使用时要先声明后创建
2.4.1  一维数组的声明
  格式: 数据类型  数组名[ ]   或  数据类型  [ ]数组名
  例:  int a[]  ;  String s[]  ;  char []c  ;
  说明:定义数组,并不为数据元素分配内存,因此“[ ]”中不用指出数组中元素个数。
2.4.2  一维数组的创建与赋值
  创建数组并不是定义数组,而是在数组定义后,为数组分配存储空间,同时对数组元素进行初始化
  1.用运算符new分配内存再赋值
   格式:数组名=new  数据类型[size]
   例:int a[]  ; String s[]  ;  char []c  ;
     a=new int[3] ;  // 产生a[0] , a[1] , a[2] 三个元素
     s=new String[2] ; c=new char[5] ;
     a[0]=8 ; a[1]=8 ; a[2]=8 ;
     s[1]=”网络” ;
     int intArr[]=new int[3] ;    //  声明和分配内存并在一起
     char chArr[]=new char[6] ;  // 声明和分配内存并在一起
     System.out.println(a[0]+a[1]) ;
  2.直接赋初值并定义数组的大小
     例:int i[]={4,5,010,7,3,2,9} ;
       String names[]={“张三”,”李四”,”王五”,”宋七”} ;
       char c[]={‘a’,’b’,’c’,’北’,’京’} ;
  3.测试数组长度(补充)
    格式:数组名.length
    char c[]={‘a’,’b’,’c’,’北’,’京’} ;
    System.out.print(c.length)  ;   // 输出5
2.4.3  多维数组
  以二维数组为例    
 例:int  d[][] ;  // 定义一个二维数组
   d=new int[3][4] ; // 分配3行4列数组内存
   char c[][]=new char[2][3] ; // 定义和分配在一起
   int a[][]=new int[2][] ;
   a[0]=new int[3] ;   // 第二维第一个元素指向3个整型数
   a[1]=new int[5] ;   // 第二维第一个元素指向5个整型数
           // Java可以第二维不等长
   int  i[][]={{0},{1,4,5},{75,6},{8,50,4,7}} ; //定义和赋初值在一起
   System.out.println(i[2][1])  ;   // 输出6
   System.out.println(i[1][2])  ;   // 输出5
   System.out.print(i.length)   ;   // 输出4
   System.out.print(i[1].length);   // 输出3
例: 下面数组定义哪些是正确的
   int  a[][]=new  int[10,10]      //错
   int  a[10][10]=new  int[][]     //错
   int  a[][]=new  int[10][10]     //错
   int  []a[]=new  int[10][10]     //对
   int  [][]a=new  int[10][10]     //对

查看更多