java的命名规则
- 1、java中定义类名时,在实际工作中要求类名必须以大写字母开头,后者可以跟字母和数字的任意组合。(用小写字母或下划线或$或汉字开头也不会错,这里必须这是人为规定的,并不代表会报错或运行异常,变量方法也是,都是为了方便其他都不提倡,变量名,方法名也一样都是最提倡的做法)
- 2、java中变量名必须是一个以字母开头的由字母和数字构成的序列。
- 3、java对大小写敏感,书写时一定要注意区分大小写。如果出现大小写拼写错误(如将main写成Main),那么程序将无法运行。
- 4、java中方法名首字母小写,第二个单词开始大写且为动词。
- 5、常量名习惯使用大写,单词之间用下划线连接。
注释
在java中有三种写注释的方式:
- 行注释:
//,其注释内容从//开始到本行末结束。
- 块注释:
/**/当需要长篇的注释时,可以使用将一段比较长的注释括起来。多行注释不能嵌套使用。
- 文档注释:
/**使用结束,可以用来自动生成文档。
*
*/
注释不会出现在字节码文件中,即注释不会影响到字节码文件的大小,Java编译器编译时也会跳过注释语句。
java语言有哪些词法符号?分隔符和空白符号的区别是什么
在词法分析阶段,源代码被分解为词法符号、空白符、和注释。最终词法分析从源程序中去掉空白符号和注释,产生词法符号流。词法符号流是进一步进行词法分析的基础。词法符号有5中:关键字、标识符、文字、运算符、分隔符。
空白符主要用来分割相邻的词法符号,但其本身并不是词法符号。分隔符是一种词法符号,它除了能够分割其他词法符号以外,还有特定的语法作用和规则。
java标识符
由数字,字母和下划线(_),美元符号($)或者人民币符号“¥”组成。首字母不能是数字,在Java中是区分大小写的,而且还要求首位不能是数字。关键字不能当作标识符。驼峰式命名规则,从第二个单词开始,每个单词的首字母要大写。
注意:Java不采用通常语言使用的ASCII字符集,而是采用unicode这样的标准的国际字符集,所以这里的字母的含义:英文、汉字等等,但尽量不要用汉字来定义标识符,更不能用关键字来作为变量名和方法名,但可以是关键字与其他单词的组合形式。
代码规范
花括号应成对出现,第一个花括号应在第一行语句后面
方法后面紧跟花括号,没有空格(没有那么严格)
关键字(while、for、if)后面应留一个空格
for(int i=0; i<10; i++);即符号两边无空格,;后面有空格
int i = 10;即=两边有空格
if(i>10);符号两边无空格
if(i>10 && i<40);中间符号两边有空格
代码折行应按照代码等级对齐,运算符写在下一行
关键字
关键字:其实就是某种语言赋予了特殊含义的单词。java中关键字都是有小写字母组成
保留字:其实就是还没有赋予特殊含义,但是准备日后要使用过的单词。
java中把true、false、null作为常量对待,并不在关键字中,有些教材作为关键字对待也是可以的
常量和变量
常量:是在程序中的不会变化的数据。习惯上,常量名使用大写(小写不报错)。若是两个单词以上组成用"_"连接。
变量:其实就是内存中的一个存储空间,用于存储常量数据。(作用:方便于运算。因为有些数据不确定。所以确定该数据的名词和存储空间。特点:变量空间可以重复使用。)
什么时候定义变量?
只要是数据不确定的时候,就定义变量。
变量的类型
成员变量,局部变量,类变量,实例变量
1、方法外但在类声明定义的变量为成员变量,作用域是整个类,在方法中定义的变量为局部变量,作用域为定义的方法体中。
2、类变量是用static声明的成员变量,没有声明的为实例变量,实例变量存放在堆内存中,类变量放在方法区中,类变量也可以被对象调用,而实例变量不能用类名调用。
3、局部变量在方法调用时创建,方法执行完撤销;实例变量创建类实例时创建,实例撤销时撤销;类变量在类加载时创建,类撤销时撤销。循环语句中的定义的变量循环一次,重新定义一次所以不会有重复定义的错误。如for语句中有int a = 10;不会有错。
4、变量调用前必须初始化完成,局部变量必须显示的初始化,成员变量会分配默认值,char初始值是16位的0;
变量的声明和赋值
赋给变量一个字符串,实际上变量存储的是字符串对象的首地址,输出的时候自动调用toString方法
声明变量可以一次声明多个,如:int x,y;
可以边声明边赋值:int s = 5; int i= 5, j = 6; int x,y = 8;
可以先声明后赋值:int x; x=5;(在方法中可以或在类中用{}括起来赋值语句的代码块)
可以赋多值:x=y=5;
对成员变量的操作(赋值,运算等)必须放在方法中或代码块中,否则语法错误,如:成员变量可以声明时赋初值但不能声明后在类中赋值。
实例成员变量会被赋默认值,final的实例成员变量不会被赋默认值
变量空间的开辟需要什么要素呢?
数据类型。变量名称。变量的初始化值。
变量的作用域和生存期:
变量的作用域:作用域从变量定义的位置开始,到该变量所在的那对大括号结束;
生命周期:变量从定义的位置开始就在内存中活了;变量到达它所在的作用域的时候就在内存中消失了;
生存周期:静态变量由类来决定,成员变量由对象来决定,局部变量用{}来界定。
变量的数据类型
8个基本数据类型:
byte、short、int、long、float、double、char、boolean
- 基本数据类型:它们存储的都是数据量比较小的数据,只需要1个或几个字节就可以了,因此,这些数据类型的变量的二进制值就直接保存着它们的值。
基本数据类型取值范围:
- byte一个字节
- char(两个字节无符号unicode编码0—2^16-1),
- short两个字节带符号(-2^15—2^15-1),
- int四个字节(-2^31 — 2^31-1),
- float四个字节,
- long,double八个字节,
- boolean(存储大小跟虚拟机有关,java中整型值和布尔值之间不能进相互转换)
取值范围计算方法
以int为例:
占用4个字节,4x8=32位;
最高位为符号位,最大值就是011111共31个1,也就是2^31-1;
最小值就是100000共31个0,也就是2^31加个负号。
类型转换
级别从低到高为:byte,char,short(这三个平级)-->int-->float-->long-->double
自动类型转换:从低级别到高级别,系统自动转的;因为是高位扩展不存在转换风险
强制类型转换:什么情况下使用?把一个高级别的数赋给一个别该数的级别低的变量;
+=这样的运算包含了一个隐含的强转转换。要舍弃高位存在风险
byte b = 3; b = (byte)(b*3); b*3自动转换成int型用(byte)强制向高级转换。
long a = 6; 6为int型自动转换成long型
int smallval = 99L; 99L是long型,非法
double z = 12.1f; float型自动转换成double型
float z1 = 12.414;12.414是double型,非法
int a; double b = 3.14; a = (int)b; 将b值转换成int型,b的值仍然是3.14 double型
浮点型强转其他类型,都是先舍弃小数,转换为int型再转为其他类型,如果的得到的整数大于int类型的最大值,就会赋于其int类型的最大值,再进行转换
char b = 97;得到b值为a用的是ASCII值
int b = 'a';得到b值为97
'a'+1的值是98
如果低级类型为char型,向高级类型(整型)转换时,会转换为对应ASCII码值,再做其它类型的自动转换。char转int可以自动也可以强制
char a = 'u0022';得到b值为",先转换ASCII码值再转换
int a = 'u0022';得到a值为34
任何数和字符串相加都结果都为字符串。
short s1 = 1; s1 = s1 + 1;编译器报错,s1+1值为int型,再给short型需显示转换
short s1 = 1; s1 += 1;可以正确编译,隐含有强制转换等价于:s1 = (short)(s1+1),
char a = 'u005'; a == 0x0005L;为true.双目算术也会转换
byte i = 1; i+1为int型,i++为byte型,true? 12:i;结果为byte型
3个引用数据类型:
数组、类、接口。(引用类型大小统一为4个字节,记录的是引用对象的地址)
null可以作为任何引用类型数据,如返回要Person类型返回null就不错。
- 引用数据类型:主要用来指向某个对象,对象保存的数据一般都比较大,如果在传递参数、赋值等工作的时候,每次都把数据完全拷贝一次会影响到效率,因此定义成一种引用类型,引用类型变量的值存放的是数据的地址。
- 对象一般是通过new语句创建出来的,它保存在堆空间中,可以被多个引用类型的变量所引用
后缀
long:数值以l或L结尾,
float:数值以f或F结尾,
double:数值以d或D结尾或为浮点数值时不加。
字面量
整型字面量常量是32位的int型
默认的浮点字面量常量是64位的double型,但像byte b=1;float f=1.0;当一个字面量的值被赋给一个byte 或short型的变量时,如果字面量的值没有超过对应类型的范围时不会产生错误。
浮点型运算的弊端
浮点型的数据直接用运算符进行运算会损失精度,可以:
BigDecimal a=new BigDecimal(1.0);
或者BigDecimal a=BigDecimal.valueOf(1.0);
BigDecimal b=new BigDecimal(2.7);
a=a.add(b);
System.out.println(a.doubleValue())//不加doubleValue()方法还不能精确
减法用a=a.subtract(b),乘法用a=a.multiply(b),除法用a=a.divide(b, 2,BigDecimal.ROUND_HALF_UP);2表示精确的位数,能除尽a=a.divide(b)也行
boolean类型数据
c/c++中会有0代表false,非0代表true,这样可以让程序带来高效,但也带来一定的危险性。
java出于安全考虑,限制了这样的做法,只能用true和false来代表真假。
boolean和Boolean比较
boolean是基本数据类型,Boolean是类。
boolean有true和false两种值,Boolean除了true和false还有null
java5.0.之前,不能把Boolean用于条件语句,需要转换为boolean以后再使用。
char数据类型
java中的char采用的Unicode编码格式,2个字节表示一个字符
尽管char可以表示的数值有那么多,但事实上并非每个数值都对应一个字符
char可以和int,short,long整型进行类型转换,是因为它们本质上都是以二进制整型的形式进行存储的。
转义字符
一些特殊的字符不能用一个特定的数字、字母或符号表示、例如:换行符、制表符、双引号等,为了表示这些特殊的字符,需要引入转义字符的概念。
所有的计算机语言都无法回避转义字符的概念,它们都统一用反斜杠来表示转义。
使用””来代表转义,它与紧跟它后面的字符组成转义字符,达到转义目的。
表2-3 Java中常用的转义字符
转义序列 |
字符名称 |
Unicode 编码 |
' |
单引号 |
0x0027 |
" |
双引号 |
0x0022 |
\ |
反斜杠 |
0x005C |