1 注释
书写注释是一个非常好的习惯。
java中的注释有三种:
- 单行注释
- 多行注释
- 文档注释 (
JavaDoc
)
语法如下。
//Single-line comments
/*
Multiline comments
Multiline comments
*/
/**
* @Description
* @Author
* ...
*/
有很多整活的有趣注释。
/***
* ┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┐
* │Esc│ │ F1│ F2│ F3│ F4│ │ F5│ F6│ F7│ F8│ │ F9│F10│F11│F12│ │P/S│S L│P/B│ ┌┐ ┌┐ ┌┐
* └───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┘ └┘ └┘ └┘
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ ┌───┬───┬───┐ ┌───┬───┬───┬───┐
* │~ `│! 1│@ 2│# 3│$ 4│% 5│^ 6│& 7│* 8│( 9│) 0│_ -│+ =│ BacSp │ │Ins│Hom│PUp│ │N L│ / │ * │ - │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ ├───┼───┼───┤ ├───┼───┼───┼───┤
* │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │{ [│} ]│ | \ │ │Del│End│PDn│ │ 7 │ 8 │ 9 │ │
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ └───┴───┴───┘ ├───┼───┼───┤ + │
* │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │: ;│" '│ Enter │ │ 4 │ 5 │ 6 │ │
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤ ┌───┐ ├───┼───┼───┼───┤
* │ Shift │ Z │ X │ C │ V │ B │ N │ M │< ,│> .│? /│ Shift │ │ ↑ │ │ 1 │ 2 │ 3 │ │
* ├─────┬──┴─┬─┴──┬┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤ ┌───┼───┼───┐ ├───┴───┼───┤ E││
* │ Ctrl│ │Alt │ Space │ Alt│ │ │Ctrl│ │ ← │ ↓ │ → │ │ 0 │ . │←─┘│
* └─────┴────┴────┴───────────────────────┴────┴────┴────┴────┘ └───┴───┴───┘ └───────┴───┴───┘
*/
/***
*
* █████▒█ ██ ▄████▄ ██ ▄█▀ ██████╗ ██╗ ██╗ ██████╗
* ▓██ ▒ ██ ▓██▒▒██▀ ▀█ ██▄█▒ ██╔══██╗██║ ██║██╔════╝
* ▒████ ░▓██ ▒██░▒▓█ ▄ ▓███▄░ ██████╔╝██║ ██║██║ ███╗
* ░▓█▒ ░▓▓█ ░██░▒▓▓▄ ▄██▒▓██ █▄ ██╔══██╗██║ ██║██║ ██║
* ░▒█░ ▒▒█████▓ ▒ ▓███▀ ░▒██▒ █▄ ██████╔╝╚██████╔╝╚██████╔╝
* ▒ ░ ░▒▓▒ ▒ ▒ ░ ░▒ ▒ ░▒ ▒▒ ▓▒ ╚═════╝ ╚═════╝ ╚═════╝
* ░ ░░▒░ ░ ░ ░ ▒ ░ ░▒ ▒░
* ░ ░ ░░░ ░ ░ ░ ░ ░░ ░
* ░ ░ ░ ░ ░
*/
/***
*_______________#########_______________________
*______________############_____________________
*______________#############____________________
*_____________##__###########___________________
*____________###__######_#####__________________
*____________###_#######___####_________________
*___________###__##########_####________________
*__________####__###########_####_______________
*________#####___###########__#####_____________
*_______######___###_########___#####___________
*_______#####___###___########___######_________
*______######___###__###########___######_______
*_____######___####_##############__######______
*____#######__#####################_#######_____
*____#######__##############################____
*___#######__######_#################_#######___
*___#######__######_######_#########___######___
*___#######____##__######___######_____######___
*___#######________######____#####_____#####____
*____######________#####_____#####_____####_____
*_____#####________####______#####_____###______
*______#####______;###________###______#________
*________##_______####________####______________
*/
2 标识符和关键字
标识符
Java语言中所有的组成部分都需要名字。
对于变量,常量,函数等,我们们统统称之为Java标识符。
关键字
Java中有特别意义的 标识符
即为关键字。
Java的关键字对Java的编译器具有特殊意义, 因此关键字不能用作变量名、方法名、类名、包名和参数。
Java语言中共定义了如下关键字。
abstract | assert | boolean | break | byte |
case | catch | char | class | const |
continue | default | do | double | else |
enum | extends | final | finally | float |
for | goto | if | implements | import |
instanceof | int | interface | long | native |
new | package | private | protected | public |
return | strictfp | short | static | super |
switch | synchronized | this | throw | throws |
transient | try | void | volatile | while |
Tips
- 所有的标识符都应以字母(A-Z 或 a-z)、美元符($)或者下划线(_)开始。
- 首字母之后可以是字母(A-Z 或 a-z)、美元符($)、下划线(_)或者数字的任意字符组合。
- 不能使用关键字作为变量名或方法名。
- 标识符是大小写敏感的。
建议使用英文命名。
3 数据类型讲解
强类型语言:要求变量的使用严格符合规定,所有变量都必须先定义后才能使用。
弱类型语言:无此要求,如VB、JS等。
分类
基本数据类型(Primitive Type)
数值类型
整数类型
- byte(1字节)
- short(2字节)
- int(4字节)
- long(8字节)
浮点类型
- float(4字节)
- double(8字节)
字符类型
- char(2字节)
boolean类型
- true
- false
引用数据类型(Reference Type)
- 类
- 接口
- 数组
Tips
- 在定义long和float时在数字之后加一个大写字母。
int num1 = 10;
long num2 = 20L;
float num3 = 30.1F;
- String不是关键字,是一个类。
- 在IDEA中可以通过 Ctrl + Click 来查看某一数据类型的大小。
字节
位(bit) | 计算机内部数据储存的最小单位,11001100是一个八位二进制数。 |
字节(byte) | 计算机中数据处理的基本单位,习惯上用大写 B 来表示。 |
1 B = 8 bit
1 KB = 1024 B
1 M = 1024 KB
1 G = 1024 M
1 T = 1024 G
3.5 数据类型拓展
整数拓展
进制后缀
- 二进制 0b
- 十进制
- 八进制 0
- 十六进制 0x
int num1 = 10;
int num2 = 0b10;
int num3 = 010;
int num4 = 0x10;
System.out.println("num1 = " + num1);
System.out.println("num2 = " + num2);
System.out.println("num3 = " + num3);
System.out.println("num4 = " + num4);
运行结果为
num1 = 10
num2 = 2
num3 = 8
num4 = 16
浮点数拓展
float f = 0.1F;
double d = 0.1;
System.out.println(f == d);
float d1 = 23333333333F;
float d2 = d1 + 1;
System.out.println(d1 == d2);
运行结果为
false
true
浮点数是有限且离散的,具有舍入误差,因此 d
与 f
接近但不相等。
最好完全避免使用浮点数进行比较。
最好完全避免使用浮点数进行比较。
最好完全避免使用浮点数进行比较。
那么在处理银行业务时使用什么进行比较?
使用
BigDecimal
,它属于数学工具类,不是数据类型。
字符拓展
char c1 = 'a';
char c2 = '萌';
char c3 = '\u0061';
System.out.println("c1 = " + c1);
System.out.println("c1 = " + (int)c1);
System.out.println("c2 = " + c2);
System.out.println("c2 = " + (int)c2);
System.out.println("c3 = " + c3);
运行结果为
c1 = a
c1 = 97
c2 = 萌
c2 = 33804
c3 = a
(int)
表示强制转换。
所有字符的本质还是数字。
char类型涉及Unicode编码。
\u
为转义字符。
转义字符 | 意义 | ASCII码值(十进制) |
---|---|---|
a | 响铃(BEL) | 007 |
b | 退格(BS) ,将当前位置移到前一列 | 008 |
f | 换页(FF),将当前位置移到下页开头 | 012 |
n | 换行(LF) ,将当前位置移到下一行开头 | 010 |
r | 回车(CR) ,将当前位置移到本行开头 | 013 |
t | 水平制表(HT) (跳到下一个TAB位置) | 009 |
v | 垂直制表(VT) | 011 |
\ | 代表一个反斜线字符''' | 092 |
' | 代表一个单引号(撇号)字符 | 039 |
" | 代表一个双引号字符 | 034 |
? | 代表一个问号 | 063 |
0 | 空字符(NUL) | 000 |
ddd | 1到3位八进制数所代表的任意字符 | 三位八进制 |
xhh | 十六进制所代表的任意字符 | 十六进制 |
字符串拓展
String Str1 = new String("Hello World");
String Str2 = new String("Hello World");
System.out.println(Str1 == Str2);
String Str3 = "Hello World";
String Str4 = "Hello World";
System.out.println(Str3 == Str4);
运行结果为
false
true
布尔值拓展
boolean flag = true;
if (flag == true) {};
if (flag) {};
//Less is more!
4 类型转换
由于Java是强类型语言,所以在进行某些运算时,需要用到类型转换。
运算优先级
低 --------------------------------------------------------------> 高
byte,short,char —> int —> long —>float —> double
内存溢出
int i = 128;
int a = (byte)i;
System.out.println("i = " + i);
System.out.println("a = " + a);
运行结果为
i = 128
a = -128
在转换时要避免内存溢出。
Tips
1、不能对布尔值进行转换。
2、不能把对象类型转换为不相干的类型。
3、在把高容量转换到低容量的时候,强制转换。
4、转换的时候可能存在内存溢出
或者精度问题
。
5 变量,常量,作用域
变量
变量就是可以变的量。
Java变量是程序中最基本的存储单元,其要素包括变量名、变量类型和作用域。
变量名必须是合法的标识符。
Java是一种强类型语言,每个变量都必须声明其类型。
变量类型可以是基本类型,也可以是引用类型。
Tips
为保证程序的可读性,不建议在一行内定义多个变量。
默认值
实例变量(instance variable):从属于对象,如果过不初始化,会有一个默认值 0 或 0.0
布尔值:默认值为false
除了基本类型,其他的默认值都是null
常量
常量就是初始化后不能再改变的量。
可以将常量理解为一种特殊的变量,它的值被设定后,在程序运行过程中不允许被改变。
//final ConstantType ConstantName = Value;
final double PI = 3.14;
修饰符(final、static、public等)不存在先后顺序
命名规范
- 所有变量、方法、类名:见名知意
- 类成员变量:首字母小写和驼峰原则(monthSalary、lastName)
- 局部变量:首字母小写和驼峰原则
- 常量:大写字母和下划线(MAX_VALUE)
- 类名:首字母大写和驼峰原则
- 方法名:首字母小写和驼峰原则
作用域
- 类变量(class variable)
- 实例变量(instance variable)
- 局部变量(local variable)
public class Variable {
static int allClicks = 0; //class variable
String str = "Hello World"; //instance variable
public static void main(String[] args) {
int i = 0; //local variable
}
}
6 基本运算符
Java语言支持如下运算符(operator):
- 算术运算符:+ ,- ,* ,/ ,% ,++ ,--
- 赋值运算符:=
- 关系运算符:> ,< ,>= ,<= ,== ,!= ,instanceof
- 逻辑运算符:&& ,|| ,!
- 位运算符:& ,| ,^ ,~ ,>> ,<< ,>>>
- 条件运算符:? :
- 扩展赋值运算符:+= ,-= ,*= ,/=
IDEA快捷键:Ctrl + D 复制当前行到下一行
long a = 23333333L;
int b = 100;
short c = 10;
byte d = 1;
System.out.println("a+b+c+d = " + (a + b + c + d) ); // long
System.out.println("b+c+d = " + (b + c + d) ); // int
System.out.println("c+d = " + (c + d) ); // int (short + byte = int)
6.5 运算符拓展
自增自减运算
自增自减运算符为 ++ 和 -- ,均为一元运算符。
a ++ 为后自增,先取值后执行;
++ a 为前自增,先执行后取值;
自减同理。
逻辑运算
逻辑运算符:&&(与),||(或),!(非)
boolean t = true;
boolean f = false;
System.out.println("t && f = " + (t && f) );
System.out.println( "t || f = " + (t || f) );
System.out.println("! t = " + ! t);
System.out.println("! f = " + ! f);
运行结果为
t && f = false
t || f = true
! t = false
! f = true
短路运算
- 逻辑与运算中第一个条件不满足即短路,后面不执行
- 逻辑或运算中第一个条件满足即短路,后面不执行
int a = 0;
System.out.println( a == 0 && a++ == 0);
System.out.println("a = " + a);
System.out.println( a == 0 && a++ == 0); //short circuit calculation
System.out.println("a = " + a);
System.out.println( a == 0 || a++ == 0);
System.out.println("a = " + a);
System.out.println( a == 2 || a++ == 0); //short circuit calculation
System.out.println("a = " + a);
运行结果为
true
a = 1
false
a = 1
false
a = 2
true
a = 2
位运算
符号 | 描述 | 运算规则 |
---|---|---|
& | 与 | 两位均为1时,结果为1,否则为0 |
\ | 或 | 两位均为0时,结果为0,否则为1 |
^ | 异或 | 两位相同为0,相异为1 |
~ | 取反 | 0变1,1变0 |
<< | 左移 | 各二进位全部左移若干位,高位丢弃,低位补0 |
>> | 右移 | 各二进位全部右移若干位,无符号数高位补0 |
intToBinary()
函数及位运算举例:
/** convert the integer to the binary and append zero in front */
public static String intToBinary(int num) {
//1.append zero
String binaryStr = Integer.toBinaryString(num);
int bitNum = 8;
if(bitNum < binaryStr.length()) {
bitNum += bitNum;
}
while(binaryStr.length() < bitNum){
binaryStr = "0"+binaryStr;
}
//2.format
String str = "";
for (int i = 0; i < binaryStr.length();) {
str += binaryStr.substring(i, i=i+4)+",";
}
//3.return
return str.substring(0, str.length()-1);
}
public static void main(String[] args) {
int A = 0B0011_1100;
int B = 0B0000_1101;
System.out.println("A = " + intToBinary(A) );
System.out.println("B = " + intToBinary(B) );
System.out.println("--------------------");
System.out.println("A&B = " + intToBinary(A&B) );
System.out.println("A|B = " + intToBinary(A|B) );
System.out.println("A^B = " + intToBinary(A^B) );
System.out.println("~A = " + intToBinary(~A) );
System.out.println("~B = " + intToBinary(~B) );
}
输出结果为
A = 0011,1100
B = 0000,1101
--------------------
A&B = 0000,1100
A|B = 0011,1101
A^B = 0011,0001
~A = 1111,1111,1111,1111,1111,1111,1100,0011
~B = 1111,1111,1111,1111,1111,1111,1111,0010
面试题:2*8 怎么运算最快?
答案:2*2*2*2
解释:位运算效率极高,此处采用左移运算 <<
条件运算
条件运算符 ? : 为三元运算符。
int a = 1;
System.out.println(a == 0 ? "true" : "false");
System.out.println(a == 1 ? "true" : "false");
运行结果为
false
true
扩展赋值运算
int a = 1;
int b = 2;
a += b; //a = a + b
System.out.println("a = " + a);
a -= b; //a = a - b
System.out.println("a = " + a);
a *= b; //a = a * b
System.out.println("a = " + a);
a /= b; //a = a / b
System.out.println("a = " + a);
运行结果为
a = 3
a = 1
a = 2
a = 1
Math类拓展
Math类中的 pow() 函数可以实现幂运算,如:
$$ 2^{10}=1024 $$
double pow = Math.pow(2,10);
System.out.println("pow = " + pow);
运行结果为
pow = 1024.0
7 包机制
为了更好的组织类,Java提供了包机制,用于区别类名的命名空间。
包的本质就是文件夹。
包语句一定要放在第一行:
package package1[.package2[.package3…]];
一般利用公司域名倒置作为包名,如 com.baidu.www
为了能够使用某一个包的成员,我们需要在Java程序中明确导入该包。
使用 import
语句可以完成此功能:
import package1[.package2…].(classname|*);
* 为通配符,可以导入包下的所有类。
8 JavaDoc文档注释
可以通过javadoc命令来生成自己的API文档。
// javadoc -encoding UTF-8 -charset UTF-8 解决中文问题。
参数信息:
- @author 作者名
- @version 版本号
- @param 参数名
- @return 返回值详情
- @throws 异常抛出详情
- ...
感谢 狂神说 提供的java学习资源。