第2章 标识符 关键字 数据类型.docx

上传人:b****7 文档编号:9105198 上传时间:2023-02-03 格式:DOCX 页数:16 大小:56.89KB
下载 相关 举报
第2章 标识符 关键字 数据类型.docx_第1页
第1页 / 共16页
第2章 标识符 关键字 数据类型.docx_第2页
第2页 / 共16页
第2章 标识符 关键字 数据类型.docx_第3页
第3页 / 共16页
第2章 标识符 关键字 数据类型.docx_第4页
第4页 / 共16页
第2章 标识符 关键字 数据类型.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

第2章 标识符 关键字 数据类型.docx

《第2章 标识符 关键字 数据类型.docx》由会员分享,可在线阅读,更多相关《第2章 标识符 关键字 数据类型.docx(16页珍藏版)》请在冰豆网上搜索。

第2章 标识符 关键字 数据类型.docx

第2章标识符关键字数据类型

第二章Java中关键字和数据类型

一、Java中的标识符、关键字

标识符

1、标识符的定义

用来标识类名,变量名,方法名,类型名,数组名,文件名的有效序列称为标识符。

简单地说,标识符就是一个名字。

Java语言规定标识符由字母,下划线,美元符号和数字组成,并且第一个字符不能是数字字符。

2、标识符的命名规则:

(1.)大小写有别,例如a和A是两个变量,Boy和boy是不同的标识符

(2.).长度任意

(3.)可以任何字母开始,另外还可以以"_"和"$"开始,一般"$"是很多代码生成器用的,人工写出来的代码不鼓励"_""$"

(4.).除了第一个字符,后面可以跟任何字母,数字,_和$

3、标识符的约定

包名的约定:

Java包的名字都是由小写单词组成。

但是由于Java面向对象编程的特性,每一名Java程序员都可以编写属于自己的Java包,为了保障每个Java包命名的唯一性,在最新的Java编程规范中,要求程序员在自己定义的包的名称之前加上唯一的前缀。

由于互联网上的域名称是不会重复的,所以程序员一般采用自己在互联网上的域名称作为自己程序包的唯一前缀。

类的命名

  类的名字必须由大写字母开头而单词中的其他字母均为小写;如果类名称由多个单词组成,则每个单词的首字母均应为大写例如TestPage;如果类名称中包含单词缩写,则这个所写词的每个字母均应大写,如:

XMLExample,还有一点命名技巧就是由于类是设计用来代表对象的,所以在命名类时应尽量选择名词。

  

  例如:

Circle

方法的命名

  方法的名字的第一个单词应以小写字母作为开头,后面的单词则用大写字母开头。

  例如:

sendMessge

常量的命名

  常量的名字应该都使用大写字母,并且指出该常量完整含义。

如果一个常量名称由多个单词组成,则应该用下划线来分割这些单词。

  例如:

MAX_VALUE

参数的命名

  参数的命名规范和方法的命名规范相同,而且为了避免阅读程序时造成迷惑,请在尽量保证参数名称为一个单词的情况下使参数的命名尽可能明确。

Javadoc注释

  Java除了可以采用我们常见的注释方式之外,Java语言规范还定义了一种特殊的注释,也就是我们所说的Javadoc注释,它是用来记录我们代码中的API的。

Javadoc注释是一种多行注释,以结束,注释可以包含一些HTML标记符和专门的关键词。

使用Javadoc注释的好处是编写的注释可以被自动转为在线文档,省去了单独编写程序文档的麻烦。

  例如:

  在每个程序的最开始部分,一般都用Javadoc注释对程序的总体描述以及版权信息,之后在主程序中可以为每个类、接口、方法、字段添加Javadoc注释,每个注释的开头部分先用一句话概括该类、接口、方法、字段所完成的功能,这句话应单独占据一行以突出其概括作用,在这句话后面可以跟随更加详细的描述段落。

在描述性段落之后还可以跟随一些以Javadoc注释标签开头的特殊段落,例如上面例子中的@auther和@version,这些段落将在生成文档中以特定方式显示。

  虽然为一个设计低劣的程序添加注释不会使其变成好的程序,但是如果按照编程规范编写程序并且为程序添加良好的注释却可以帮助你编写出设计完美,运行效率高且易于理解的程序,尤其是在多人合作完成同一项目时编程规范就变得更加重要。

俗话说“磨刀不误砍柴工”,花费一点时间去适应一下Java编程规范是有好处的。

二、关键字

1、关键字就是Java语言中已经被赋予特定意义的一单词。

不可以把这类记作为名字来用。

Java的关键字有:

2、Java关键字速查表(以下关键字不允许作为名字使用)

访问控制:

private私有的

protected受保护的

public公共的

类、方法和变量修饰符

abstract声明抽象

class类

extends扩允,继承

final终极,不可改变的

implements实现

interface接口

native本地

new新,创建

static静态

strictfp严格,精准

synchronized线程,同步

transient短暂

volatile易失

程序控制语句

break跳出循环

continue继续

return返回

do运行

while循环

if如果

else反之

for循环

instanceof实例

switch开关

case返回开关里的结果

default默认

错误处理

catch处理异常

finally有没有异常都执行

throw抛出一个异常对象

throws声明一个异常可能被抛出

try捕获异常

包相关

import引入

package包

基本类型

boolean布尔型

byte字节型

char字符型

double双精度,

float浮点

int整型

long长整型

short短整型

null空

true真

false假

变量引用

super父类,超类

this本类

void无返回值

另外,java保留字goto和const

friendlysizeof不是java的关键字!

三、变量

变量是Java 程序的一个基本存储单元。

变量由一个标识符,类型及一个可选初始值的组合定义。

此外,所有的变量都有一个作用域,定义变量的可见性,生存期。

接下来讨论变量的这些元素。

3.1 声明一个变量

在Java 中,所有的变量必须先声明再使用。

基本的变量声明方法如下:

type identifier [ = value][,identifier [= value] ...] ; 

type 是Java 的基本类型之一,或类及接口类型的名字(类和接口类型在本书第1部分的后部讨论)。

标识符(identifier )是变量的名字,指定一个等号和一个值来初始化变量。

请记住初始化表达式必须产生与指定的变量类型一样(或兼容)的变量。

声明指定类型的多个变量时,使用逗号将各变量分开。

以下是几个各种变量声明的例子。

注意有一些包括了初始化。

int a, b, c; // declares three ints, a, b, and c.int d = 3, e, f = 5; // declares three more ints, initializing // d and f.byte z = 22; // initializes z.

double pi = 3.14159; // declares an approximation of pi.char x = ’x’; // the variable x has the value ’x’. 

你选择的标识符名称没有任何表明它们类型的东西。

许多读者记得FORTRAN 预先规定从I到N的所有标识符都为整型,其他的标识符为实型。

Java 允许任何合法的标识符具有任何它们声明的类型。

3.2 动态初始化

尽管前面的例子仅将字面量作为其初始值,Java 也允许在变量声明时使用任何有效的表达式来动态地初始化变量。

例如,下面的短程序在给定直角三角形两个直角边长度的情况下,求其斜边长度。

// Demonstrate dynamic initialization.

class DynInit {

public static void main(String args[]) {

double a = 3.0, b = 4.0; 

// c is dynamically initialized

double c = Math.sqrt(a * a + b * b); 

System.out.println("Hypotenuse is " + c);

}

}

这里,定义了3个局部变量a,b,c。

前两个变量a和b初始化为常量。

然而直角三角形的斜边c被动态地初始化(使用勾股定理)。

该程序用了Java 另外一个内置的方法sqrt(),它是Math类的一个成员,计算它的参数的平方根。

这里关键的一点是初始化表达式可以使用任何有效的元素,包括方法调用、其他变量或字面量。

3.3 变量的作用域和生存期

到目前为止,我们使用的所有变量都是在方法main() 的后面被声明。

然而,Java 允许变量在任何程序块内被声明。

在第2章中已解释过了,程序块被包括在一对大括号中。

一个程序块定义了一个作用域(scope )。

这样,你每次开始一个新块,你就创建了一个新的作用域。

你可能从先前的编程经验知道,一个作用域决定了哪些对象对程序的其他部分是可见的,它也决定了这些对象的生存期。

大多数其他计算机语言定义了两大类作用域:

全局和局部。

然而,这些传统型的作用域不适合Java 的严格的面向对象的模型。

当然将一个变量定义为全局变量是可行的,但这是例外而不是规则。

在Java 中2个主要的作用域是通过类和方法定义的。

尽管类的作用域和方法的作用域的区别有点人为划定。

因为类的作用域有若干独特的特点和属性,而且这些特点和属性不能应用到方法定义的作用域,这些差别还是很有意义的。

因为有差别,类(以及在其内定义的变量)的作用域将被推迟到第6章当讨论类时再来讨论。

到现在为止,我们将仅仅考虑由方法或在一个方法内定义的作用域。

方法定义的作用域以它的左大括号开始。

但是,如果该方法有参数,那么它们也被包括在该方法的作用域中。

本书在第5章将进一步讨论参数,因此,现在可认为它们与方法中其他变量的作用域一样。

作为一个通用规则,在一个作用域中定义的变量对于该作用域外的程序是不可见(即访问)的。

因此,当你在一个作用域中定义一个变量时,你就将该变量局部化并且保护它不被非授权访问和/或修改。

实际上,作用域规则为封装提供了基础。

作用域可以进行嵌套。

例如每次当你创建一个程序块,你就创建了一个新的嵌套的作用域。

这样,外面的作用域包含内部的作用域。

这意味着外部作用域定义的对象对于内部作用域中的程序是可见的。

但是,反过来就是错误的。

内部作用域定义的对象对于外部是不可见的。

为理解嵌套作用域的效果,考虑下面的程序:

// Demonstrate block scope.

class Scope {

public static void main(String args[]) {

int x; // known to all code within main 

x = 10; 

if(x == 10) { // start new scope

int y = 20; // known only to this block 

// x and y both known here.

System.out.println("x and y:

 " + x + " " + y);

x = y * 2;

}

// y = 100; // Error!

 y not known here 

// x is still known here.

System.out.println("x is " + x);

}

}

正如注释中说明的那样,在方法main() 的开始定义了变量x,因此它对于main() 中的所有的随后的代码都是可见的。

在if程序块中定义了变量y。

因为一个块定义一个作用域,y 仅仅对在它的块以内的其他代码可见。

这就是在它的块之外的程序行y=100; 被注释掉的原因。

如果你将该行前面的注释符号去掉,编译程序时就会出现错误,因为变量y在它的程序块之外是不可见的。

在if程序块中可以使用变量x,因为块(即一个嵌套作用域)中的程序可以访问被其包围作用域中定义的变量。

变量可以在程序块内的任何地方被声明,但是只有在他们被声明以后才是合法有效的。

因此,如果你在一个方法的开始定义了一个变量,那么它对于在该方法以内的所有程序都是可用的。

反之,如果你在一个程序块的末尾声明了一个变量,它就没有任何用处,因为没有程序会访问它。

例如,下面这个程序段就是无效的,因为变量count 在它被定义以前是不能被使用的。

// This fragment is wrong!

count = 100; // oops!

 cannot use count before it is declared!

int count;

另一个需要记住的重要之处是:

变量在其作用域内被创建,离开其作用域时被撤消。

这意味着一个变量一旦离开它的作用域,将不再保存它的值了。

因此,在一个方法内定义的变量在几次调用该方法之间将不再保存它们的值。

同样,在块内定义的变量在离开该块时也将丢弃它的值。

因此,一个变量的生存期就被限定在它的作用域中。

如果一个声明定义包括一个初始化,那么每次进入声明它的程序块时,该变量都要被重新初始化。

例如,考虑这个程序:

// Demonstrate lifetime of a variable.

class LifeTime {

public static void main(String args[]) {

int x; 

for(x = 0; x < 3; x++) {

int y = -1; // y is initialized each time block is enteredSystem.out.println("y is:

 " + y); // this always prints -1y = 100;System.out.println("y is now:

 " + y);

}

}

}

该程序运行的输出如下:

y is:

 -1

y is now:

 100

y is:

 -1

y is now:

 100

y is:

 -1

y is now:

 100 

可以看到,每次进入内部的for循环,y都要被重新初始化为-1。

即使它随后被赋值为100,该值还是被丢弃了。

最后一点:

尽管程序块能被嵌套,你不能将内部作用域声明的变量与其外部作用域声明的变量重名。

在这一点上,Java 不同于C和C++。

下面的例子企图为两个独立的变量起同样的名字。

在Java 中,这是不合法的。

但在C/C++ 中,它将是合法的,而且2个变量bar将是独立的。

// This program will not compile

class ScopeErr {

public static void main(String args[]) {

int bar = 1; 

{ // creates a new scope

int bar = 2; // Compile-time error – bar already defined!

}

}

}

四、数据的分类

变量存储数据是有类别之分的,就如同房间分单人间和多人间,语言分汉语、日语、英语等。

Java数据的分类如图3.2所示。

图 数据的分类

数据类型主要分为基本数据类型和引用数据类型两大类。

基本数据类型根据数据的不同又分为数值型和非数值型,数值型又有整型和浮点型之分,整型数据主要有byte、short、int、long,浮点型数据主要有float、double,非数值型数据主要有char和boolean。

引用数据类型主要有类、接口和数组。

4.1 Java中的8种基本数据类型

Java中主要有8种基本数据类型,分别是byte、short、int、long、char、boolean、float、double,具体的介绍如下。

1.boolean

boolean(布尔)型数据的数据值只有true和false两种。

boolean类型数据适用于逻辑运算,一般用于程序流程控制,boolean类型数据只允许取值true或false,不可以用0或非0的整数替代true和false。

2.char

char型(字符型)数据在内存中占用2个字节。

char型数据用来表示通常意义上的字符,例如,“charc='A';”。

Java字符采用Unicode编码,每个字符占2个字节,因而可用十六进制编码形式表示,例如,“charc1='\u0061';”。

Java语言中还允许使用转义字符'\'来将其后的字符转变为其他的含义,例如,“charc2='\n';”。

3.byte

byte型(字节型)数据在内存中占用1个字节,表示的存储数据范围为:

-128~127。

4.short

short型(短整型)数据在内存中占用2个字节,表示的存储数据范围为:

-32 768~32 767。

5.int

int型(整型)数据在内存中占用4个字节,表示的存储数据范围为-231~231-1。

6.long

long型(长整型)数据在内存中占用8个字节,表示的存储数据范围为-263~263-1。

7.float

float型(单精度浮点型)数据在内存中占用4个字节,表示的存储范围为-3.4E38~3.4E38。

8.double

double型(双精度浮点型)数据在内存中占用8个字节,表示的存储范围为-1.7E308~1.7E308。

Java浮点类型常量有如下两种表示形式。

l  十进制数形式,必须含有小数点,例如,3.14、314.0、0.314等。

l  科学记数法形式,例如,3.14e2、3.14E2、314E2等。

Java中所有的基本数据类型都有固定的存储范围和所占内存空间的大小,而不受具体操作系统的影响,以保证Java程序的可移植性。

整型数据默认为int数据类型,浮点型默认为double数据类型,如果要表示long型数据或float型数据就要在相应的数值后面加上l、L或f、F,所以定义一个长整型数据应这样写:

“longa=19999999999999L;”,定义一个float型数据应这样写:

“floatb=3.324f;”,否则会出现编译问题。

实际上在其他语言中如C语言中,字符型数据和整型数据是可以相互转换的,都是以ASCII码来存储,可以将字符型数据当整型数据来看待。

Java中常用的转义字符如表3.1所示。

表3.1 Java中常用的转义字符

转义字符

说 明

                      \b

              退格符

                      \n

              换行符

                      \r

              回车符

                      \t

              制表符

                      \’

              单引号

                      \’’

              双引号

                      \\

              反斜杠

ASCII(美国标准信息交换码)是计算机中用得最广泛的字符集及其编码,由美国国家标准局(ANSI)制定。

ASCII已被国际标准化组织(ISO)定为国际标准,称为ISO646标准。

ASCII码适用于所有拉丁文字母,它有7位码和8位码两种形式。

因为1位二进制数可以表示2(21)种状态:

0、1;而2位二进制数可以表示4(22)种状态:

00、01、10、11;以此类推,7位二进制数可以表示128(27)种状态,每种状态都唯一地编为一个7位的二进制码,对应一个字符(或控制码),这些码可以排列成一个十进制序号0~127。

所以,7位ASCII码是用7位二进制数进行编码的,可以表示128个字符。

第0~32号及第127号(共34个)是控制字符或通信专用字符,如控制符:

LF(换行)、CR(回车)、FF(换页)、DEL(删除)、BEL(振铃)等;通信专用字符:

SOH(文头)、EOT(文尾)、ACK(确认)等。

第33~126号(共94个)是字符,其中第48~57号为0~9共10个阿拉伯数字;65~90号为26个大写英文字母;97~122号为26个小写英文字母,其余为一些标点符号、运算符号等。

在计算机的存储单元中,一个ASCII码值占一个字节(8个二进制位),其最高位(b7)用作奇偶校验位。

所谓奇偶校验,是指在代码传送过程中用来检验是否出现错误的一种方法,一般分奇校验和偶校验两种。

奇校验规定:

正确的代码一个字节中1的个数必须是奇数,若非奇数,则在最高位b7添1;偶校验规定:

正确的代码一个字节中1的个数必须是偶数,若非偶数,则在最高位b7添1。

4.2 普及二进制

1.二进制

计算机中的数据都以二进制数字保存的。

二进制计算规则是:

逢二进一。

即只有0、1两个值。

例如,十进制的10在计算机内保存为二进制的1010。

计算机中信息的存储单位有如下几种。

l  位(bit):

表示一个二进制数码0或1,是计算机存储处理信息的最基本的单位。

l  字节(Byte):

一个字节由8个位组成。

它表示作为一个完整处理单位的8个二进制数码。

2.十六进制和八进制

十六进制:

因为二进制表示法太冗长,所以在程序中一般喜欢用十六进制。

基数为十六,逢十六进一。

它用a、b、c、d、e、f表示10、11、12、13、14、15。

Java中十六进制数据要以0x或0X开头。

例如,0x23D十六进制转换成二进制只需将每个十六进制数字替换为相对应的4个二进制位即可。

八进制:

0~7,八进制表示法在早期的计算机系统中很常见。

八进制适用于位数为3的倍数的计算机系统,对于现在的位数为2的幂(8位、16位、32位与64位)的计算机系统来说,八进制就不好用了。

3.补码知识

事实上,计算机内的二进制数值是以补码形式表示的。

一个正数的补码和其原码的形式是相同的。

负数的补码是将该数的绝对值的二进制形式,按位取反再加1。

由此可知,二进制补码数值的最高位(最左位)是符号位:

该位为0,表示数值为正数;该位为1,表示数值为负数。

例如:

 

   10的补码

00000000 00000000 00000000 00001010

  -10的补码

11111111 11111111 11111111 11110110

4.3 进制间的转换

由于计算机中都是以二进制形式来存储数据的,那么进制间是如何相互转换的呢?

进制的转换可以归为以下三类。

1.各种进制转为十进制

其他进制数转换为十进制数的方法为:

从右到左为这个数从0开始一位一位地标号,各个位上面的数乘以此进制数的标号次幂再求和,也就是“位权表示法”。

如:

(123.12)10=1´102+2´101+3´100+1´10-1+2´10-2

(101.10)2=1´22+0´21+1´20+1´2-1+0´2-2

(123.12)8=1´82+2´81+3´80+1´8-1+2´8-2

(12A.C)16=1´162+2´161+10´160+12´16-1

2.十进制转为各种进制

十进制数转为其他进制数的方法是:

除以此进制数取余倒排序。

以十转二为例方法为:

整数部分除2反序取余数、小数部分乘2顺序取整数。

十进制转为其他进制的方法以此类推,例如,除8反序取余法、乘8顺序取整法,除16反序取余法、乘16顺序取整

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 农学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1