《Java基础复习》—规范与基础

参考书目《Java 编程思想》所以大家放心食用

一、注释规范以及API文档

1.注释

1.1三种注释方法

  1. //注释内容 单行注释
  2. /* 注释内容 */ 多行注释
  3. /**注释内容*/ 文档注释

1.2WHY注释

  1. 对代码进行说明,增强可读性,方便自己,方便别人
  2. 调试代码

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版本尚未使用,但以后版本可能会作为关键字使用。

具体哪些保留字:gotoconst
注意:自己命名标识符时要避免使用这些保留字

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数据类型

在这里插入图片描述

详细说明:

  1. 整型:byte(1字节=8bit) \ short(2字节) \ int(4字节) \ long(8字节)
    1. byte范围:-128 ~ 127
    2. 声明long型变量,必须以"l"或"L"结尾 long a=456L
      • 【强制】在 long 或者 Long 赋值时,数值后使用大写的 L,不能是小写的 l,小写容易跟数字 1 混淆,造成误解。 说明:Long a = 2l; 写的是数字的 21,还是 Long 型的 2? (阿里巴巴规范)
    3. 通常,定义整型变量时,使用int型。
    4. ④整型的常量,默认类型是:int型
  2. 浮点型:float(4字节) \ double(8字节)
    1. 浮点型,表示带小数点的数值
    2. float表示数值的范围比long还
    3. 定义float类型变量时,变量要以"f"或"F"结尾
    4. 通常,定义浮点型变量时,使用double型。
    5. 浮点型的常量,默认类型为:double
  3. 字符型:char (1字符=2字节)
    1. 定义char型变量,通常使用一对’’,内部只能写一个字符
    2. 表示方式:1.声明一个字符 2.转义字符 3.直接使用 Unicode 值来表示字符型常量
  4. 布尔型:boolean
    1. 只能取两个值之一:true 、 false
    2. 常常在条件判断、循环结构中使用

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的容量

字面值

布尔字面值只有两个逻辑值:truefalsetruefalse的值不转换为任何数字表示。

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种基本数据类型间的运算

关于运算在下面字符串操作符中有讲解,相关深度的内容较后发出

  1. String属于引用数据类型,翻译为:字符串 ,String也是一个对象
  2. 声明String类型变量时,使用一对""
  3. String可以和8种基本数据类型变量做运算,且运算只能是连接运算:+
  4. 运算的结果仍然是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()方法

posted @ 2020-03-14 01:02  jirath  阅读(534)  评论(0编辑  收藏  举报