《Java基础复习》—规范与基础
参考书目《Java 编程思想》所以大家放心食用
一、注释规范以及API文档
1.注释
1.1三种注释方法
- //注释内容 单行注释
- /* 注释内容 */ 多行注释
- /**注释内容*/ 文档注释
1.2WHY注释
- 对代码进行说明,增强可读性,方便自己,方便别人
- 调试代码
1.3注释注意事项
① 单行注释和多行注释,注释了的内容不参与编译。
换句话说,编译以后生成的.class结尾的字节码文件中不包含注释掉的信息
② 注释内容可以被JDK提供的工具 javadoc 所解析,生成一套以网页文件形式体现的该程序的说明文档。
③ 多行注释不可以嵌套使用
2.Java API 文档
API: Application programming interface. 应用程序编程接口
API文档:Java程序(框架、系统、项目等等)针对类库的一份说明书,类似词典
官网可以下载,进technology那个子域名
Java jdk1.8的API文档
链接:https://pan.baidu.com/s/1xnzm45xi3qkZP9osvgK5Uw
提取码:06uz
复制这段内容后打开百度网盘手机App,操作更方便哦
3.良好的编程风格
好的程序员有良好的编程习惯所写的代码,看起来很“舒服”
个人很喜欢阿里巴巴给的Java开发规范,阿里巴巴的规范要求的注释可能比较多(可能会觉得麻烦),但对于代码的合作开发等等等等是很不错的参考,并且推荐遵守
二、关键字与标识符
1.Java关键字的使用
定义:被Java语言赋予了特殊含义,用做专门用途的字符串(单词)
就是Java预先占用的关键字,不能作为开发者自己的变量名称。
关键字都为小写
关键字需要熟记,当然随着Java的学习与使用,关键字会自然的记在心中
synchronized: 利用锁的机制来实现同步的。
instanceof是Java的保留关键字,也可以叫运算符,用来在运行时指出对象是否是特定类的一个实例。instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例。
用法:
result = object instanceof class
参数:
Result:布尔类型。
Object:必选项。任意对象表达式。
Class:必选项。任意已定义的对象类。
说明:
如果 object 是 class 的一个实例,则 instanceof 运算符返回 true。如果 object 不是指定类的一个实例,或者 object 是 null,则返回 false。
2.保留字
现Java版本尚未使用,但以后版本可能会作为关键字使用。
具体哪些保留字:goto 、const
注意:自己命名标识符时要避免使用这些保留字
3.标识符
Java 中标识符是为方法、变量或其他用户定义项所定义的名称。标识符可以有一个或多个字符。
就是可以自己命名的地方
3.1标识符定义规则(重要)
- 标识符由数字(09)**和**字母(AZ 和 a~z)、美元符号($)、**下划线(_)**以及 Unicode 字符集中符号大于 0xC0 的所有符号组合构成(各符号之间没有空格)。
- 标识符的第一个符号为字母、下划线和美元符号,后面可以是任何字母、数字、美元符号或下划线。数字不能开头
另外,Java 区分大小写,因此 myvar 和 MyVar 是两个不同的标识符。
提示:标识符命名时,切记不能以数字开头,也不能使用任何 Java 关键字作为标识符,而且不能赋予标识符任何标准的方法名。
另外,希望大家养成良好命名规范,关键:命名要有实际意义,可以使用简写但是一定要能看懂意思,比如psg:passage,password就不要psd了
3.2标识符规范(重要)
标识符规范化是为了便于开发,合作,检查等等,不遵守可以运行,但是最好要遵守
这里推荐看看阿里巴巴的规范
PDF我分享在这里,也可以去官网下载
链接:https://pan.baidu.com/s/1qCJU67mwv78sM_YfLD1KgA
提取码:zwv4
复制这段内容后打开百度网盘手机App,操作更方便哦
- 包:(其实就是源代码文件夹)名字要使用纯小写 aabbcc
- 类、接口:要求首字母大写,使用驼峰式 AboutMsg
- 变量名、方法名:要求小写,驼峰式 aboutMy
- 常量名:要求大写,下划线连接 ABOUT_MY
再次强调:命名要有实际意义,适当 缩写
4.变量
4.1数据类型
详细说明:
- 整型:byte(1字节=8bit) \ short(2字节) \ int(4字节) \ long(8字节)
- byte范围:-128 ~ 127
- 声明long型变量,必须以"l"或"L"结尾 long a=456L
- 【强制】在 long 或者 Long 赋值时,数值后使用大写的 L,不能是小写的 l,小写容易跟数字 1 混淆,造成误解。 说明:Long a = 2l; 写的是数字的 21,还是 Long 型的 2? (阿里巴巴规范)
- 通常,定义整型变量时,使用int型。
- ④整型的常量,默认类型是:int型
- 浮点型:float(4字节) \ double(8字节)
- 浮点型,表示带小数点的数值
- float表示数值的范围比long还
- 定义float类型变量时,变量要以"f"或"F"结尾
- 通常,定义浮点型变量时,使用double型。
- 浮点型的常量,默认类型为:double
- 字符型:char (1字符=2字节)
- 定义char型变量,通常使用一对’’,内部只能写一个字符
- 表示方式:1.声明一个字符 2.转义字符 3.直接使用 Unicode 值来表示字符型常量
- 布尔型:boolean
- 只能取两个值之一:true 、 false
- 常常在条件判断、循环结构中使用
4.2按声明位置分类
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZO0F758a-1584118449829)(E:\notes\Java复习笔记\image-20200313141924046.png)]
4.3 自动类型转换(只涉及7种基本数据类型)
这里是不包含boolean类型的,在Java中,布尔类型boolean的值不等于0或1
另外boolean与Boolean不相同!回忆我们的命名规范,你应该知道,Boolean是一个对象,实际上是将要接触的包装类
结论:当容量小的数据类型的变量与容量大的数据类型的变量做运算时,结果自动提升为容量大的数据类型。
byte 、char 、short --> int --> long --> float --> double
特别的:当byte、char、short三种类型的变量做运算时,结果为int型
说明:此时的容量大小指的是,表示数的范围的大和小。比如:float容量要大于long的容量
字面值
布尔字面值只有两个逻辑值:
true
和false
。true
和false
的值不转换为任何数字表示。Java中的真正字面值不等于1,false字面值也不等于0.在Java中,它们只能分配给声明为boolean的变量。
4.4强制类型转换(只涉及7种基本数据类型):自动类型提升运算的逆运算。
更详细的说明在运算符章节
1.需要使用强转符:()
int a=(int)b/c;
2.注意点:强制类型转换,可能导致精度损失。
另外,有一个本人经常犯错误的点:
当从session取出数值时,转换为Integer,这里一定要注意,Integer是包装类,如果使用了强制类型转换,多半报错。涉及变量转换和是否可以为null的坑很多,一定要小心
comment.setCommentAuthorId(Integer.valueOf(subject.getPreviousPrincipals().getPrimaryPrincipal().toString()));
4.5String与8种基本数据类型间的运算
关于运算在下面字符串操作符中有讲解,相关深度的内容较后发出
- String属于引用数据类型,翻译为:字符串 ,String也是一个对象
- 声明String类型变量时,使用一对""
- String可以和8种基本数据类型变量做运算,且运算只能是连接运算:+
- 运算的结果仍然是String类型
避免:
String s = 123;//编译错误
String s1 = “123”;
int i = (int)s1;//编译错误
5.直接常量
一般情况下,如果在程序中使用了直接常量,编译器可以直接得出生成的类型,但是有时是模棱两可的,需要程序员加适当的“指导”,用与直接常量有关的某些字符来额外增加一些信息。
Ox2f
Ox2F
200L
直接常量的后缀字符标志了它的类型。
- 字母L(也可以为小写,避免混淆,不推荐)代表long
- 字母F、f代表float
- 字母D、d代表double
- 十六进制:0x开头,或0X开头,后跟0-9、a-f
- 八进制前缀0
Integer.toBinaryString()以及Long.toBinaryString()可以转化为二进制表示数字的字符串
6、指数记数法
1.9e-7的意义与数学不同,e是”10的幂次”,即1.9*10^-7
三、操作符
几乎所有的操作符都只能操作“基本类型”。例外的操作符是“=”、“==”和“!=”,这些操作符能操作所有的对象(这也是对象令人糊涂的地方)。除此以外,Sting类支持“+”和“+=”
——《Java编程思想》·
计算顺序:先乘除后加减,使用括号明确顺序,防止意外
1、算术运算符
同C语言相通,没有改变
加减乘除取余: +、-、*、/、%
自增、自减 – ++ ,注意该运算符的位置也会影响结果
But,++或者–位置不不同,也有不同的意义
这两个操作符各有两种使用方式,通常被称为“前缀式”和“后缀式”。“前缀递增”表示“++”操作符位于变量或表达式的前面;而“后缀递增”表示“++”操作符位于变量或表达式的后面。类似的,“前缀递减”意味着“–”操作符位于变量或表达式的前面;而“后缀递减”意味着“–”操作符位于变量或表达式的后面。对于前缀递增和前缀递减(如++a和–a),会先执行运算,再生成值。而对于后缀递增和后缀递减(如a–和a++),会先生成值,再执行运算
——摘录自《JAVA编程思想》
就是说,在 b=++a的情况下
或者++a=b等等情况
如果++在变量前就先给变量+1再进行运算,如果在变量后就先给变量-1再进行运算
2、赋值运算符
赋值运算符:= += -= *= /= %=
简单来说分为两类
- 直接赋值
- 计算然后赋值
直接赋值
没什么讲的,就是直接赋值 = ,还能用于对象
计算然后赋值
举例a+=2; 实质是a=a+2;相当于缩写
-= 、*=、 /= 、%=同理
注:复合运算符的运算的结果不会改变变量本身的数据类型!所以推荐使用复合运算符,如下图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UAEhll9l-1584118449830)(E:\notes\Java复习笔记\image-20200313192727846.png)]
3、关系操作符
关系操作符生成的是一个boolean(布尔)结果为真就是true,为假就是false。
大于(>)、小于(<)、等于(==)、不等于(!=)、小于或等于(<=)、大于或等于(>=)
其中的等于和不等于适用于所有的数据类型,其他的比较符不适用于boolean类型,因为boolaen类型只能为true或false
3.1、对象的等价性
看这个例子
Integer n1=new Integer(47);
Integer n2=new Integer(47);
System.out.println(n1==n2);
/*Output
false
*/
例子将两个对象进行比较,两个对象是同一种类,并且内部的信息也相同,结果却是false,为什么?
==和!=比较的是对象的引用(是否同一个对象)
如何比较对象内实际内容是否相同?
使用equals()方法,该方法不适用于基本类型!
equals()方法的默认行为是比较引用,需要我们重载方法来达到我们的需要(Integer类正是重写了这一方法)
Integer n1=new Integer(47);
Integer n2=new Integer(47);
System.out.println( n1.equeals(n2) );
/*Output
true
*/
Class In{
int value;
In(int value){
this.value=value;
}
}
In n1=new In(47);
In n2=new In(47);
System.out.println( n1.equeals(n2) );
/*Output
false
*/
我们发现Integer比较合乎了我们的需要
若是普通的类,却变成了false
4、逻辑运算符
**&& || ! ** 与 或 非
单目运算符& 与 |?
& 与 &&、|与|| 的运算结果相同
但是当符号左边是false时,&继续执行符号右边的运算。&&不再执行符号右边的运算。
双目运算符有短路的特性,而单目不支持,这意味着单目运算符要可能更耗时,同时单目运算符也有为运算符的功能,在后面位运算符中详细解释
我们在使用中,了解能作为逻辑就行了,不要使用&|,而使用双目运算符作为逻辑运算符
短路
A||B,若A为真那么式子肯定为真,所以出现了短路的情况,根据前面的语句已经得到了式子的结果,Java将不再运行后面的逻辑语句。
特别注意:逻辑运算符操作的都是boolean类型的变量。而且结果也是boolean类型
5、按位运算符:
& :按位与
- | :按位或
- :按位非
^ :按位异或
我们将布尔类型作为一种单比特值对待,所以它多少有些独特。我们可对它执行按位“与”、“或”和按位”异或“运算,但不能按位”非“(大概是为了避免与逻辑NOT混淆)。对于布尔值,按位操作符具有与逻辑操作符相同的效果,只是不会中途”短路“。
6、移位操作符
只能处理整数类型
<< :左移 在右边补 0 ,在没有数据溢出的前提下,左移 N 位,也是乘以 2 的N次方
>> :右移 在左边补符号位。 右移 N 位,也是除以 2 的N次方。当除不尽的情况,实际得到的整数总是比实际算术计算的值略小
>>>:Java新增,无符号右移 在左边补0
移位还能与等号连用>>>= 、>>= 、<<=
7、三元操作符if-else
boolean ? value0 : value1
boolean为true结果为value0,
为false则结果为value1
8、字符串操作符+ +=
是Java的重载操作符(操作符重载)
连接不同字符串,结果为字符串
如果一个表达式以字符串起头,那么后面所有的操作数都必须为字符串型。后面的语句加了括号的话,仍从 数值加号 开始,遇到字符串再更换为字符串
例子建议看一下
System.out.println("hell"+2+2+2);//hell222
System.out.println(2+2+2+"hell");//6hell
System.out.println("hell"+2+2-2);//错误
System.out.println("hell"+2+ (2-2) );//hell20
9、常见错误
把双等号漏了一个变成了赋值,出错率很高!!
== -> =
10、类型转换操作符
类型转换(cast)。适当情况有自动转换(向大规模转换)
使用小括号 (类型)
可以对常量和变量进行类型转换,
在java中是一种比较安全的操作。
窄化转换(装换为容纳信息更小的类型),会面临信息丢失,此时编译器会强制转换。扩展转换则不必显式进行类型转换,因为不会有信息丢失。
11、截尾和舍入
在进行数据转换的时候,若有窄化操作,则会直接去尾
如 1.8(float) -> int 结果是 1
若要使用舍入,可以通过java.lang.Math.round()
12、Java没有sizeof()
Java虚拟机的特性使得Java开发不需要考虑跨平台,不需要sizeof()方法