今天白天累了个半死,晚上上课都打磕睡了,不过还是开始今天的流水帐吧,呵呵,
Java语言的基础
任何程序设计语言,都是由语言规范和一系列开发库组成的,例如C等等,Java也不例外,也是Java语言规范和Java开发包组成的。学习任何语言都要从这两方面着手,尤其是能熟练的掌握后者。
Java语言规范主要包括6点:
Ø Java基本元素
Ø Java数据类型
Ø Java结构
Ø Java控制语句
Ø Java类定义规范
Ø Java数组
Java语言基本元素:
一、标识符(Identifier):是用来给Java语言各种名称命名时的命名记号,如:变量名、常量名、类名、方法名。。。等等。
标识符只能由字母(a,B,因为是16位UNICODE,字母不局限于a-z,以及A-Z,汉字也属于字母)、下划线(_)和美元符号($,尽量不要用)三种来开头,后边才可以有数字,以及前面三种(其它的原则上是不行的,至少考试时要这样认为)。可是经过实验,Java的标识符是支持UNICODE的,也就各国文字都应该可以,至少汉字是可以的。标识符区分大小写,但不限制长度。
虽然标识符可以使用非ASCII字符,但使用UNICODE要注意以下两点:
n UNICODE可以识别看起来一样的不同字符
n 大多数文件系统不支持UNICODE,类名最好还是用ASCII字符
二、保留字(Reserved word):Java共有49个关键字,在各种资料上都有,以后见一个记一个就行了.
注意:
n 在Java中,ture,false,null都是小写的,而且Java区别大小写,因此前边的几个单词大写的与关键字没有关系。
n Java中所有数据类型的字节都是固定的,并且与实现无关,因此没有SIZEOF.操作符。
n Java语言中有有两个保留但不使用的关键字:goto和const
Java数据类型:
数据类型(Data Type):
一、基本数据类型(Primary Date Type):
基本数据类据类型又分为三大类:Boolean、Char、Numeric(数字型),所有基本数据类型在占有的位数都是固定的,不随着操作系统和硬件的变化而改变。所有基本数据类型的关键字都是小写的。
BOOLEAN型:只有true和false两个值,且它们不对应任何整数值,它们只能参与逻辑关系运算。
Char型:代表16位(二进制位)的UNICODE字符,即占用2个字节,常量只能是用单引号‘’括起来的一个字符。字符型的取值范围为:0~65535(0~2
-1可以象整数一样给他一个值,按UNICODE编码来显示)或者说\u0000~\uFFFF,\u0000是缺省值,即空格。可以用转义序列,有些资料给出了用反斜杆\来表示一个特殊的字符和符号。
数字型又包括整型(byte,short,int,long)和浮点数(double和float)两大类。
整型:整型常量(我认为字面量更准确一点)可以有三种形式表示:以0开头表示8进制,以0x或0X开头的16进制(是零),以及10进制, 但最终输出的仍然是以10进制方式。但在整型常量(字面量)被默认为是int型的。Java中所有整型总是带符号的,Java规范定义的整型范围表示为2的补码,并独立于平台。
byte型:8位(二进制位),即1byte。取值范围在-2 ~2 -1,即-128~127
Short型:16位,即2byte,取值范围在-2 ~2 -1,即-128~-127之间。
Int型:32位占4byte,取值范围在-2 ~2 -1,即-2 147 483 648~2 147 483 647之间。
Long型:64位占8byte,取值范转在-2 ~2 -1,即-9 223 372 036 854 775 808~9 223 372 036 854 775 807之间,在定义变量时可以后跟L也可跟l,也可以不跟,但最好不要用小写容易混淆如1l,带有l或L的数值无论其实际范围怎样,都被认为是L型的。
浮点型(实型):又被分为float(单精度)和double(双精度)型两种,如果一个数字包括十进制浮点或指数部分(字母E或e),以及以f(F)或d(D)结尾,则它就是浮点数了,浮点数常量的默认类型为double型,即除非被声明是float型的,否则都认为是double型的,Java规范定义的浮点数格式是由电气和电子工程师协会(IEEE)754规范制定的,该格式独立于平台。
Float型:32位占4byte,取值范围为-3.4E38~3.4E38,精度大约为7位有效数字。
Double型,64位占8个字节,取值范围为-1.7E308~1.7E308,数值近似精确到17位,可得到最小非零值大约是 4.9E-324,最后这一句来自(编程指南),“大约”是什么意思?以及这样一个结论是怎么得出的,与规范的取值范围好象存在矛盾,现在还不清楚。
注:这里提到的E(e),是用来表示10的N次方的,如:2E5,则表示2 10 。
数据类型转换:把一种数据类型的值赋给另一种数据类型,分为自动转转和强制转换。
自动转换,也称为隐式转换,当一个表达式中存在不同数据类型的值时,系统会自动将不同类型的值转换为相同类型的值(表达式中存在的最大类型)后才进行运算,从低到高的顺序为:byte,short,char—> int —> long—> float —> double,在赋值语句中,两边类型不同时,只要不丢失数据信息、需要以上边这样的顺序从左到右转换时,系统都会自动的转换为更大的类型,自动转换不会存在数据损失。
强制转换,即显式转换,如果在赋值时,信息可能丢失,程序员就必须为赋值确定一个类型转换(编译器也会要求),byte,short,char—> int —> long—> float —> double,这样一个顺序,如果需要从右向左(即大的类型向小的转型)转换时,则必须强制转换,强制转换过程可能存在溢出或损失精度,在浮点数向整数转换时,是舍弃小数部分,而不是四舍五入。
注:SL275书上提到了一个赋值相容的概念,不是太理解,275的中文原句是:变量类型的大小(位的个数)至少等于表达式类型的大小时,则可以认为是赋值相容的。英文是:Expression is assignment compatible if the variable type is at least as large (the same number of bits) as the expression type.
引用(reference)数据类型:除基本数据类型之外的所有类型就是引用数据类型。引用指向一个对象在内存中的位置,在本质上说,引用是一种带有很强的完整性和安全性限制的指针,引用对象的变量就是引用变量,当你声明了一个变量时,这个变量的值总是某个对象的引用或NULL。引用型变量除了表示地址之外,还象是被引用的数据对象的缩影(还包括其它信息),引用型变量不可以运算,而且只支持有限的逻辑运算。
Java语言的结构:
运算符(操作符,Operator)和表达式(Expression)
1.运算符:
a.算术运算符:++、--、*、/、%、+、-共7个,要说的是自递(自减,这里说的是前缀,后缀最高级更高)运算符++(--),以及+、-这四个运算符的运算顺序是自右向左。但有一个问题是:a+++b=(a++)+b,为什么不是等于a+(++b)呢?而且++的优先级还要高一些?编程指南上说,++、--后缀的优先级更高,这可能就是造成,这样一个结果的原因吧。
注意:这里的+、-是属于二元操作符,是加、减的意思,另外不要忽略一元的+、-是用来表示正负的,他们的优先级仅次于(),[],后缀的++、--、
b.关系运算符(比较):<,<=,>, >=,==,!=共6个,前边的四个是一个优先级,而后边的两个是同一个等级的优先级,只能用来比较两边的数据(常量,变量,表达式均可,除boolean型之外的7种基本数据类型均可),结果只能是true或false,当两边类型不同时,系统会自动提升类型小的一边。
c.位运算符:
² 按位与“&”,操作数对应位上都为1时,就为1,否则为0
² 按位或“|”,操作数对应位上有一个为1时,就为1,仅当两位皆为0时,才为0
² 按为异或“^”,操作数对应位上相同时为0,否则为1
² 求补运算符“~”,将所有的操作数都取相反置,即0为1,1为0
国庆玩去了,才回来第二天的都没写完呢,不好意思呀