Java语法基础.docx
- 文档编号:3990729
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:27
- 大小:386.05KB
Java语法基础.docx
《Java语法基础.docx》由会员分享,可在线阅读,更多相关《Java语法基础.docx(27页珍藏版)》请在冰豆网上搜索。
Java语法基础
Java语法基础
本章目标
●标识符定义
●Java数据类型
●参数传递,基本数据类型参数,引用类型参数
●对象实例化和成员的访问
●变量作用域及程序中逻辑控制
基本语法元素
注释
注释是程序员用来标记,说明程序的,编译器会忽略注释中的内容,注释中的内容不会对程序的运行产生任何影响。
Java语言允许三种风格的注释:
//单行注释:
用于对属性,变量以及算法重要转折时的提示。
/*多行注释*/:
多用于对类、方法及算法的详细说明,一般在对类的注释中要有以下内容:
1、类的简要说明
2、创建者及修改者
3、创建日期或最后修改日期
/**Java文档注释*/:
产生Java文档,使用javadoc命令。
分号:
在Java编程语言中,语句是一行由分号(;)终止的代码。
例如:
total=a+b+c+f;
语句块(block)
语句块(block)也叫做复合语句。
一个语句块(block)是以上括号和下括号{}为边界的语句集合,语句块也被用来组合属于某个类的语句,例如:
语句块可被嵌套。
以前见到的main方法就是一个语句块,它是一个独立单元。
下面的语句是合法的:
还有一种静态语句块,这个将在学习static关键字时介绍。
空白
空白:
是空格、tabs和新行(换行符)的统称。
在源代码元素之间允许插入任意数量的空白,空白可以改善源代码的视觉效果,增强源代码的可读性。
例如:
你
标识符定义
标识符是语言元素的名称,是在程序中表示变量、类或方法等的符号。
●标识符由字母、下划线(_)、美元符号($)或数组组成,但不能以数字开头,另外可以使用中文做标识符,但实际中不推荐这样做。
●标识符是大小写敏感(区分大小写的)。
●标识符未规定最大长度,但实际中不会对标识符命名过长,10个字符以内合适,标识符的命名尽可能的有意义。
下列标识符是有效的:
indexNamer_index_index$index
Java技术源程序采用双字节的“统一字符编码”(Unicode,使用16bit编码),而不是单字节的ASCII(使用8bit)文本。
因而,一个字母有着广泛的定义,而不仅仅是a到z和A到Z。
标识符不能是关键字,但它可以包含一个关键字作为它的名称的一部分。
例如:
thisOne是一个有效标识符,但this却不是,因为this是一个Java关键字。
Java关键字
下面列出了在Java编程语言中使用的关键字:
abstract
do
implements
private
throw
boolean
double
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
default
if
package
this
关键字对Java技术编译器有特殊的含义,它们可标识数据类型名或程序构造(Construct)名。
以下是有关关键字的重要注意事项:
●true、false和null为小写,而不是像在C++语言中那样为大写。
●无sizeof运算符,所有类型的长度和表示是固定的,不依赖执行。
●goto和const不是Java编程语言中使用的关键字。
Java的基本数据类型
Java编程语言定义了8种原始数据类型:
类型
位数
默认值
逻辑类型
boolean
1bit
False
文本类型
char
16bit(2byte)
‘\u0000’
整数类型
byte
8bit(1byte)
0
short
16bit(2byte)
0
int
64bit(8byte)
0
long
64bit(8byte)
0
浮点类型
float
32bit(4byte)
0.0
double
64bit(8byte)
0.0
注意:
整数类型默认的是int,浮点类型默认的是double。
逻辑类型---boolean
逻辑类型的值有两种状态,即经常使用的true和false。
这样的值是用boolean类型来表示的。
boolean有两个文字值,即true和false。
以下是一个boolean类型变量的声明与初始化:
booleanflag=false;//声明一个类型为boolean的变量,并为假。
注意:
在整数类型和boolean类型之间无转换计算,有些语言(特别是C和C++)允许将数字值转换成逻辑值,在Java语言中是不允许的;boolean类型只允许使用boolean值。
文本类型---char
使用char类型可表示单个字符,一个char代表一个16-bit无符号的(不分正负的)Unicode字符,一个char文字必须包含在单引号内(‘’)。
'a'
'\t'一个制表符
'\u?
?
?
?
'一个特殊的Unicode字符,?
?
?
?
应严格按照四个16进制数字进行替换,例如:
'\u03A6'表示希腊字母“φ”。
char类型变量的声明和初始化如下所示:
charc='A';//声明并初始化一个char类型变量
charc1,c2;//声明两个char类型变量
char是int兼容的类型,比如可以如下声明:
inta='A';//a=97
charc=65;//c='A'
字符串类---String
String不是原始类型,而是一个类(class),它被用来表示字符序列,字符本身符合Unicode标准,与C和C++不同,String不能用\0作为结束。
String的文字应用双引号封闭,如下所示:
"Iamteacher,ILoveyour"
String类型变量的声明和初始化如下所示:
//声明了两个String变量并初始化
Stringstr="Iamteacher\n";
Stringname="hisisstudent!
";
Stringstr1,Str2;//声明了两个String变量
整数类型---int、short、long、byte
在Java编程语言中有四种整数类型,它们分别使用关键字int、short、long和byte的任意一个进行声明。
整数类型的文字可使用十进制、八进制和16进制表示,如下所示:
十进制值是2
首位的0表示这是一个八进制的数值
0xBAAC首位的0x表示这是一个16进制的数值
注意:
所有Java编程语言中的整数类型都是带符号的数字
整数类型数字默认为int类型。
整数类型数字后面紧跟着一个字母“L”,可以强制它为long类型。
例如:
2L十进制值是2,是一个long
077L首位的0表示这是一个八进制的数值
0xBAACL前缀0x表示一个16进制的数值
四种整数类型的长度和范围前面已经列出,这些长度和范围是按Java编程语言规范定义的,不是依赖于平台。
浮点类型---float和double
如果一个数字包括小数点或指数部分,则该数字默认为double类型浮点数。
例如:
3.143.02E23
如果一个数字文字后带有字母F或f,则该数字文字为float类型浮点数。
例如:
1.34F
如果一个数字文字后带有字母D或d,则读取数字文字为double类型浮点数。
例如:
123.4E-306D
浮点变量可用关键字float或double来声明。
Java技术规范的浮点数的格式是由电子工程师学会(IEEE)754定义的,是独立于平台的。
变量的声明和赋值
变量用来存储信息。
一个变量代表一个特殊类型的存储位置,它指向内存的某个单元,而且指明这块内存有多大。
变量的值可以是基本数据类型,也可以是对象类型。
下列程序显示了多种类型的变量,如何进行声明及赋值的。
引用类型(referencetype)
从大的范围来讲,Java语言中的数据类型就分为两种:
基本数据类型和引用数据类型,前面已经对基本数据类型进行了讲解,下面我们再来理解引用类型。
为了弥补Java语言中数据类型的不完整,Java语言使用类来创建新的类型,例如可以用以下的类来表示人:
关键字class是用来声明类的。
Person是指定了这个类的名称,height变量被声明,是Person类的一个属性,本类包含了3个属性。
Personperson1,person2;//声明Person的两个引用,引用名称为person1和person2。
person1=newPerson();//类Person构造出实际的内存空间,person1这个引用,指向这个内存空间。
person2=newPerson();//同上,因此这两个变量person1和person2都是引用类型的,并不实际存储这些数据。
创建并初始化一个对象
当任何基本数据类型(如:
int、byte、char、long、short、boolean、double、float)的变量被声明时,内存空间同时被分配,此分配属栈。
使用非基本数据类型(如:
class)变量的声明,不为对象同时分配内存空间。
事实上,使用class类型声明的变量不是数据本身,而是数据的引用(reference)。
引用可以理解为C语言的指针(Pointer),但是不能象C语言那样计算指针。
在使用引用变量之前,必须为它分配实际存储空间。
这个工作是通过使用关键字new来实现的。
例如:
Personperson;
person=newPerson();
第一个语句仅为引用分配了空间,而第二个语句则通过调用对象的构造函数Person()为对象生成了一个实例,这两个操作被完成后,Person对象的内容则可通过person进行访问。
还可以用一条语句创建并初始化一个对象:
Personperson=newPerson();
使用非基本数据类型(String)变量的声明,分两种情况:
使用Stringstr=“grade”;指向的是内存中的特殊区域,称字符串池。
而Strings=newString(),则和class变量声明的规则一致。
存储器分配和布局
在一个方法体中,做如下声明:
Personperson;
person=newPerson();
语句Personperson仅为一个引用分配存储器,存储空间中的值并没有确定。
在person=newPerson()中关键字new意味着为对象分配内存空间,并初始化。
引用类型的赋值
在Java语言中,一个被声明为类的变量,叫做引用类型变量,这是因为它正在引用一个非基本数据类型,这对赋值具有重要的意义。
请看下列代码片段
四个变量被创建,两个基本数据类型int和两个引用类型String。
x的值是7,而这个值被复制到y,x和y是两个独立的变量且其中任何一个的进一步的变化都不对另外一个构成影响。
至于s和st,只有一个String对象存在,它包含了文本“hello”,s和st均引用这个单一的对象。
将变量st重新定义,st=“world”;则新的对象world被创建,而st引用这个对象。
Java基本数据传递与引用传递
Java语言中的参数传递,都称为是传值,但传的这个值,到底是什么,这个就是需要研究的。
传递的是一个基本数据,还是一个引用,这就要仔细区别。
基本数据类型,值是在栈中,引用数据类型,值是在堆中。
例如:
输出结果如下:
可见,方法只能改变引用类型的值,而不能改变引用类型的地址和基本类型的值。
this引用
this作为一个Java关键字,有两个作用:
●代表隐含参数的调用
●调用本类的其它的构造函数
关键字this是用来指向当前对象(类实例)的,这里,this.name指的是当前对象的属性name。
例1:
例2:
例3:
下面的代码用于调用上面的代码
Java编码约定
虽然任何一个合法的标识符都可以用来当作变量、类、方法等的名称,但是Java编程语言极力推荐它的编码约定;
●classes---类名应该是名词,大小写可混用,但首字母应大写。
如:
classTestAeccess
●interface---接口(界面)名称大小写规则与类名称相同。
如:
interfaceAccount
●method---方法名称应该是动词,大小写可混用,但首字母应该小写,在每个方法名称内用大写字母将词分隔开限制使用下划线。
例如:
getName(),addUser()
●variables---所有变量都可大小写混用,但首字母应该小写,词由大写字母分隔,限制使用下划线,限制使用美元符号($)因为这个字符对内部类有特殊的含义。
如:
curremtCoustomer
变量应该代表一定含义,通过它可传达给读者使用它的用途。
尽量避免使用单个字符,除非是临时“即用即扔”的变量(如i、j、k作为循环控制变量)。
●constant---原始常量应该全部用大写字母并用下划线将词分开;对象常量可大小写混用。
如:
HEAD_COUNT,MAXIMUM_SIZE
●controlstructures---当语句是控制结构的一部分时,即使是单个语句也应该使用括号({})将语句封闭,例如:
if(condition){dosomething}else{dosomethingelse}
●spacing---每行只写一个语句并使用tab键缩格使你的代码更易读。
●comments---用注释来说明哪些不明显的代码段落;对一般注释使用//分隔符,而大段的代码可使用/*……*/分隔符,使用/**……*/将注释形成文档,并输入给javadoc以生成HTML代码文档。
变量的作用域
每个变量都有一个作用域,也就是说这个变量在哪个程序段中起作用,变量的作用域从它被声明时开始直到声明变量的代码段的结束符“}”为止,只能在变量的作用域内访问它。
如果在作用域之外访问变量,编译器将产生一个错误。
下面的实例有一定的代表性:
可以注意到,不同作用域内的变量互相不干扰,通常变量是当前最近作用域内定义的该变量,如果要引用更大作用域外的变量,则需要增加限定符,例如我们已经看到过的this。
变量初始化
在Java程序中,任何变量都必须经初始化后才能被使用。
当一个对象被创建时,实例变量在分配存储器的同时被下列初始化:
类型
默认值
类型
默认值
类型
默认值
byte
0
short
0
int
0
long
0L
float
0.0f
double
0,0d
char
'\u0000'(NULL)
boolean
False
引用类型
null
在方法外定义的变量被自动初始化,局部变量必须在使用之前做“手工”初始化。
如果编译器能够确认一个变量在初始化之前被使用的情况,编译器将报错。
表达式
其实我们不知不觉中一直在使用表达式。
表达式是执行时返回一个值的语句。
表达式可以是一个文字、变量、方法或用运算符连接的文字、变量、方法。
例如:
运算符的优先级
Java支持一元和二元运算符。
一元运算符对单一的操作数起作用,二元运算符对两个操作数起作用。
假如没有运算符优先级规则的限制,下面的表达式可能得出几种不同的结果。
下表按优先级顺序列出了各种运算符:
优先级
结合性
运算符
描述
1
不适用
()
括号:
强制次序
2
从右至左
++--
前/后增减1(一元)
从右至左
+-
加法、减法(一元)
从右至左
-
一元按位逻辑非
逻辑求补(一元)
从右至左
!
逻辑非
从右至左
(类名)
类型转换
3
从左至右
*/%
乘法、除法、求余
4
从左至右
+-
加法、减法
5
从左至右
<<
左移
>>
右移(符号扩展)
>>>
右移(零扩展)
6
从左至右
<<=
小于、小于等于
>>=
大于、大于等于
instanceof
该类的一个实例对象
7
从左至右
==!
=
相等、不相等
8
从左至右
&
按位与
9
从左至右
∧
按位异或
10
从左至右
|
按位或
11
从左至右
&&
与
12
从左至右
||
或
13
从右至左
?
:
三元条件
14
从右至左
=
赋值
15
从右至左
+=/=%=*=-=<<=>>=>>>=&=^=|=
赋值并运算
关于++i和i++;例如:
逻辑表达式
位运算
Java语言支持整数数据类型的位运算,它们的运算符~、﹠、∧和|分别表示位运算的NOT(为求反)、位AND、为XOR和为OR。
例如:
7&5=5
-7&5=1
00000000000000000000000000000111
00000000000000000000000000000101
00000000000000000000000000000101
11111111111111111111111111111001
00000000000000000000000000000101
00000000000000000000000000000001
7|5=7
-7|5=-3
00000000000000000000000000000111
00000000000000000000000000000101
00000000000000000000000000000111
11111111111111111111111111111001
00000000000000000000000000000101
11111111111111111111111111111101
~7=-8
~-7=6
00000000000000000000000000000111
11111111111111111111111111111000
11111111111111111111111111111001
00000000000000000000000000000110
7^5=2
-7^5=-4
00000000000000000000000000000111
00000000000000000000000000000101
00000000000000000000000000000010
11111111111111111111111111111001
00000000000000000000000000000101
11111111111111111111111111111100
逻辑运算符
运算符&&(定义为AND)和||(定义为OR)执行布尔逻辑表达式。
请看下面的例子:
字符串连接
运算符+能够进行String对象的链接并生成一个新的String:
最后一行的结果是:
如果+运算符中有一个自变量为String对象,则其它自变量将被转换成String。
所有对象都可被自动转换成String,尽管这样做的结果肯能是意义含糊的。
不是串的对象是通过使用toString()成员函数而转换成串的等价的。
位移运算符
右位移运算符>>和>>>
Java语言提供了两种位移运算符。
运算符>>进行算术或符号右移位。
移位的结果是第一个操作数被2的幂来除,而指数的值是由第二个数给出的。
例如:
-7>>3=-1
-7<<3=-56
11111111111111111111111111111001
11111111111111111111111111111111
11111111111111111111111111111001
11111111111111111111111111001000
其结果与-7/(2*2*2)完全相同
其结果与-7*2*2*2完全相同
7>>3=0
-7>>>3=536870911
00000000000000000000000000000111
00000000000000000000000000000000
11111111111111111111111111111001
00011111111111111111111111111111
其结果与7/(2*2*2)完全相同
无符号右移位运算符>>>主要作用于位图。
而不是一个值的算术意义;它总是将零置于最高位。
注意:
如果移位运算符左侧操作数是int类型,将它们右侧的操作数模32。
如果移位运算符左侧操作数是long类型,将它们右侧的操作数模64。
>>>运算符仅被允许用于整数类型,并且仅对int和long值有效。
如果用在short或byte值上,则在应用>>>之前,该值将通过带符号的向上类型转换被升级为一个int。
有鉴于此,无符号移位通常已成为符号移位。
左移位运算符(<<)
运算符<<执行一个左移位,移位的结果是:
第一个操作数乘以2的幂,指数的值是由第二个操作数给出的。
例如:
128<<1等价于128*21=256
16<<2等价于16*22=64
无论正数、负数,它们的右移、左移、无符号右移32位都是其本身,比如-7<<32=-7、-7>>32=-7、-7>>>32=-7。
把1左移31位再右移31位,其结果为-1
00000000000000000000000000000001
10000000000000000000000000000000
11111111111111111111111111111111
类型转换
在赋值的信息可能丢失的地方,编译器需要程序员用类型转换(typecast)的方法确认赋值。
例如,它可以“挤压”一个long值到一个int变量中。
显示转换类型的做法如下:
longvalue=99L;intintValue=(int)value;
在上述程序中,期待的目标类型被放置在圆括号中,并被当作
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 语法 基础