ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Java私塾跟我学系列——JAVA篇 第二章 基础语法

Java私塾跟我学系列——JAVA篇 第二章 基础语法

原创 Linux操作系统 作者:今天天气好晴朗 时间:2012-02-02 15:43:00 0 删除 编辑

第二章 基础语法

 

 

 

教学目标:

i掌握Java关键字和标识符

i掌握Java的基本数据类型

i掌握变量和常量

i掌握Java代码的基本知识

i掌握Java的运算符

i掌握Java表达式

i掌握Java流程控制结构

 

 

 

 

 

 

 

 

 

 

一、关键字                                                  

大家回忆一下我们在学习汉语的时候,开始学的是什么?肯定是先学一些单个的字,只有认识了单个的字,然后才能组成词,然后才能慢慢的到句子,然后到文章。

学习同计算机交流跟这个过程是一样的,首先我们得学习一些计算机看得懂的单个的字,那么这些单个字在Java里面就是关键字。

 

1.什么是关键字?

Java语言保留的,Java的开发和运行平台认识,并能正确处理的一些单词。

其实就是个约定,就好比我们约定好,我画个勾勾表示去吃饭。那好了,只要我画个勾勾,大家就知道是什么意思,并能够正确执行了。

关键字这个约定在Java语言和Java的开发和运行平台之间,我们只要按照这个约定使用了某个关键字,Java的开发和运行平台就能够认识它,并正确地处理。

 

2Java中有哪些关键字?

abstract    do       implements  private       throw

 boolean     double   import      protected     throws

 break       else     instanceof  public        transient

 byte        extends  int         return        true

 case        false    interface   short         try

 catch       final    long        static        void

 char        finally  native      super         volatile

 class       float    new         switch        while

 continue    for      null        synchronized  enum

 default     if       package     this          assert

 

3Java中关键字的基本含义

          abstract:表明类或类中的方法是抽象的;

          boolean:基本数据类型之一,布尔类型;

          break:提前跳出一个块;

          byte:基本数据类型之一,字节类型;

          case:在switch语句中,表明其中的一个分支;

          catch:用于处理例外情况,用来捕捉异常;

          char:基本数据类型之一,字符类型;

          class:类;

          continue:回到一个块的开始处;

          default:用在switch语句中,表明一个默认的分支;

          do:用在"do while"循环结构中;

          double:基本数据类型之一,双精度浮点数类型;

          else:在条件语句中,表明当条件不成立时的分支;

          extends:用来表明一个类是另一个类的子类;

          final:用来表明一个类不能派生出子类,或类中的方法不能被覆盖,或声明一个变量是常量;

          finally:用于处理异常情况,用来声明一个肯定会被执行到的块;

          float:基本数据类型之一,单精度浮点数类型;

          for:一种循环结构的引导词;

          if:条件语句的引导词;

          implements:表明一个类实现了给定的接口;

          import:表明要访问指定的类或包;

          instanceof:用来测试一个对象是否是一个指定类的实例;

          int:基本数据类型之一,整数类型;

          interface:接口;

          long:基本数据类型之一,长整数类型;

          native:用来声明一个方法是由与机器相关的语言(C/C++/FORTRAN语言)实现的;

          new:用来申请新对象;

          package:包;

          private:一种访问方式:私有模式;

          protected:一种访问方式:保护模式;

          public:一种访问方式:公共模式;

          return:从方法中返回值;

          short:基本数据类型之一,短整数类型;

          static:表明域或方法是静态的,即该域或方法是属于类的;

          strictfp:用来声明FP-strict(双精度或单精度浮点数)表达式,参见IEEE 754算术规范;

          super:当前对象的父类对象的引用;

          switch:分支结构的引导词;

          synchronized:表明一段代码的执行需要同步;

          this:当前对象的引用;

          throw:抛出一个异常;

          throws:声明方法中抛出的所有异常;

          transient:声明不用序列化的域;

          try:尝试一个可能抛出异常的程序块

          void:表明方法不返回值;

          volatile:表明两个或多个变量必须同步地发生变化;

          while:用在循环结构中;

          assert:声明断言;

          enum:声明枚举类型;

 

4.解释几点

1)这些关键字的具体含义和使用方法,会在后面用到的地方讲述

2Java的关键字也是随新的版本发布在不断变动中的,不是一成不变的

3)所有关键字都是小写的

4gotoconst不是Java编程语言中使用的关键字,但是是Java的保留字,也就是说Java保留了它们,但是没有使用它们。truefalse 不是关键字,而是 boolean类型直接量

5)表示类的关键字是class

 

 

二、标识符                                                 

现在我们已经知道如何表述一个类了,那就是“class”这个关键字,那么属性和方法怎么表达呢?我们是不是需要对每个属性和方法定义一个名字呢,比如:身高、体重等,这就需要标识符了。

 

1.什么是标识符?

Java编程语言中,标识符是赋予变量、类或方法等的名称。

 

2.标识符命名规则

命名规则如下:

1)首字母只能以字母、下划线、$开头,其后可以跟字母、下划线、$和数字

示例:$abc _abab123 等都是有效的

2)标识符区分大小写 (事实上整个Java编程里面都是区分大小写的)

          abc Abc 是两个不同的标识符

3标识符不能是关键字

4)标识符长度没有限制

 

3.标识符命名建议

1)如果标识符由多个单词构成,那么从第二个单词开始,首字母大写

示例:isText canRunTheCar

2)标识符尽量命名的有意义,让人能够望文知意

3)尽量少用带$符号的标识符,主要是习惯问题,大家都不是很习惯使用带$符号的标识符;还有在某些特定的场合,$具有特殊的含义

4由于Java语言使用Unicode字符集,所以字母包括:

v      ‘A’-‘Z’‘a’-‘z’

v      Unicode字符集中序号大于0xC0的所有符号;

v      Unicode字符集支持多种看起来相同的字母;

v      建议标符中最好使用ASCII字母

5) 标识符不应该使用中文,虽然中文标识符也能够正常编译和运行,其原因如上一点讲到的:是把中文当作Unicode字符集中的符号来对待了。

例如如下程序是可以正常编译和运行的,但是不建议这么做:

public class Test {

    public static void main(String[] args) {

       String Java私塾 = "中文标识符测试";

       System.out.println("Java私塾=="+Java私塾);

    }

}

 

运行结果:Java私塾==中文标识符测试

 

 

4.示例一

下列哪些是正确的标识符:

myVariable

9pins

i

a+c

testing1-2-3

java¨

My Variable

It's

 

错误的标识符及其原因分析如下:

My Variable         //含有空格

9pins               //首字符为数字

a+c                 //加号不是字母

testing1-2-3        //减号不是字母

It's                //单引号不是字母

java¨            //与号不是字母

 

5.示例二

好了,现在来用Java代码表示前面抽象出来的人这个类,如下:

class  Person{

         //姓名

         name;

      //体重

      weight;

      //身高

      height;

}

 

发现新的问题来了,我们定义的这个weightheight应该是有单位的,那么在Java中怎么表达给weightheight设置单位呢?这就需要下面讲的数据类型了。

 

三、数据类型                                                

1.什么叫数据类型?

数据类型简单的说就是对数据的分类,对数据各自的特点进行类别的划分。划分的每种数据类型都具有区别于其它类型的特征,每一类数据都有相应的特点和操作功能。例如数字类型的就能够进行加减乘除的操作。

在现实生活中,我们通常会对信息进行分类,从而使得我们能很容易的判断某个数据是表示一个百分数还是一个日期,我们通常是通过判断数字是否带“%”,或者是否是一个我们熟悉的“日期格式”。

类似的在程序中,计算机也需要某种方式来判断某个数字是什么类型的。这通常是需要程序员显示来声明某个数据是什么类型的,Java就是这样的。Java是一种强类型的语言,凡是使用到的变量,在编译之前一定要被显示的声明。

 

2Java数据类型的分类

Java里面的数据类型从大的方面分为两类,一是基本数据类型,一是引用类型, 

3Java中的基本数据类型                                                             

Java中的基本数据类型分为八种原始数据类型,原始类型可分为四种:

1):整数型:byteshortintlong

2):浮点型:floatdouble

3):字符型:char

4):逻辑型:boolean

 

3.1 整数型:byteshortintlong                                              

byte  字节型

short 短整型

int   整型

long  长整型

 

Java中,整数型的值都是带符号的数字,可以用十进制、八进制和十六进制来表示。

所谓多少进制,就是满多少就进位的意思,如十进制表示逢十进位,八进制就表示逢八进位。

示例:

     15 :十进制的15

     O15 :八进制的15,前面是数字0,相当于十进制的13,计算公式:1*8+5=13

     0x15:十六进制的15,相当于十进制的21,计算公式:1*16+5=21

 

3.1.1Java中的定义示例

示例1byte abc = 5;

表示在Java中定义一个变量abc,类型是byte类型,值是5

同理可以定义其它的类型:

比如:

short abc1 = 5;

int abc2 = 5;

long abc3 = 5;

 这些都是可以的,如果要明确表示是long型的值,可以在后面直接跟一个字母“L”。L表示一个long值。

也就是写成:long abc4 = 5L;

请注意,在Java编程语言中使用大写或小写L同样都是有效的,但由于小写l与数字1容易混淆,因而,尽量不要使用小写。

 注意:整数型的值,如果没有特别指明,默认是int型。

 

3.1.2 取值范围和默认值

取值范围的表示是按Java编程语言规范定义的且不依赖于平台

 

名称

长度  

取值范围

大概值的范围

默认值

byte

 8                 

-2 7 ... 2 7 -1

-128 - 127

0

short

 16              

-2 15 ... 2 15 -1

-32768 - 32767

0

int 

 32               

-2 31 ... 2 31 –1

-21亿 – 21亿

0

long

 64                

-2 63 ... 2 63 -1

 

0

 

3.2 浮点型:floatdouble                                                       

Java用浮点型来表示实数,简单地说就是带小数的数据。

floatdouble来定义浮点类型,如果一个数字包括小数点或指数部分,或者在数字后带有字母Fffloat)、Dddouble),则该数字文字为浮点型的。

示例:

12.3    //简单的浮点型数据

12.3E10 //数据很大的一个浮点数据

 

3.2.1 Java中的定义示例

如下定义都是可以的:

float abc1 = 5.6F;

float abc2 = 5.6f;

double abc3 = 5.6;

double abc4 = 5.6D;

double abc5 = 5.6d;

 3.2.2 提示

1浮点型的值,如果没有特别指明,默认是double型的。

2)定义float型的时候,一定要指明是float型的,可以通过在数字后面添加”F”或者”f”来表示。

3)定义double型的时候,可以不用指明,默认就是double型的,也可以通过在数字后面添加”D”或者”d”来表示。

 3.2.3取值范围和默认值

 

名称

长度  

默认值

float

 32                 

0.0f

double

 64              

0.0

 

Java技术规范的浮点数的格式是由电力电子工程师学会(IEEE754定义的,是独立于平台的。可以通过Float.MAX_VALUEFloat.MIN_VALUE取得Float的最大最小值;可以通过Double.MAX_VALUEDouble.MIN_VALUE来取得Double的最大最小值。

 

3.3 字符型:char                                                               

char类型用来表示单个字符。一个char代表一个16-bit无符号的(不分正负的)Unicode字符,一个char字符必须包含在单引号内。

示例:

a //表示简单的字符

‘1’ //用数字也可以表示字符

 

下面就错了,只能使用单个字符

‘ab’ //错误

‘12’ //错误

 3.3.1 什么是Unicode编码?

Unicode编码又叫统一码万国码或单一码,是一种在计算机上使用的字符编码。它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。1990年开始研发,1994年正式公布。随着计算机工作能力的增强,Unicode也在面世以来的十多年里得到普及。unicode的表达如下:

‘\u????’   一个Unicode字符。????应严格按照四个16进制数进行替换。

 3.3.2 Java中的定义示例

char c = ‘a’;

char c = ‘1’;

 3.3.3 取值范围和默认值

 

名称

长度  

范围

默认值

char

16                 

Unicode 2 16-1

Unicode 0

 

 

 

 

 3.3.4  Java里面的转义字符

转义字符是指,用一些普通字符的组合来代替一些特殊字符,由于其组合改变了原来字符表示的含义,因此称为转义。 常见的转义字符:

\n 回车 (\u000a)   

\t 水平制表符(\u0009)   

\b 退格(\u0008)   

\r 换行(\u000d)   

\f 换页(\u000c)   

\’单引号(\u0027)   

\" 双引号(\u0022)   

\\ 反斜杠(\u005c)   

 

3.4 逻辑型:boolean                                                               

逻辑值有两种状态,即人们经常使用的“on”和“off” 或“true”和“false”或“yes”和“no”,这样的值是用boolean类型来表示的。boolean有两个文字值,即truefalse。以下是一个有关boolean类型变量的声明和初始化:

boolean truth = true; //声明变量truth               

注意:在整数类型和boolean类型之间无转换计算。有些语言(特别值得强调的是CC++)允许将数字值转换成逻辑值(所谓“非零即真”),这在Java编程语言中是不允许的;boolean类型只允许使用boolean值(truefalse)。

 

注意:Java中不可以直接将整数类型和逻辑类型转换

3.5 声明和赋值                                                                 

3.5.1 什么是声明?

声明为Java程序实体引入标识符,能够使用这些名字访问到这些实体,声明实体包括:类名、属性名、方法名、变量名、参数名、接口名等等。其实简单点说就是定义某个东西并对外宣称它。示例:int a;   //声明一个类型为int的变量a

 3.5.2 什么是赋值?

赋值就是为一个声明的变量或者常量赋予具体的值,也就是赋予值的意思。使用一个等号”=”来表示。

示例:

a = 5;

这句话的意思就是,对已经声明变量a,将它赋值为5。(如果该变量以前曾经被赋过值,则旧的值会立刻丢失,因为一个普通变量只能存放最后一次赋予的值。)

 3.6 特别介绍:字符串型  String                                                

字符型只能表示一个字符,那么多个字符怎么表示呢?

Java中使用String这个类来表示多个字符,表示方式是用双引号把要表示的字符串引起来,字符串里面的字符数量是任意多个。字符本身符合Unicode标准,且上述char类型的反斜线符号(转义字符)适用于String。与CC++不同,String不能用 \0作为结束。String的文字应用双引号封闭,如下所示:

“The quick brown fox jumped over the lazy dog.”

 

charString类型变量的声明和初始化代码如下所示:

 

char ch = ‘A'; // 声明并初始化一个字符变量

char ch1,ch2 ; //声明两个字符变量,但暂时没有给它们赋值

// 声明两个字符串变量并初始化它们

String greeting = "Good Morning !! \n" ;

String errMsg = "Record Not Found !" ;

String str1,str2 ; // 声明两个字符串变量

   String s1 = “12abc”; //基本的字符串型

    String s2 = “”;   //表示空串,注意与空null值不同

注意:

1String 不是原始的数据类型,而是一个类(class)

2String对象包含的字符数量是任意多个,而字符类型只能是一个。

要特别注意:”a” 表示的是字符串,而’a’表示的是字符类型,它们具有不同的功能。

3String的默认值是null。(注意:null是一个值,而不是一个字符串)。

 3.7 示例                                                                       

下列程序显示了如何为整数、浮点数、boolean、字符和String类型变量声明和赋值                                                                

   1. public class Assign {

   2. public static void main(String args []) {

   3. int x, y; // 声明 int 变量

   4. float z = 3.414f; // 声明并赋值 float

   5. double w = 3.1415; //声明并赋值 double

   6. boolean truth = true; //声明并赋值boolean

   7. char c; // 声明字符变量

   8. String str; // 声明String 字符串

   9. String str1 = "bye"; //声明并赋值 String 变量

  10. c = 'A'; // 给字符变量赋值

  11. str = "Hi out there!"; // String 变量赋值

  12. x = 6;

  13. y = 1000; // int 变量赋值

  14. ...    //…此处表示有更多的代码的意思

  15.}

  16.}

非法赋值举例

y = 3.1415926; // 3.1415926 不是一个 int.

             // 需要类型转换并且小数位要截掉

w = 175,000; // 逗号( , ) 不能够出现

truth = 1; // 一个优秀的C/C++程序员常犯的错误,在Java语言中boolean型变量只能为truefalse

z = 3.14156 ; // double型的值不能赋给float 变量,需要类型转换

 对于引用数据类型放到后面再学,先看看常量和变量。

四、常量和变量                                                 

1.什么是常量?                                                                 

常量是值不可以改变的标识符。

对常量的定义规则:建议大家尽量全部大写,并用下划线将词分隔。

如:JAVASS_CLASS_NUMBER FILE_PATH

2.什么是变量?                                                                   

变量是值可以改变的标识符,用来引用一个存储单元,用标识符来表示,可以通过操作变量来操作变量所对应的内存区域或值块的值。

    下面来理解一下:

2.1 变量是标识符

也就是说变量本质上是标识符,但是所有的标识符都是变量吗?很显然不是的,那么哪些标识符才是变量呢?

2.2 值可以改变

一定是值可以改变的这些标识符才被称为变量,注意是可以改变,不是一定要改变。

比如:

我们定义人的体重叫做weight,现在测量某人的体重是70kg,也就是weight的值是70,然后让他吃饭,吃完饭过后马上再次测量,此时体重可能是71kg,也就是说weight的值发生了变化,变成了71了。对象并没有发生变化,属性也没有发生变化,只是这个属性的值发生了变化。

2.3变量的定义规则

1 遵从所有标识符的规则

2 所有变量都可大小写混用,但首字符应小写

3 尽量不要使用下划线和$符号

4 可以先声明再赋值,如:

int i;        //变量的声明

i=9;         //赋值语句对变量进行赋值

       也可以声明的同时进行赋值: 

int  i=9;

2.4几点说明

1 变量在计算机内部对应着一个存储单元,而且总是具有某种数据类型:基本数据类型或引用数据类型

2 变量总是具有与其数据类型相对应的值

3 每个变量均具有: 名字、类型、一定大小的存储单元以及值

 五、Java代码的基本知识                                     

1.语句

用分号“;”结尾的一行代码就是语句,Java中语句必须以”;”结尾。

如:int a = 10;

可以有块语句,例如:

              int i=0;

              {

                     int j = 0;

                     j = j+1;

           }

              i++;

 2.块(block

一个块是以{}作为边界的语句的集合,块可以嵌套。如:

{

int a = 10;

String s = “”;  //一条语句或多条语句均可

{

    System.out.println(“块可以嵌套”);

}

}

 3.注释

什么是注释呢?就是标注解释的意思,主要用来对Java代码进行说明,给人看的,帮助理解编码的思路、功能等,编译器是忽略其内容的。

Java中有三种注释方式:

1 //    注释单行语句

示例:

//定义一个值为10int变量

int a = 10;

2 /*  */    多行注释

示例:

/*

这是一个注释,不会被Java用来运行

这是第二行注释,可以有任意多行

*/

3 /**  */   文档注释

紧放在变量、方法或类的声明之前的文档注释, 表示该注释应该被放在自动生成的文档中(javadoc命令生成的HTML文件)以当作对声明项的描述。

示例:

/**

*  这是一个文档注释的测试

*  它会通过javadoc生成标准的java接口文档

*/

常常在javadoc注释中加入一个以“@”开头的标记,结合javadoc指令的参数,可以在生成的API文档中产生特定的标记

 

常用的javadoc标记

@author:作者

@version:版本

@deprecated:不推荐使用的方法

@param:方法的参数类型

@return:方法的返回类型

@see"参见",用于指定参考的内容

@exception:抛出的异常

@throws:抛出的异常,和exception同义

 

javadoc标记的应用范围

在类和接口文档注释中的标记有@see @deprecated  @author @version

在方法或者构造方法中的标记有:@see @deprecated @param @return @exception @throws

在属性文档注释中的标记:@see @deprecated

 

4.空格

  在一个Java程序中任何数量的空格都是允许的

 

5Java编程基本的编码约定

可能有些还没有学到,没有关系,先了解一下。

──类名应该是名词,大小写可混用,但首字母应大写。例如:

                class  AccountBook

                class  ComplexVariable

    接口──接口名大小写规则与类名相同。

                interface  Account

    方法──方法名应该是动词,大小写可混用,但首字母应小写。在每个方法名内,大写字母将词分隔并限制使用下划线。例如:

                balanceAccount( )

                addComplex( )

变量──所有变量都可大小写混用,但首字符应小写。词由大写字母分隔,限制用下划线,限制使用美元符号($),因为这个字符对内部类有特殊的含义。

         currentCustomer

变量应该代表一定的含义,通过它可传达给读者使用它的意图。尽量避免使用单个字符, 除非是临时“即用即扔”的变量(例如,用i, j, k作为循环控制变量)

常量──全部大写并用下划线将词分隔。

         HEAD_COUNT

         MAXIMUM_SIZE

   控制结构──当语句是控制结构的一部分时,即使是单个语句也应使用括号({})将语句封闭。例如:

if  (布尔表达式)

   一些语句

else 

   另外一些语句

语句行── 每行只写一个语句并使用四个缩进的空格使你的代码更易读。

注释──用注释来说明那些不明显的代码段落;对一般注释使用 //  分隔符, 而大段的代码可使用 /*···*/分隔符。使用 /**···*/将注释形成文档,并输入给javadoc以生成HTML代码文档。

 

六、运算符                                                  

Java运算符很多,下面按优先顺序列出了各种运算符(“L to R”表示左到右结合,“R to L”表示右到左结合)

 

分隔符

.  []  ()  ;   ,

右结合

++  --  -  !

左结合

*  /  %

左结合

+  -

左结合

<<   >>  >>>

左结合

<   >   <=   >=   instanceof(Java特有)

左结合

==    !=

左结合

&

左结合

^

左结合

|

左结合

&&

左结合

||

右结合

?:

右结合

=  *=  /=  %=  +=  -=  <<=  >>=  >>>=  &=  *=  |=

注意:运算符的结合性决定了同优先级运算符的求值顺序

 

1.算术运算                                                                           

算术运算是指:+、-、*/  等基本运算

 

需要注意的是:

%是求mod运算。(求余数或称求模运算)

整数的除法要小心:

5/2 = 2     //java的整数除法结果为整数,不是 2.5。其它语言可能不同

 

2.比较运算                                                                           

比较运算是指:><>=<===!= 等类似运算

 

需要注意的是:

字符可以比较大小;(用它们的ascii码,化为整数)

小心浮点数的相等或不等比较运算,最好避免;

instanceof也是一个比较运算用来判断一个对象是否属于某个类;(以后介绍)

==运算中,对于基本类型是比较的内容,而对于引用类型,比较的是地址(小心)

 

3.逻辑运算                                                                         

       运算符&& (定义为“与”)||(定义为“或”)执行布尔逻辑表达式。请看下面的例子:

MyDate d = null;

if ((d != null) && (d.day() > 31))

// 利用d执行些什么

形成if ()语句自变量的布尔表达式是合法且安全的。这是因为当第一个子表达式是假时,第二个子表达式被跳过,而且当第一个子表达式是假时,整个表达式将总是假,所以不必考虑第二个子表达式的值。类似的,如果使用||运算符,而且第一个表达式返回真, 则第二个表达式不必求值,因为整个表达式已经被认为是真。

4++---运算                                                                           

    ++运算相当于:运算的变量加1,如:x++ 等同于  x=x+1;

    --运算恰好相反,相当于运算的变量减1

注意x++  ++x 并不是一回事情。x++是先使用,然后再加;++x是先加然后再使用。

5=赋值运算                                                                           

    x=5相当于把5这个值赋给变量x

6.位运算                                                                           

    位逻辑运算符(Bitwise Logical Operations)。

&(与),|(或),~(取反),^(异或); 

位运算符示例:

 

特别说明:

& | 运算还可以用于逻辑运算,但它们是非短路运算符(即两边的表达式一定会计算的),而 && ||是短路的逻辑运算符(即如果由左边的表达式结果能够得知最终的结果,则不再对右边的表达式进行运算)。示例如下:

int i=6, j=8, k=10, m=7;

if(!(i>j & m>k++))

  k++;

k的结果为12,而如果将&改为&&,则k的结果为11

 

 7. 移位运算                                                                              

Java编程语言提供了两种右移位运算符和一种左移运算符,右移一位( >> )相对于除以2:左移( <<)相对于乘以2

1运算符>>进行算术或符号右移位。移位的结果是第一个操作数被2的幂来除,而指数的值是由第二个数给出的。例如:

128 >> 1 得到 128/21 = 64

256 >> 4 得到 256/24 = 16

-256 >> 4 得到 -256/24 = -16

2逻辑或非符号右移位运算符>>>主要作用于位图,而不是一个值的算术意义;它总是将零置于符号位上。例如:

1010 ... >> 2 得到 111010 ...

1010 ... >>> 2 得到 001010 ...

在移位的过程中, >>运算符使符号位被拷贝。

3运算符<<执行一个左移位。移位的结果是:第一个操作数乘以2的幂,指数的值是由第二个数给出的。例如:

      128 << 1 得到 128*21 = 256

16 << 2 得到 16*22 =64

4负数等于正数取反加一。

示例:

 

注意

1) 移位运算符将它们右侧的操作数模32简化为int类型左侧操作数, 64简化为long类型右侧操作数。因而, 任何int x, x >>> 32都会导致不变的x, 而不是你可能预计的零。

2)值得称赞的重要一点是: >>>运算符仅被允许用在整数类型, 并且仅对intlong值有效。如果用在shortbyte值上, 则在应用>>>之前, 该值将通过带符号的向上类型转换被升级为一个int。有鉴于此,无符号移位通常已成为符号移位。

8用加号(+)进行串链接                                                               

运算符 +  能够进行String对象的链接并生成一个新的String

        String salutation = "Dr. ";

        String name = "Jack " + "Arthur";

        String title = salutation + name;

      最后一行的结果是:

        Dr. Jack Arthur

如果+运算符中有一个自变量为String对象,则其它自变量将被转换成String。所有对象都可被自动转换成String,尽管这样做的结果可能是意义含糊的。不是字符串的对象是通过使用toString() 成员方法而转换成串的等价物的。

 

9.三目运算 ?                                                              

三目运算符?:表达的是:判断问号前面的条件表达式是否为真,如果为真,返回冒号前面的值,否则返回冒号后面的值。

例如:

 

public class Test {

    public static void main(String[] args) {

       int i = (5>3) ? 6 : 7;

       System.out.println("the i="+i);

    }

}

运行结果为:the i=6

       其实三目运算符的基本功能相当于if-else(马上就要学到了),使用三目运算符是因为它的表达比相同功能的if-else更简洁。上面的例子改成用if-else表达如下:

public class Test {

    public static void main(String[] args) {

       int i = 0;

       if (5 > 3) {

           i = 6;

       } else {

           i = 7;

       }

       System.out.println("the i=" + i);

    }

}

运行结果为:the i=6

 

七、控制语句                                                 

1. 分支控制语句                                                                           

分支语句又称条件语句,条件语句使部分程序可根据某些表达式的值被有选择地执行。Java编程语言支持双路if和多路switch分支语句。

1.1  if  else语句                                                                 

If else语句的基本句法是:

     if (布尔表达式)

        语句序列;

       else 

        语句序列;

    

例如:

int count;

    count = getCount(); // a method defined in the program

    if (count < 0) {

      System.out.println("Error: count value is negative.");

    }else {

      System.out.println("There will be " + count +

        " people for lunch today.");

    }

 

Java编程语言中,if ()用的是一个布尔表达式,而不是数字值,这一点与C/C++不同。前面已经讲过,布尔类型和数字类型不能相互转换。因而,如果出现下列情况:

if  (x)  // x int

你应该使用下列语句替代:

if  (x ! = 0)

注意:

1 if块和else块可以包含任意的java代码,自然也就可以包含新的if-else,也就是说:if-else是可以嵌套的,嵌套的规则是不可以交叉,必须完全包含。比如:

if(a1 > a2){

    if(a1 > a3){

        //包含在里面的块必须先结束

    }else{

        //同样可以包含if-else

}

}

2 else部分是选择性的,并且当测试条件为假时如不需做任何事,else部分可被省略。也就是说if块可以独立存在,但是else块不能独立存在,必须要有if块才能有else块。

3 如果if块和else块的语句只有一句时,可以省略{},例如:

if(a1 >2)

    System.out.println(“这是if”);

    else

        System.out.println(“这是else”);

   

    上面的代码从语法角度是完全正确的,但是从代码的可阅读性上,容易让人产生迷惑,所以我们不建议大家这么写

4 还可以把elseif组和使用,就是使用else  if,表达“否则如果”的意思,示例如下:

    if(a1 > a2){

        System.out.println(“a1 > a2”);

}else if(a1 > a3){

    System.out.println(“a1 > a3”);

}else if(a1 > a4){

    System.out.println(“a1 > a4”);

}else{

    System.out.println(“其它”);

}

再来个例子:

if (score>=90){

   grade= "very good";

}else if(score>=70){

   grade= "good";

}else if (score>=60){

 grade= "pass";

}else{

 grade= "no pass";

}

 

5如果不用“{ }” ,则“else”总是与最接近它的前一个 “if”相匹配。

例如:

 

if ( x > 5 )

    if ( y > 5 )

        System.out.println( "x y > 5" );

else

    System.out.println( "x  <= 5" );

 

执行与上面的对应匹配形式不同,而是与下面形式匹配

 

  if ( x > 5 )

    if ( y > 5 )

        System.out.println( "x y > 5" );

    else

        System.out.println( "x <= 5" );

 

1.2  switch语句                                                                  

switch表示选择分支的情况,switch语句的句法是:

     switch (expr1)

         case 1:

             语句序列;

             break;

         case 2:

             语句序列;

             break;

         default:

             语句序列;

             break;

 

说明:

1 switch的表达式expr1只能是int以下的整数型,及相应的包装类(JDK5.0以后),或者是enum枚举类型。int以下的整数型包含byteshortcharint。不能是字符串或引用类型,也不能是long型或浮点型。

2)当变量或表达式的值不能与任何case值相匹配时,缺省符(default)指出了应该执行的程序代码。

1

public class Test {

    public static void main(String[] args) {

       int colorNum = 5;

       switch (colorNum) {

       case 0:

           System.out.println(Color.red);

           break;

       case 1:

           System.out.println(Color.green);

           break;

       default:

           System.out.println(Color.black);

           break;

       }

    }

}

运行结果:java.awt.Color[r=0,g=0,b=0]

 

3)如果没有break语句作为某一个case代码段的结束句,则程序的执行将继续到下一个case,而不检查case表达式的值。

2

 

public class Test {

    public static void main(String[] args) {

       int colorNum = 0;

       switch (colorNum) {

       case 0:

           System.out.println(Color.red);

       case 1:

           System.out.println(Color.green);

       default:

           System.out.println(Color.black);

           break;

       }

    }

}

运行结果:

java.awt.Color[r=255,g=0,b=0]

java.awt.Color[r=0,g=255,b=0]

java.awt.Color[r=0,g=0,b=0]

 

2.设定背景颜色为黑色,而不考虑case变量colorNum的值。如果colorNum的值为0,背景颜色将首先被设定为红色,然后为绿色,再为黑色。

 

2. 循环控制语句                                                                          

循环语句使语句或块的执行得以重复进行。

Java编程语言支持三种循环构造类型:for, whiledo 循环。

forwhile循环是在执行循环体之前测试循环条件,而do 循环是在执行完循环体之后测试循环条件。这就意味着forwhile循环可能连一次循环体都未执行, 而do 循环将至少执行一次循环体。

 

2.1 for循环

for循环的句法是:

         for (初值表达式; boolean 测试表达式; 改变量表达式)

            语句或语句块

        

例如:

    for (int i = 0; i < 10; i++) {

System.out.println("Are you finished yet?");

}

System.out.println("Finally!");

 

注意:for语句里面的3个部分都可以省略,但是我们不建议这么做。

示例如下:

示例1:就是一个无限循环

public class Test {

    public static void main(String[] args) {

       for(;;){

           System.out.println("Java私塾");

       }

    }

}

示例2:可以省略部分

public class Test {

    public static void main(String[] args) {

       for(int i=0;;){

           System.out.println("Java私塾"+i);

       }

    }

}

示例3:可以省略部分

public class Test {

    public static void main(String[] args) {

       for(int i=0;i<3;){

           System.out.println("Java私塾"+i);

       }

    }

}

示例4:可以省略部分

public class Test {

    public static void main(String[] args) {

       for(int i=0;;i++){

           System.out.println("Java私塾"+i);

       }

    }

}

当然还有其他的组合方式,都是可以的。

 

2.2 while循环

while循环的句法是:

            while (布尔表达式)

               语句序列

例如:

int i = 0;

while (i < 10) {

System.out.println("Are you finished yet?");

i++;

}

System.out.println("Finally!");

请确认循环控制变量在循环体被开始执行之前已被正确初始化,并确认循环控制变量是真时,循环体才开始执行。控制变量必须被正确更新以防止死循环。

 

2.3 do循环

do循环的句法是:

         do

            语句或块;

         while (布尔表达式);   //此处结束的分号;必须要,否则编译出错

例如:

int i = 0;

do {

System.out.println("Are you finished yet?");

i++;

} while (i < 10);

System.out.println("Finally!");

while循环一样,请确认循环控制变量在循环体中被正确初始化和测试并被适时更新。作为一种编程惯例,for循环一般用在那种循环次数事先可确定的情况,而whiledo用在那种循环次数事先不可确定的情况。

do循环与while循环的不同这处在于,前者至少执行一次,而后者可能一次都不执行。

 

2.4 特殊循环流程控制

下列语句可被用在更深层次的控制循环语句中:

l         break [标注];    //方括号表示可选的成分

l         continue[标注];

l         label: 语句;      //这里必须是任意的合法的语句

    break语句被用来从switch语句、循环语句和预先给定了label的块中退出,跳出离break最近的循环(最里层循环)。

continue语句被用来略过并跳到循环体的结尾,终止本次循环,继续下一次循环。

label可标识控制需要转换到的任何有效语句,它被用来标识循环构造的复合语句。它类似以前被人诟病的“goto”语句,我们应该尽量避免使用。

1break的使用

public class Test {

    public static void main(String[] args) {

       for (int i = 0; i < 10; i++) {

           if (i == 5) {

              break;

           }

           System.out.println("i==" + i);

       }

    }

}

运行的结果:i==0一直到i==4

因为当i==5的时候,执行break,跳出for循环。

 

2continue的使用

public class Test {

    public static void main(String[] args) {

        for (int i = 0; i < 5; i++) {

            if (i == 3) {

                continue;

            }

            System.out.println("i==" + i);

        }

    }

}

运行的结果:i==0一直到i==4就是不包括i==3。因为当i==3的时候,执行continue,终止本次循环,继续下一次循环。

 

3label的使用

public class Test {

    public static void main(String[] args) {

       L: for (int i = 0; i < 5; i++) {

           if (i == 3) {

              break L;

           }

           System.out.println("i==" + i);

       }

    }

}

运行的结果是:i==0一直到i==2

 


作业                                     

1.叙述标识符的定义规则,指出下面的标识符中那些是不正确的,并说明理由。

here , _there, this, it, 2to1, _it

2.Java中共有那些基本数据类型?分别用什么符号来表示,各自的取值范围是多少?

3.复习所有的Java关键字。

4.指出正确的表达式。

    A byte b=128;

    B char c=65536;

    C long len=0xfffL;

    D double dd=0.9239d;

5.下面哪几个语句将引起编译错?

A. float f=4096.0;

B. double d=4096.0;

C. byte b=4096;

D. char c=4096;

6.简述Java 中的运算符,以及他们的运算次序。

7.创建一个switch 语句,为每一种case 都显示一条消息。并将switch 置入一个for 循环里,令其尝试每一种case。在每个case后面都放置一个break,并对其进行测试。然后,删除break,看看会有什么情况出现。

8.执行下列代码后的xy的结果分别是什么?

int x,y,a=2;

x=a++;

y=++a;

9.下面的程序输出结果是:a=6  b=5

    请将程序补充完整。

    public  class A

        {

               public static void main(String args[])

               {

                    int a=5,b=6;

                    a= ______;

                    b=a-b;

                    a=_______;

                    System.out.println("a="+a+"    b="+b); 

               }

       }

10.下面哪个语句序列没有错误,能够通过编译?

A.

int i=0;

if (i) {

System.out.println(Hi);

}

B.

boolean b=true;

boolean b2=true;

if(b==b2) {

System.out.println(So true);

}

C.

int i=1;

int j=2;

if(i==1|| j==2)

System.out.println(OK);

D.

int i=1;

int j=2;

if (i==1 &| j==2)

  System.out.println(OK);

11.阅读以下代码行:

  boolean a=false;

  boolean b=true;

  boolean c=(a&&b)&&(!b)

  int result=c==false?1:2;

 

      这段程序执行完后,cresult的值是:

 A  c=false; result=1;

 B  c=true;  result=2;

 C  c=true;  result=1;

 D  c=false; result=2;

12.下列代码哪行会出错?

1) public void modify() {

2)   int i, j, k;

3)   i = 100;

4)   while ( i > 0 ) {

5)     j = i * 2;

6)     System.out.println (" The value of j is " + j );

7)     k = k + 1;

8)     i--;

9)   }

10) }

A 4

B 6

C 7

D 8

13.指出下列程序的运行结果。

       int i = 9;

  switch (i) {

    default:

      System.out.print("default");

    case 0:

      System.out.print("zero"); break;

    case 1:

      System.out.print("one");

    case 2:

      System.out.print("two");

  }

 A default

 B defaultzero

 C 编译错

 D 没有任何输出

 

以下是编程题:

1.请将11000之间的奇数输出到屏幕上。

2.判断一个整数能否同时被35整除。

3.给定3个数,找出最大一个数,并打印出来。

4.给出一百分制成绩,要求输出成绩等级’A’,’B’,’C’,’D’,’E’90分以上为’A’,80~89分为’B’,70~79分为’C’,60~69分为’D’,60分以下为’E’

5.输出图案:

          *

          **

          ***

          ****

          *

          **

          ***

          ****

6.使用for语句打印显示下列数字形式:n=4

           1

         1 2 1

       1 2 3 2 1

     1 2 3 4 3 2 1

7.请编写一个方法实现如下功能:用程序找出每位数的立方和等于该数本身值的所有的3位数。(水仙花数)

8.有一个序列,首两项为01,以后各项值为前两项值之和。请输出每一项以及序列的和。

9.将任意三个整数a,b,c按从小到大的顺序输出。

10.请编写一个方法实现如下功能:得到一个整数的绝对值。

11.请编写一个方法实现如下功能:有任意三个整数a,b,c,请输出其中最大的。

12.请编写一个方法实现如下功能:计算1加到n n>=2的整数)的总和。

13.请编写一个方法实现如下功能:将17的数字转换为星期日到星期六的字符串。

Java私塾跟我学系列——JAVA  网址:http://www.javass.cn  电话:010-68434236

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26660100/viewspace-715525/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2012-02-02

  • 博文量
    65
  • 访问量
    42785