这是Java教程的第一篇,梳理Java基础知识是学习其他专业知识的第一步阶梯;要想精通编程必须通过大量的编程训练,在实践中掌握编程知识,培养编程能力,并逐步理解和掌握程序设计的思想和方法。
1. 数据类型
1.1 两大类:
- 基本数据类型:
byte
,short
,int
,long
,float
,double
,boolean
,char
。 - 引用类型:数组,类(抽象类)
class
,接口interface
,枚举enum
,注解@interface
。
注:单个字节表示
8
位二进制位,最左边表示符号位(0
:正,1
:负)。
1.2 整数类型(byte, short, int, long)
byte
: 1字节,范围-2^7 ~ 2^7-1
,即-128-127
。short
: 2字节,范围-2^15 ~ 2^15-1
,即-32768 ~ 32767
。int
: 4个字节,范围-2^31 ~ 2^31-1
,即正负21亿
之间。long
: 8个字节,范围-2^63 ~ 2^63-1
,比int
更大。如果要表示long
类型数值,需要L
或l
结尾。
1.3 浮点类型(float,double)
float
:4个字节,单精度浮点数,取到小数点后7
位有效数字。如果表示float
类型数值,需要F
或f
结尾。double
:8个字节,双精度浮点数,取到小数点后15
位有效数字。如果表示double
类型数值,需要D
或d
结尾。
扩展:浮点运算有时会有误差,为了实现精确运算可使用
java.math.BigDecimal
类型加以描述。
1.5 字符类型(char)
- char:2个字节,表示单个字符的数据类型。事实是一个16位无符号整数,值是对应字符的编码,如:
'a'
,'1'
,'中'
等。
- 开发中很少用到char类型,而使用String类型描述的多个字符组成的字符串,使用双引号
""
引起来。 - 需记住的ASII码字符:
'a':97
,'A':65
,'0':48
,空格:32
,换行符:10
- 常用转义符(逃逸字符):
\t
:制表符,\n
:换行,\"
,\'
,\\
:反斜杠本身,\b
:回退一格,\r
:回车 - 字符类型计算
- 一个字符加一个数字,得到
Unicode
码表中那个数之后的字符 - 两个字符相减得到它们在表中的距离
char
也可以和int
之间相互赋值
- 一个字符加一个数字,得到
2. 变量与常量
2.1 常量
- 常量是一个值,在程序运行的过程中不能再次发生改变
- 基本类型的值都可以认为是常量:
4
,3.4
,'a'
,true
;引用类型String
类的值"abc"
视为常量。 - 常量存储在常量缓冲区(常量池)中,有且只有一份,常量池中的值默认空间大小
int(32bit)
,double(64bit)
。
2.2 变量
- 变量是在栈内存中开辟的一块内存空间,程序执行过程中可以改变;
- 变量空间在创建的时候(声明变量),必须指定数据类型,变量空间的名字
- 变量空间,里面只能存储一个内容(值/引用)
- 空间内的类容的类型与定义时一致,内容可以改变
- 内存结构与执行过程:类的定义,编译,加载空间各个区,变量赋值
2.3 标识符(变量)命名规则
- 必须字母,数字,下划线以及美元$等组成,且首位非数字。
- 不能使用
Java
语言中的关键字,如class
,static
,void
,int
等。 - 区分大小写,长度无限制,但不能过长,尽量见名知意。
2.3 命名的规约
- 类名字:首字母大写,如果两个以上的单词,所有首字母都大写
- 变量名:首字母小写,如果两个以上的单词,之后的首字母大写
- 遵循驼峰式命名规约,所有名字都需要见名知义,为了增强程序的可读性
3. 数据类型之间的转换
3.1 基本数据类型之间转换
- 自动类型转换:从小类型到大类型自动转换
1 | byte --> short --> int --> long --> float --> double |
- 强制类型转换:需在被转换数据前加上类型,会造成精度损失或者溢出
1 | long big = 1024L\*1024\*1024; |
3.2其他数据类型之间转换
- 同种大类型之间才能发生转换
- 基本–基本 可以直接转换(自动 强制)
- 引用–引用 可以直接转化(自动 强制 – 上转型 下转型)
- 基本–引用 不可以直接进行转化(间接-桥梁-包装类)
- 小数据类型一致:整型–>整型 / 浮点–>浮点
- 比较内存空间的大小
- 大数据类型空间可以直接接受小数据类型的值(自动转换)
- 小数据类型空间不可以直接接受大数据类型的值(强制类型转换)
- 强制类型转换,写法好用,但是需要注意取值范围的问题,丢失一部分数据
1 | byte a = 1; int b = a;//自动直接转化就可以 |
- 小数据类型不一致:整型–>浮点
- 比较精确程度
- 浮点型的精确程度更高
- 任何一个浮点型空间都可以直接接受一个整型的值
- 反之需要进行强制类型转换(强行将小数点之后的部分去掉,只保留整数)
1 | int a = 1; float b = a;//自动直接转化 |
- 整型–>字符
- 每一个字符都对应这一个
Unicode
码 a–97
- 每一个字符都对应这一个
1 | char x = 'a'; int y = x;//自动转化 y--97 |
- 布尔类型很特殊
- 不能与其他基本类型之间发生转化
4. 运算符
- 算术运算符:
+
,-
,*
,/
,%
- 关系运算符:
>
,<
,>=
,<=
,==
,!=
- 自增减运算符:
++
,--
- 逻辑运算符:
&&
,||
,!
(短路特性:逻辑与&&
运算,若第一个条件为假,跳过第二个条件;逻辑或||
运算,若第一个条件为真,跳过第二个条件) - 三目运算符: 条件 ? 表达式1 : 表达式2
- 赋值运算符:
=
,+=
,-=
,*=
,=
5. 循环
while
循环和for
循环完全可以互换。while
循环主要用于明确循环条件,但不明确循环次数的场合for
循环主要用于明确次数或范围的场合while(true)
等价于for(;;)
,表示无限循环。
6. 数组
6.1 一维数组
数组类型[] 数组名 = new 数据类型[长度]
:动态方式
1 | 数组类型[] 数组名 = new 数据类型[长度] //动态方式 |
1 | 数组类型[] 数组名 = {初始值1, 初始值1, 初始值1, ...} //静态方式 |
6.2 二维数组
1 | 数组类型[][] 数组名 = new 数据类型[行数][列数] |
1 | 数组类型[][] 数组名 = {{初始值1, 初始值1, 初始值1},{值2,...} ...} |
二维数组
arr.length
表示行数,arr[0].length
表示此行的长度
7. 函数
- 函数是一块代码,接收零个或多个参数,做一件事情,并返回零个或一个值。
1 | public static int sum(int a, int b){ |
- 函数的调用:
函数名(参数值)
; 即使没有参数也需要()
,()
起到了调用函数的作用,如果有参数,则需要给出正确的数量和顺序 - 函数的返回:
return
停止函数的执行,并返回一个值,可以再赋值给变量,传递给另一个函数,甚至可以丢弃,有时候要的是副作用。