1.注释、标识符、关键字/保留字、变量、常量
注释:
为了方便程序的阅读,Java语言允许程序员在程序中写上一些说明性的文字,用来提高程序的可读性,这些文字性的说明就称为注释。注释不会出现在字节码文件中,即Java编译器编译时会跳过注释语句。在Java中根据注释的功能不同,主要分为单行注释、多行注释和文档注释。
单行注释
单行注释使用“//”开头,“//”后面的单行内容均为注释。
多行注释
多行注释以“/”开头以“/”结尾,在“/”和“/”之间的内容为注释,我们也可以使用多行注释作为行内注释。但是在使用时要注意,多行注释不能嵌套使用。
文档注释
文档注释以“/**”开头以“*/”结尾,注释中包含一些说明性的文字及一些JavaDoc标签(后期写项目时,可以生成项目的API)
标识符:
标识符是用来给变量、类、方法以及包进行命名的,如Welcome、main、System、age、name、gender等。标识符需要遵守一定的规则:
标识符必须以字母、下划线_、美元符号$开头。
标识符其它部分可以是字母、下划线“_”、美元符“$”和数字的任意组合。
Java标识符大小写敏感,且长度无限制。
标识符不可以是Java的关键字。
标识符的使用规范:
表示类名的标识符,每个单词的首字母大写,如Man,GoodMan
表示方法和变量的标识符,第一个单词小写,从第二个单词开始首字母大写,我们称之为“驼峰原则”,如eat(),eatFood()。
Java不采用通常语言使用的ASCII字符集,而是采用Unicode这样标准的国际字符集。因此,这里字母的含义不仅仅是英文,还包括汉字等等。但是不建议大家使用汉字来定义标识符!
关键字/保留字
Java关键字是Java语言保留供内部使用的,如class用于定义类。关键字也可以称为保留字,它们的意思是一样的,我们不能使用关键字作为变量名或方法名。
变量:
变量作为程序中最基本的存储单元,其要素包括变量名,变量类型和作用域。变量在使用前必须对其声明,只有在变量声明以后,才能为其分配相应长度的存储空间。
变量的声明格式:
1 type varName[=value][,varName[=value]...];
2 //[]中的内容为可选项,即可有可无
3 数据类型 变量名[=初始值][,变量名[=初始值]...]
注意:
每个变量都有类型,类型可以是基本类型,也可以是引用类型。
变量名必须是合法的标识符?变量声明是一条完整的语句,因此每一个声明都必须以分号结束。
变量的分类和作用域
从整体上可将变量划分为局部变量、成员变量(也称为实例变量)和静态变量。
局部变量(local variable)
方法或语句块内部定义的变量。生命周期是从声明位置开始到到方法或语句块执行完毕为止。局部变量在使用前必须先声明、初始化(赋初值)再使用。
成员变量(也叫实例变量member variable)
方法外部、类的内部定义的变量。从属于对象,生命周期伴随对象始终。如果不自行初始化,它会自动初始化成该类型的默认初始值
静态变量(类变量static variable)
使用static定义。从属于类,生命周期伴随类始终,从类加载到卸载。(注:讲完内存分析后我们再深入!先放一放这个概念!)如果不自行初始化,与成员变量相同会自动初始化成该类型的默认初始值。
常量(Constant)
常量通常指的是一个固定的值,例如:1、2、3、’a’、’b’、true、false、”helloWorld”等。
在Java语言中,主要是利用关键字final来定义一个常量。常量一旦被初始化后不能再更改其值。
声明格式为:
final type varName = value;
2.基本数据类型、运算符、数据类型转换
基本数据类型(primitive data type)
Java是一种强类型语言,每个变量都必须声明其数据类型。Java的数据类型可分为两大类:基本数据类型(primitivedatatype)和引用数据类型(referencedatatype)。
Java中定义了3类8种基本数据类型
1、数值型-byte、short、int、long、float、double
2、字符型-char
3、布尔型-boolean
注意:
引用数据类型的大小统一为4个字节,记录的是其引用对象的地址!
整型:
整型用于表示没有小数部分的数值,它允许是负数。整型的范围与运行Java代码的机器无关,这正是Java程序具有很强移植能力的原因之一。与此相反,C和C++程序需要针对不同的处理器选择最有效的整型。
类型 占用存储空间
表数范围
byte 1字节 -27~27-1(-128~127)
short 2字节 -215~215-1(-32768~32767)
int 4字节 -231~231-1(-2147483648~2147483647)约21亿
long 8字节 -263~263-1
3.Java语言整型常量的四种表示形式
1、十进制整数,如:99,-500,0
2、八进制整数,要求以0开头,如:015
3、十六进制数,要求0x或0X开头,如:0x15
4、二进制数,要求0b或0B开头,如:0b01110011
注意: Java语言的整型常数默认为int型,声明long型常量可以后加‘l’或‘L’;
浮点型(Floating Point Number)
带小数的数据在Java中称为浮点型。浮点型可分为float类型和double类型。
float类型又被称作单精度类型,尾数可以精确到7位有效数字,在很多情况下,float类型的精度很难满足需求。而double表示这种类型的数值精度约是float类型的两倍,又被称作双精度类型,绝大部分应用程序都采用double类型。
float类型的数值有一个后缀F或者f,没有后缀F/f的浮点数值默认为double类型。也可以在浮点数值后添加后缀D或者d,以明确其为double类型。
注:浮点类型float,double的数据不适合在不容许舍入误差的金融计算领域。如果需要进行不产生舍入误差的精确数字计算,需要使用BigDecimal类。
字符型
字符型在内存中占2个字节,在Java中使用单引号来表示字符常量。例如’A’是一个字符,它与”A”是不同的,”A”表示含有一个字符的字符串。
char类型用来表示在Unicode编码表中的字符。Unicode编码被设计用来处理各种语言的文字,它占2个字节,可允许有65536个字符。
Unicode具有从0到65535之间的编码,他们通常用从’\u0000’到’\uFFFF’之间的十六进制值来表示(前缀为u表示Unicode)。
Java语言中还允许使用转义字符‘\’来将其后的字符转变为其它的含义。常用的转义字符及其含义和Unicode值如下表所示:
注:String类,其实是字符序列(charsequence),本质是char字符组成的数组。
boolean型
boolean类型有两个常量值,true和false,在内存中占一个字节或4个字节,不可以使用0或非0的整数替代true和false,这点和C语言不同。boolean类型用来判断逻辑条件,一般用于程序流程控制。
运算符(operator)
算术运算符中+,-,*,/,%属于二元运算符,二元运算符指的是需要两个操作数才能完成运算的运算符。其中的%是取模运算符,就是我们常说的求余数操作。
二元运算符的运算规则:
整数运算:
如果两个操作数有一个为long,则结果也为long。
没有long时,结果为int。即使操作数全为short,byte,结果也是int。
浮点运算:
如果两个操作数有一个为double,则结果为double。
只有两个操作数都是float,则结果才为float。
取模运算:
其操作数可以为浮点数,一般使用整数,结果是“余数”,“余数”符号和左边操作数相同,如:7%3=1,-7%3=-1,7%-3=1。
算术运算符中++(自增),--(自减)属于一元运算符,该类运算符只需要一个操作数。
复制代码
1 int a=3;
2 int b=a++;//执行完后,b=3。先给b赋值,再自增。System.out.println("a="+a+"\nb="+b);
3 a=3;
4 b=++a;//执行完后,b=4。a先自增,再给b赋值
5 System.out.println("a="+a+"\nb="+b);
6
7 //运行结果
8 a=4 9 b=310 a=411 b=4
关系运算符
关系运算符用来进行比较运算,如下表所示。关系运算的结果是布尔值:true/false;
运算符 | 描述 | 例子 |
---|---|---|
== | 检查如果两个操作数的值是否相等,如果相等则条件为真。 | (A == B)为假。 |
!= | 检查如果两个操作数的值是否相等,如果值不相等则条件为真。 | (A != B) 为真。 |
> | 检查左操作数的值是否大于右操作数的值,如果是那么条件为真。 | (A> B)为假。 |
< | 检查左操作数的值是否小于右操作数的值,如果是那么条件为真。 | (A <B)为真。 |
>= | 检查左操作数的值是否大于或等于右操作数的值,如果是那么条件为真。 | (A> = B)为假。 |
<= | 检查左操作数的值是否小于或等于右操作数的值,如果是那么条件为真。 | (A <= B)为真。 |
注意:
1、=是赋值运算符,而真正的判断两个操作数是否相等的运算符是==。
2、==、!=是所有(基本和引用)数据类型都可以使用。
3、>、>=、<、<=仅针对数值类型(byte/short/int/long,float/double以及char)。
逻辑运算符
Java中的逻辑运算符如下表所示。逻辑运算的操作数和运算结果都是boolean值。
&& 称为逻辑与运算符。当且仅当两个操作数都为真,条件才为真。 (A && B)为假。
| | 称为逻辑或操作符。如果任何两个操作数任何一个为真,条件为真。 (A | | B)为真。
! 称为逻辑非运算符。用来反转操作数的逻辑状态。如果条件为true,则逻辑非运算符将得到false。 !(A && B)为真。
注意:短路与和短路或采用短路的方式。从左到右计算,如果只通过运算符左边的操作数就能够确定该逻辑表达式的值,则不会继续计算运算符右边的操作数,提高效率。
1 //1>2的结果为false,那么整个表达式的结果即为false,将不再计算2>(3/0)
2 boolean c=1>2&&2>(3/0);
3 System.out.println(c);
4 //1>2的结果为false,那么整个表达式的结果即为false,还要计算2>(3/0),0不能做除数,会输出异常信息
5 boolean d=1>2&2>(3/0);
6 System.out.println(d);
位运算
符位运算指的是进行二进制位的运算,常用的位运算符如下表所示:
1 int a=322;
2 int b=3<<2;//相当于:322;
3 int c=12/2/2;
4 int d=12>>2;//相当于12/2/2;
注意:
1、&和|既是逻辑运算符,也是位运算符。如果两侧操作数都是boolean类型,就作为逻辑运算符。如果两侧的操作数是整数类型,就是位运算符。
2、不要把“^”当做数学运算“乘方”,是“位的异或”操作。
字符串连接符
“+”运算符两侧的操作数中只要有一个是字符串(String)类型,系统会自动将另一个操作数转换为字符串然后再进行连接。
1 int a=12;
2 System.out.println("a="+a);//输出结果:a=12
条件运算符
语法格式:
x?y:z
其中x为boolean类型表达式,先计算x的值,若为true,则整个运算的结果为表达式y的值,否则整个运算结果为表达式为z的值
运算符优先级
注意:
1、不需要去刻意的记这些优先级,表达式里面优先使用小括号来组织!
2、逻辑与、逻辑或、逻辑非的优先级一定要熟悉!(逻辑非>逻辑与>逻辑或)。如:a||b&&c的运算结果是:a||(b&&c),而不是(a||b)&&c
自动类型装换
自动类型转换指的是容量小的数据类型可以自动转换为容量大的数据类型。如下图所示,红色的实线表示无数据丢失的自动类型转换,而虚线表示在转换时可能会有精度的损失。
强制类型转换
强制类型转换,又被称为造型(cast),用于强制的转换一个数值的类型。在有可能丢失信息的情况下进行的转换是通过造型来完成的,但可能造成精度降低或溢出。
语法格式:
(type)var
运算符“()”中的type表示将值var想要转换成的目标数据类型。
注:当将一种类型强制转换成另一种类型,而又超出了目标类型的表数范围,就会被截断成为一个完全不同的值。
1 //强制类型装换特例
2 int x=300;
3 byte bx=(byte)x;//值为44
注:不能在布尔类型和任何数值类型之间做强制类型转换。