Java开发 注释+引用类型+枚举+注解+运算符+表达式+语句代
【作者前言】:13年入圈,分享些本人工作中遇到的点点滴滴那些事儿,17年刚开始写博客,高手勿喷!以分享交流为主,欢迎各路豪杰点评改进!
[1]
🔥知识点内容
🔓1. JDK工具的使用 [2]
.class:字节码文件
Javap反编译
Javadoc 生成文档:
Javadoc -d . 文件名称.java :按照包结构在当前目录生成文档
🔓2.如何注释 [3]
不会显示在执行结果中,只是为了给开发者进行标注,说明一下 这个是谁做的 什么功能等等等
1、单行注释://注释内容
2、多行注释:/* 注释内容 */
3、文档注释:/** 文档注释内容 */
🔓3.引用类型 [4]
在Java语言中,
image.png除了上节学习到的8种基本数据类型,其他类型都是引用类型
;
也可以说,任何一个对象都是引用类型
;
引用类型使用=赋值
除了String、包装器类(共8个)外,都需要使用new 关键字;
引用类型可以使用==、!=进行比较
,比较的是引用类型的地址
,不是内容
;
引用类型不能使用>、>=、<=、<进行比较
;
当只声明了一个引用类型变量,却没有为其赋值
,则此时该变量为null
;
引用类型的默认值是null 表示空 什么都没有指向
一个字符串是null,与一个字符串是""是否一样?有何区别?
完全不同。Null指的是根本没有分配堆内存,""是分配了堆内存,存储了一个""字符串,不过这个字符串是空的。
🔓4.枚举 [5]
在JDK1.5之后,Java中多了一个新的类型 --- 枚举;枚举也是一种引用类型
image.png
枚举在编译后也会生成.class 文件,也是一种引用类型
🔓5. 注解 [6]
在JDK1.5之后,Java中增加了注解(Annotation);
注解也称为元数据,是和类、接口、枚举,并列的一种引用类型;
image.png
除了直接使用API中的注解外,还可以自定义注解类型
🔓6. 运算符 [7]
从功能角度分,Java中的运算符可以分为
算术、关系、位、逻辑运算符
四类;
运算符既可以对变量进行运算,也可以对常量进行运算,被运算的数据称作操作数;
多数运算符的操作数只能是基本数据类型
,只有+、==、!=
例外,其中+不仅能对基本数据类型进行加运算,还能将字符串进行连接
;==、!=除了可以比较基本数据类型的二进制值外,还能比较基本数据类型的地址;【1】算数运算符
image.png
算术运算符用来对操作数进行数学运算;+比较特殊,除了能做加运算外,还能对两个字符串进行连接;
a++
与++a
的意思都是让a自增一个
a--
与--a
的意思都是让a自减一个
区别:使用的时机(运算的时机)不一样
int num = 10;
System.out.println(num++); // --- 10 先打印后自增1
System.out.println(++num); // --- 11 先自增1再打印
【自减同理】
【2】关系运算符
又叫比较运算符,用来运算两个操作数额的大小关系,返回值是true或false
image.png
==
以及!=
也可以对引用类型进行运算,比较 是否为同一个对象;
【3】位运算符
针对操作数的二进制进行运算;
15的二进制数是0000 1111,6的二进制是0000 0110;
image.png
1:真 0:假
&
(位与):1111 & 0110 ---> 0110;全真为真(1-1 ---> 1) 有一个假结果就是假(1-0 ---> 0 ; 0-1 ---> 0)
|
(位或):1111 | 0110 ---> 1111;全假为假(0-0 ---> 0),只要有一个为真结果就是真(1-0 ---> 1 ; 0-1 ---> 1)
^
(异或):1111 ^ 0110 ---> 1001;两个操作数不同则返回true(1-0 ---> 1 ; 0-1 ---> 1),两个操作数相同则返回false(1-1 ---> 0 ; 0-0 ---> 0)
相当于把每个位的数直接+
~
(取反):~0110 ---> 1000 0000 0000 0000 0000 0000 0000 0111;高位为1 表示为一个负数 转化成32位 原码+1高位进行补位
!
(非):true 变 false,false 变 true
<<
(左移位):
①【2<<2 过程:0010 ---> 数向左移动两位 ---> 1000
结果:8】
②【2<<3 过程:0010 ---> 数向左移动三位 ---> 0001 0000
结果:16】
>>
(右移位):
【8>>2 过程:1000 ---> 数向右移动两位 ---> 0010
结果:2】
>>>
(无符号右移位,即把符号位一起移了):正数与>>一样
扩展·面试题
①如何快速的求 2 * 8? --->2<<3
②int a=9;int b=6;如何不适用第三个变量,让这两个数进行交换?
1.a=a+b;b=a-b;a=a-b; 结果 ---> a=15;b=9;a=6
2.a=a^b;b=a^b;a=a^b; 结果 ---> a=1001^0110=1111(15); b=1111^0110=1001(9);a=1111^1001=0110(6);
【4】逻辑运算符
image.png
&:全真为真 有一个假结果就是假
|:全假为假,只要有一个真 结果就是真
异或-^:两个操作数不同返回true,两个操作数相同返回false;
!:true变false,false变true
&&:全真为真 有一个假结果就是假
||:全假为假,只要有一个真 结果就是真&(与) 和 &&(双与) 的区别 --- |(或) 和 ||(双或) 的区别
都是逻辑运算符,【&、|
称为非短路逻辑运算
】 【&&、||
称为短路逻辑运算
】
eg:
T1和T2是两个表达式
T1&
T2,当T1为false
时,返回值
即已确定为false
,但是依然还会运算T2表达式
,所以称之为非短路
;
T1&&
T2,当T1为false
时,返回值
已确定为false
时,就不会运算T2表达式
;所以称为短路
;
|
与||
也存在类似逻辑,当T1表达式为true
时,就确定了返回值
肯定是true
,所以||
就不会再运算T2表达式
【5】三元运算符(三目运算符)
条件运算符是唯一的一个三元运算符,它有三个表达式操作数(不是典型的两个操作数),使用下面的表达式:
表达式1 ? 表达式2 : 表达式3
在这个语句中,表达式1必须产生一个布尔值。
①如果表达式1的值为true时,那么表达式2被计算;
②如果表达式1的值为false,那么表达式3被计算;
并且整个表达式的值是有条件的。三元操作符与典型的if语句部分相似
eg:
f ? a : b
f --- true --- 结果为a
f --- false --- 结果为b
image.png
【6】复合赋值运算符
Java中的赋值可以使用普通的 =
进行赋值;也可以 =
与其他运算符一起进行复合赋值,即运算后赋值:
+=
: int a=7; a+=2; ---> 等同于 a=a+2; 结果:9
%=
: int a=10; a%3; ---> 等同于 a=a%3; 结果:1
🔓7. 运算符应用 [8]
判断数字num为奇数还是偶数
int num = 55;
num % 2 == 0 ? 偶数 : 奇数
🔓8. 表达式 [9]
表达式是由操作数和运算符按一定的语法形式组成的符号序列。
一个常量或一个变量名字是最简单的表达式,其值即该常量或变量的值;
表达式的值还可以用作其他运算的操作数,形成更复杂的表达式
eg:
num1+num2
a*(b+c)+d
3.14
x<=(y+z)
x&&y||z
🔓9. 语句、代码段 [10]
一个由
分号
(;
)结尾
的单一命令是一条语句
(Statement),一条语句一般是一行代码,但也可以占多行代码。
int a = 1; // 变量定义及初始化语句
用大括号
({…… }
)围起来的多条语句
构成一个代码段
(Code block);同时代码段也包括大括号前的一些修饰性描述:
🔓10. 标识符 [11]
程序员对程序中的各个元素加以命名时使用的命名记号称为标识符(identifier)包括:类名、变量名、常量名、方法名、…。
Java语言中,标识符是以字母,下划线(_),美元符($)
开始的一个字符序列,后面可以跟字母
,下划线
,美元符
,数字
。
合法的标识符:
identifier userName User_Name _sys_value $change非法的标识符:
2mail room# class类名:使用驼峰命名法
一个单词首字母大写 Student Person Animal
多个单词每个单词首字母都大写 StudentManager UserName变量(方法):
一个单词直接小写 account
多个单词,首个单词字母小写,其他单词字母大写 userName
常量:一般单词字母都是大写
包名:全都是小写
🔓11. 保留字:都是小写 [12]
具有专门的意义和用途,不能当作一般的标识符使用,这些标识符称为保留字(reserved word):
abstract
、break
、byte
、boolean
、catch
、case
、class
、char
、continue
、default
、double
、do
、else
、extends
、false
、final
、float
、for
、finally
、if
、import
、implements
、int
、interface
、instanceof
、long
、length
、native
、new
、null
、package
、private
、protected
、public
、final
、return
、switch
、synchronized
、short
、static
、super
、try
、true
、this
、throw
、throws
、transient
、void
、while
🔓12. 变量 [13]
程序中的基本存储单元
,其定义包括变量名
、变量类型
和作用域
几个部分,
定义格式为:
Type varName [= value ][{, varName [=value]}];
int n = 3, n1 = 4;
- Java中变量的缺省初值都是确定的:
布尔变量的初值为:false
整数变量的初值为:0
浮点数变量的初值为:0.0
引用(复合)变量的初值为:null- 变量的作用域: 【指可访问变量的一段代码,在程序中不同的地方声明的变量具有不同的作用域:局部变量、类变量、方法参数、例外处理参数。在一定的作用域内,变量名必须唯一】
- 作用域(Scope):【决定了变量可使用的范围】
①全局变量
(Global variables):变量可以在整个类
中被访问;
②局部变量
( Local variables ):变量只能在定义其的代码段
中被访问。- 作用域规则:【在一个代码段中定义的变量只能在该代码段或者该代码段的子代码段中可见】
- 使用局部变量比使用全局变量更安全。
在类中定义的 --- 全局变量,方法中定义的 --- 局部变量
变量的有效范围:从定义变量开始,一直到定义这个变量所在代码块结束
🔓13. 常量 [14]
常量就是特殊的变量
,不能修改值的变量。
定义格式为:
final Type varName = value [, varName [ =value] …];
final int globalAccount = 100, nationalAccount = 50;
final double PI=3.14159
注:常量只能在定义时赋值
🔓14. 如何进行控制台输入[15]
在java有一个类型
Scanner
接收控制台输入的1、步骤一:创建Scanner对象
image.png
Scanner 对象名称=new Scanner(System.in);
2、步骤二:通过对象中的方法进行控制台数据的接收
(1)对象.nextInt()
: 只能接收一个整数!!!(对象.nextFloat()、对象.nextDouble()...等同理,只能接收对应类型的输入内容
)
(2)对象.nextLine()
:接收回车时控制台输入的内容。