狂神Java SE (三)基础
01 注释
Java 中的注释有三种:
- 单行注释
- 多行注释
- 文档注释
02 标识符和关键字
类名、变量名、方法名 都被称为标识符。
关键字:
标识符的注意:
- 以大小写字母、美元符、下划线开始
- 不能用关键字作为变量名或方法名
- 标识符大小写敏感
03 数据类型讲解
- 强类型语言 (Java,C++)
要求变量的使用要严格符合规定,所有变量必须先定义后才能使用 - 弱类型语言 (JavaScript,)
Java的数据类型:
- 基本类型(primitive type)
- 数值类型
- 整数类型
- byte 1字节 :-128~127
- short 2字节 :-32768~32767
- int 4字节
- long 8字节 (要在数字后加
L
)
- 浮点类型
- float 4字节
- double 8字节
- 字符类型
- char 2字节
- 整数类型
- boolean类型 1位, true/false
- 数值类型
- 引用类型(reference type)
- 类
- 接口
- 数组
字节:
- 位 bit:计算机内部数据存储的最小单位,如
11001100
是一个八位二进制数 - 字节 byte:计算机中数据处理的基本单位,习惯用大写
B
表示 - 1B(byte, 字节) = 8bit(位)
- 字符:指计算机中使用的字母、数字、字和字符
04 数据类型扩展及面试题讲解
- 整数扩展:
- 进制
- 二进制
0b
- 十进制
- 八进制
0
- 十六进制
0x
int i = 10; // 10 int i2 = 010; // 8 int i3 = 0x10; // 16
- 二进制
- 进制
- 浮点数扩展:
- float 有限 离散 舍入误差,接近但不等于
- 最好避免使用浮点数进行比较
- 字符扩展:
- 所有的字符本质还是数字,可以使用
int
强制转换 - Unicode编码,2字节,0 - 65536 ,65=A,97=a
- 转义字符:
\t
制表符;\n
换行;
- 所有的字符本质还是数字,可以使用
String s1 = new String("hello world");
String s2 = new String("hello world");
System.out.println(s1==s2); // false
String s3 = "hello world";
String s4 = "hello world";
System.out.println(s3==s4); // true
05 类型转换
Java是强类型语言,在进行运算时会进行类型转换。
// 低 --> 高
byte, short, char -> int -> long -> float -> double
在运算中,不同类型的数据会先转换成同一类型,然后进行计算。
int i = 128;
byte b = i; // 类型错误
byte b2 = (byte) i; // -128 强制转换,内存溢出
double b3 = i; // 128.0
- 强制类型转换,
(类型)变量名
, 从高->低 - 自动类型转换,从低->高
注意点:
- 不能对布尔值进行转换
- 不能把对象类型转换为不相干的类型
- 高容量转换到低容量的时候,强制转换
- 转换的时候可能存在内存溢出,或者精度问题
System.out.println((int) 23.7); // 23 System.out.println((int) -45.89f); // -45 char c = 'a'; int d = c+1; System.out.println(d); // 98 System.out.println((char)d); // b
小知识: Java7新特性,在数字中键入_
起分割作用,且不会影响数字
int money = 10_0000_0000;
System.out.println(money); // 1000000000
int year = 20;
int total = money * year;
System.out.println(total); // -1474836480
long total2 = money * year;
System.out.println(total2); // -1474836480
long total3 = money * (long)year;
System.out.println(total3); // 20000000000
在上面的例子中,即使进行long
转型,因为默认的是int类型,在计算之前就已经发生了溢出问题。需要先将一个数转为long
类型,然后会自动向上转型,得到正确结果。
06 变量、常量、作用域
- Java是强类型语言,每个变量都必须声明其类型。
- Java变量是程序中最基本的存储单元,要素包括变量名、变量类型和作用域
type varName [=value] [{,varName[=value]}]; // 数据类型 变量名 = 值; 可以使用逗号隔开声明多个同类型变量
注意事项:
- 每个变量都有类型,可以是基本类型,也可以是引用类型;
- 变量名必须是合法的标识符;
- 变量声明是一条完整的语句,每个声明都必须以分号结束;
变量作用域:
- 类变量(
static
) - 实例变量
- 局部变量
public class Variable { static int allClicks = 0; // 类变量 String str = "hello world"; // 实例变量 public void method() { int i = 0; // 局部变量 } }
局部变量必须声明和初始化值才能够使用;
实例变量从属于对象,没有初始化时会返回默认值(0, 0.0, false, 除基本类型,其余都是null
,如String类型)
类变量使用static
关键字
变量的命名规范:
- 所有变量、方法、类名:见名知意
- 类成员变量:首字母小写,驼峰原则
monthSalary
- 局部变量:首字母小写,驼峰原则
- 常量:大写字母和下划线
MAX_VALUE
- 类名:首字母大写,驼峰原则
Man, GoodMan
- 方法名:首字母小写,驼峰原则
run(), runRun()
常量(Constant):初始化(initialize)后不能改变值。可以理解为一种特殊的变量,值被设定后,在程序运行过程中不允许改变。 常量名一般使用大写字符。
final 常量名 = 值;
final double PI = 3.14;
07 基本运算符
- 算术运算符
+ - * / % ++ --*
- 赋值运算符
=
- 关系运算符
> < <= >= == != instance of
- 逻辑运算符
&& || !
- 位运算符
& | ^ ~ >> << >>>
- 条件运算符
? :
- 扩展赋值运算符
+= -= *= /=
08 自增自减运算符、Math类
幂运算 Math.pow(2,3)
09 逻辑运算符、位运算符
A = 0011 1100
B = 0000 1101
A&B = 0000 1100
A|B = 0011 1101
A^B = 0011 0001
~B = 1111 0010
2*8=16 = 2*2*2*2 = 2<<3
<< *2
>> /2
10 三元运算符、小结
字符串连接符 + String
时,会转为字符串输出。
x ? y : z
如果 x 为 true ,则结果为 y ,否则为 z 。
Java运算符优先级:
()
优先级最高
11 包机制
- 包机制可以更好地组织类,用于区别类名的命名空间
- 一般利用公司域名倒置作为包名
- 一般需要使用
import
导入才可使用包内成员
12 Java Doc生成文档
javadoc
命令生成自己的API文档- 参数信息:
@author
作者信息@version
版本号@since
指明JDK版本@param
参数名@return
返回值情况@throws
异常抛出情况