参考书目《Java 编程思想》所以大家放心食用
① 单行注释和多行注释,注释了的内容不参与编译。
换句话说,编译以后生成的.class结尾的字节码文件中不包含注释掉的信息
② 注释内容可以被JDK提供的工具 javadoc 所解析,生成一套以网页文件形式体现的该程序的说明文档。
③ 多行注释不可以嵌套使用
API: Application programming interface. 应用程序编程接口
API文档:Java程序(框架、系统、项目等等)针对类库的一份说明书,类似词典
官网可以下载,进technology那个子域名
Java jdk1.8的API文档
链接:https://pan.baidu.com/s/1xnzm45xi3qkZP9osvgK5Uw
提取码:06uz
复制这段内容后打开百度网盘手机App,操作更方便哦
好的程序员有良好的编程习惯所写的代码,看起来很“舒服”
个人很喜欢阿里巴巴给的Java开发规范,阿里巴巴的规范要求的注释可能比较多(可能会觉得麻烦),但对于代码的合作开发等等等等是很不错的参考,并且推荐遵守
定义:被Java语言赋予了特殊含义,用做专门用途的字符串(单词)
就是Java预先占用的关键字,不能作为开发者自己的变量名称。
关键字都为小写
关键字需要熟记,当然随着Java的学习与使用,关键字会自然的记在心中
synchronized: 利用锁的机制来实现同步的。
instanceof是Java的保留关键字,也可以叫运算符,用来在运行时指出对象是否是特定类的一个实例。instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例。
用法:
result = object instanceof class
参数:
Result:布尔类型。
Object:必选项。任意对象表达式。
Class:必选项。任意已定义的对象类。
说明:
如果 object 是 class 的一个实例,则 instanceof 运算符返回 true。如果 object 不是指定类的一个实例,或者 object 是 null,则返回 false。
现Java版本尚未使用,但以后版本可能会作为关键字使用。
具体哪些保留字:goto 、const
注意:自己命名标识符时要避免使用这些保留字
Java 中标识符是为方法、变量或其他用户定义项所定义的名称。标识符可以有一个或多个字符。
就是可以自己命名的地方
另外,Java 区分大小写,因此 myvar 和 MyVar 是两个不同的标识符。
提示:标识符命名时,切记不能以数字开头,也不能使用任何 Java 关键字作为标识符,而且不能赋予标识符任何标准的方法名。
另外,希望大家养成良好命名规范,关键:命名要有实际意义,可以使用简写但是一定要能看懂意思,比如psg:passage,password就不要psd了
标识符规范化是为了便于开发,合作,检查等等,不遵守可以运行,但是最好要遵守
这里推荐看看阿里巴巴的规范
PDF我分享在这里,也可以去官网下载
链接:https://pan.baidu.com/s/1qCJU67mwv78sM_YfLD1KgA
提取码:zwv4
复制这段内容后打开百度网盘手机App,操作更方便哦
再次强调:命名要有实际意义,适当 缩写
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZO0F758a-1584118449829)(E:\notes\Java复习笔记\image-20200313141924046.png)]
这里是不包含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的变量。
更详细的说明在运算符章节
1.需要使用强转符:()
int a=(int)b/c;
2.注意点:强制类型转换,可能导致精度损失。
另外,有一个本人经常犯错误的点:
当从session取出数值时,转换为Integer,这里一定要注意,Integer是包装类,如果使用了强制类型转换,多半报错。涉及变量转换和是否可以为null的坑很多,一定要小心
comment.setCommentAuthorId(Integer.valueOf(subject.getPreviousPrincipals().getPrimaryPrincipal().toString()));
关于运算在下面字符串操作符中有讲解,相关深度的内容较后发出
一般情况下,如果在程序中使用了直接常量,编译器可以直接得出生成的类型,但是有时是模棱两可的,需要程序员加适当的“指导”,用与直接常量有关的某些字符来额外增加一些信息。
Ox2f
Ox2F
200L
直接常量的后缀字符标志了它的类型。
Integer.toBinaryString()以及Long.toBinaryString()可以转化为二进制表示数字的字符串
1.9e-7的意义与数学不同,e是”10的幂次”,即1.9*10^-7
几乎所有的操作符都只能操作“基本类型”。例外的操作符是“=”、“==”和“!=”,这些操作符能操作所有的对象(这也是对象令人糊涂的地方)。除此以外,Sting类支持“+”和“+=”
——《Java编程思想》·
计算顺序:先乘除后加减,使用括号明确顺序,防止意外
同C语言相通,没有改变
加减乘除取余: +、-、*、/、%
自增、自减 – ++ ,注意该运算符的位置也会影响结果
这两个操作符各有两种使用方式,通常被称为“前缀式”和“后缀式”。“前缀递增”表示“++”操作符位于变量或表达式的前面;而“后缀递增”表示“++”操作符位于变量或表达式的后面。类似的,“前缀递减”意味着“–”操作符位于变量或表达式的前面;而“后缀递减”意味着“–”操作符位于变量或表达式的后面。对于前缀递增和前缀递减(如++a和–a),会先执行运算,再生成值。而对于后缀递增和后缀递减(如a–和a++),会先生成值,再执行运算
——摘录自《JAVA编程思想》
就是说,在 b=++a的情况下
或者++a=b等等情况
如果++在变量前就先给变量+1再进行运算,如果在变量后就先给变量-1再进行运算
赋值运算符:= += -= *= /= %=
简单来说分为两类
没什么讲的,就是直接赋值 = ,还能用于对象
举例a+=2; 实质是a=a+2;相当于缩写
-= 、*=、 /= 、%=同理
注:复合运算符的运算的结果不会改变变量本身的数据类型!所以推荐使用复合运算符,如下图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UAEhll9l-1584118449830)(E:\notes\Java复习笔记\image-20200313192727846.png)]
关系操作符生成的是一个boolean(布尔)结果为真就是true,为假就是false。
大于(>)、小于(<)、等于(==)、不等于(!=)、小于或等于(<=)、大于或等于(>=)
其中的等于和不等于适用于所有的数据类型,其他的比较符不适用于boolean类型,因为boolaen类型只能为true或false
看这个例子
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
**&& || ! ** 与 或 非
& 与 &&、|与|| 的运算结果相同
但是当符号左边是false时,&继续执行符号右边的运算。&&不再执行符号右边的运算。
双目运算符有短路的特性,而单目不支持,这意味着单目运算符要可能更耗时,同时单目运算符也有为运算符的功能,在后面位运算符中详细解释
我们在使用中,了解能作为逻辑就行了,不要使用&|,而使用双目运算符作为逻辑运算符
A||B,若A为真那么式子肯定为真,所以出现了短路的情况,根据前面的语句已经得到了式子的结果,Java将不再运行后面的逻辑语句。
特别注意:逻辑运算符操作的都是boolean类型的变量。而且结果也是boolean类型
& :按位与
^ :按位异或
我们将布尔类型作为一种单比特值对待,所以它多少有些独特。我们可对它执行按位“与”、“或”和按位”异或“运算,但不能按位”非“(大概是为了避免与逻辑NOT混淆)。对于布尔值,按位操作符具有与逻辑操作符相同的效果,只是不会中途”短路“。
只能处理整数类型
<< :左移 在右边补 0 ,在没有数据溢出的前提下,左移 N 位,也是乘以 2 的N次方
>> :右移 在左边补符号位。 右移 N 位,也是除以 2 的N次方。当除不尽的情况,实际得到的整数总是比实际算术计算的值略小
>>>:Java新增,无符号右移 在左边补0
移位还能与等号连用>>>= 、>>= 、<<=
boolean ? value0 : value1
boolean为true结果为value0,
为false则结果为value1
是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
把双等号漏了一个变成了赋值,出错率很高!!
== -> =
类型转换(cast)。适当情况有自动转换(向大规模转换)
使用小括号 (类型)
可以对常量和变量进行类型转换,
在java中是一种比较安全的操作。
窄化转换(装换为容纳信息更小的类型),会面临信息丢失,此时编译器会强制转换。扩展转换则不必显式进行类型转换,因为不会有信息丢失。
在进行数据转换的时候,若有窄化操作,则会直接去尾
如 1.8(float) -> int 结果是 1
若要使用舍入,可以通过java.lang.Math.round()
Java虚拟机的特性使得Java开发不需要考虑跨平台,不需要sizeof()方法