从头开始学Java—Java基础语法
一、注释、标识符、关键字
注释
在上课的时候,所有教语言的老师都会要求我们写注释,并告诉我们,书写注释是一个非常好的习惯*,注释虽然对运行代码没有帮助,但是他能帮助别人看懂我的代码。何止别人,我在课设答辩的时候,也都是靠注释保命的。
Java中的注释有三种:
-
单行注释
//这是单行注释符号,这里写注释 这里写代码 -
多行注释
/* 这是多行注释符号 可以注释一段文字 */ 这里写代码 -
文档注释
/** *这是JavaDoc注释即文档注释 *每一行注释前都有一个* *以“/**”开头 * 这个注释是有功能的,可以添加一些描述 * @Description hello world * @Author Jerry */
标识符
-
Java所有的组成部分都需要名字。类名,变量名以及方法名都称之为标识符。
-
标识符的命名规则:由字母(A-Z或a-z),数字,下划线(_),美元符($)组成,但数字不能开头。
-
标识符不能是java的关键字和保留字,但可以包含关键字和保留字,不能包含空格。
-
标识符只能包含美元符($),不能包含@,#等其它字符。
-
标识符区分大小写。
-
Java 9规定:不允许单独使用下划线作为分隔符。
-
Java 的关键字加上goto const true false nulll 一共有53个关键字和保留字,都不能作为Java的标识符。
-
合法标识符举例:aBig,Abc,_1jerry,_1_Jerry,$jerry……
-
非法标识符举例:123,1abc,#1j,@jerry……
关键字
Java关键字是对Java编译器有特殊含义的字符串,用来表示一种数据类型,或者表示程序的结构等,关键字不能用作变量名、方法名、类名、包名和参数。
| 关键字 | 含义 |
|---|---|
| abstract | 表明类或者成员方法具有抽象属性 |
| assert | 断言,用来进行程序调试 |
| boolean | 基本数据类型之一,声明布尔类型的关键字 |
| break | 提前跳出一个块 |
| byte | 基本数据类型之一,字节类型 |
| case | 用在switch语句之中,表示其中的一个分支 |
| catch | 用在异常处理中,用来捕捉异常 |
| char | 基本数据类型之一,字符类型 |
| class | 声明一个类 |
| const | 保留关键字,没有具体含义 |
| continue | 回到一个块的开始处 |
| default | 默认,例如,用在switch语句中,表明一个默认的分支。Java8 中也作用于声明接口函数的默认实现 |
| do | 用在do-while循环结构中 |
| double | 基本数据类型之一,双精度浮点数类型 |
| else | 用在条件语句中,表明当条件不成立时的分支 |
| enum | 枚举 |
| extends | 表明一个类型是另一个类型的子类型。对于类,可以是另一个类或者抽象类;对于接口,可以是另一个接口 |
| final | 用来说明最终属性,表明一个类不能派生出子类,或者成员方法不能被覆盖,或者成员域的值不能被改变,用来定义常量 |
| finally | 用于处理异常情况,用来声明一个基本肯定会被执行到的语句块 |
| float | 基本数据类型之一,单精度浮点数类型 |
| for | 一种循环结构的引导词 |
| goto | 保留关键字,没有具体含义 |
| if | 条件语句的引导词 |
| implements | 表明一个类实现了给定的接口 |
| import | 表明要访问指定的类或包 |
| instanceof | 用来测试一个对象是否是指定类型的实例对象 |
| int | 基本数据类型之一,整数类型 |
| interface | 接口 |
| long | 基本数据类型之一,长整数类型 |
| native | 用来声明一个方法是由与计算机相关的语言(如C/C++/FORTRAN语言)实现的 |
| new | 用来创建新实例对象 |
| package | 包 |
| private | 一种访问控制方式:私用模式 |
| protected | 一种访问控制方式:保护模式 |
| public | 一种访问控制方式:共用模式 |
| return | 从成员方法中返回数据 |
| short | 基本数据类型之一,短整数类型 |
| static | 表明具有静态属性 |
| strictfp | 用来声明FP_strict(单精度或双精度浮点数)表达式遵循[IEEE 754](https://baike.baidu.com/item/IEEE 754)算术规范 |
| super | 表明当前对象的父类型的引用或者父类型的构造方法 |
| switch | 分支语句结构的引导词 |
| synchronized | 表明一段代码需要同步执行 |
| this | 指向当前实例对象的引用 |
| throw | 抛出一个异常 |
| throws | 声明在当前定义的成员方法中所有需要抛出的异常 |
| transient | 声明不用序列化的成员域 |
| try | 尝试一个可能抛出异常的程序块 |
| void | 声明当前成员方法没有返回值 |
| volatile | 表明两个或者多个变量必须同步地发生变化 |
| while | 用在循环结构中 |
二、数据类型
Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。
byte:
- byte 数据类型是8位、有符号的,以二进制补码表示的整数;
- 最小值是 -128(-2^7);最大值是 127(2^7-1);默认值是 0;
short:
- short 数据类型是 16 位、有符号的以二进制补码表示的整数
- 最小值是 -32768(-2^15);最大值是 32767(2^15 - 1);默认值是 0;
int:
- int 数据类型是32位、有符号的以二进制补码表示的整数;
- 最小值是 -2,147,483,648(-2^31);
- 最大值是 2,147,483,647(2^31 - 1);
- 一般地整型变量默认为 int 类型;
- 默认值是 0 ;
long:
- long 数据类型是 64 位、有符号的以二进制补码表示的整数;
- 最小值是 -9,223,372,036,854,775,808(-2^63);最大值是 9,223,372,036,854,775,807(2^63 -1);默认值是 0L;
- 这种类型主要使用在需要比较大整数的系统上;
float:
- float 数据类型是单精度、32位、符合IEEE 754标准的浮点数;
- float 在储存大型浮点数组的时候可节省内存空间;
- 默认值是 0.0f;
- 浮点数不能用来表示精确的值,如货币;
double:
- double 数据类型是双精度、64 位、符合IEEE 754标准的浮点数;
- 浮点数的默认类型为double类型;
- double类型同样不能表示精确的值,如货币;
- 默认值是 0.0d;
boolean:
- boolean数据类型表示一位的信息;
- 只有两个取值:true 和 false;
- 这种类型只作为一种标志来记录 true/false 情况;
- 默认值是 false
char:
- char类型是一个单一的 16 位 Unicode 字符;
- 最小值是 \u0000(即为 0);
- 最大值是 \uffff(即为65、535);
- char 数据类型可以储存任何字符;
三、类型转换
整型、实型(常量)、字符型数据可以混合运算。运算中,不同类型的数据先转化为同一类型,然后进行运算。
自动类型转换从低级到高级。强制类型转换从高级到低级。
低 ------------------------------------> 高
byte,short,char—> int —> long—> float —> double
1. 不能对布尔值进行转换
2. 不能把对象类型转换成不相干的类型,比如说你不能把🐖转换成人
3.在把高容量转换到低容量数据类型时,要强制转换
4.转换时可能存在数据溢出等问题`
四、变量、常量
变量
变量,就是可以变化的量。Java是一种强类型语言,每个变量都必须声明其类型。Java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域。变量分为全局变量,局部变量,类变量(使用范围从大到小排列)。
注意:每个变量都有类型,类型可以是基本类型,也可以是引用类型;变量名必须是合法的标识符;变量声明是一条完整的语句,因此每一个声明必须以英文分号结束。
常量
常量,是初始化后不能再变化的值。可以看作是特殊的变量,他的值被设定后,在程序中不能被改变。定义常量的关键字为final
例: final 常量名 = 值;常量名一般使用大写字母表示
final double PI = 3.14;
变量的命名规范
- 所有变量、方法名、类名要见名知意
- 类成员变量:首字母小写,命名遵守驼峰原则 ,即除第一个单词后面的单词首字母大写,如 finalExamination
- 局部变量:首字母小写,命名遵守驼峰原则
- 常量:大写字母,有多个单词用下划线分割开如 MAX_VALUE
- 类名:首字母大写,命名遵守驼峰原则,如 LoginProxy()
- 方法名::首字母小写,命名遵守驼峰原则,如 getUsers()
五、运算符
算数运算符
算术运算符用在数学表达式中,它们的作用和在数学中的作用一样。
| 操作符 | 描述 |
|---|---|
| + | 加法 , 相加运算符两侧的值 |
| - | 减法 , 左操作数减去右操作数 |
| * | 乘法 , 相乘操作符两侧的值 |
| / | 除法 ,左操作数除以右操作数 |
| % | 取余 , 左操作数除以右操作数的余数 |
| ++ | 自增: 操作数的值增加1 |
| -- | 自减: 操作数的值减少1 |
前缀自增自减法(++a,--a): 先进行自增或者自减运算,再进行表达式运算。
后缀自增自减法(a++,a--): 先进行表达式运算,再进行自增或者自减运算
赋值运算符
| 操作符 | 描述 |
|---|---|
| = | 简单的赋值运算符,将右操作数的值赋给左侧操作数 |
| + = | 加和赋值操作符,它把左操作数和右操作数相加赋值给左操作数 |
| - = | 减和赋值操作符,它把左操作数和右操作数相减赋值给左操作数 |
| * = | 乘和赋值操作符,它把左操作数和右操作数相乘赋值给左操作数 |
| / = | 除和赋值操作符,它把左操作数和右操作数相除赋值给左操作数 |
| (%)= | 取模和赋值操作符,它把左操作数和右操作数取模后赋值给左操作数 |
| << = | 左移位赋值运算符 |
| >> = | 右移位赋值运算符 |
| &= | 按位与赋值运算符 |
| ^ = | 按位异或赋值操作符 |
| | = | 按位或赋值操作符 |
关系运算符
Java定义了位运算符,应用于整数类型(int),长整型(long),短整型(short),字符型(char),和字节型(byte)等类型。
位运算符作用在所有的位上,并且按位运算。
| 运算符 | 描述 |
|---|---|
| == | 检查如果两个操作数的值是否相等,如果相等则条件为真。 |
| != | 检查如果两个操作数的值是否相等,如果值不相等则条件为真。 |
| > | 检查左操作数的值是否大于右操作数的值,如果是那么条件为真。 |
| < | 检查左操作数的值是否小于右操作数的值,如果是那么条件为真。 |
| >= | 检查左操作数的值是否大于或等于右操作数的值,如果是那么条件为真。 |
| <= | 检查左操作数的值是否小于或等于右操作数的值,如果是那么条件为真。 |
instanceof 运算符
该运算符用于操作对象实例,检查该对象是否是一个特定类型(类类型或接口类型)。
( Object reference variable ) instanceof (class/interface type)
逻辑运算符
| 操作符 | 描述 |
|---|---|
| && | 称为逻辑与运算符。当且仅当两个操作数都为真,条件才为真。 |
| | | | 称为逻辑或操作符。如果任何两个操作数任何一个为真,条件为真。 |
| ! | 称为逻辑非运算符。用来反转操作数的逻辑状态。如果条件为true,则逻辑非运算符将得到false。 |
位运算符
& , | , ^ , ~ , >> , << , >>>
条件运算符
条件运算符也被称为三元运算符。该运算符有3个操作数,并且需要判断布尔表达式的值。该运算符的主要是决定哪个值应该赋值给变量。
variable x = (expression) ? value if true : value if false
// 如果 a 等于 1 成立,则设置 b 为 20,否则为 30
b = (a == 1) ? 20 : 30;
扩展赋值运算符
+= , -= , *= , /=
运算符优先级
一般使用括号()来分割使用,把式子表示的明明白白
| 类别 | 操作符 | 关联性 |
|---|---|---|
| 后缀 | () [] . (点操作符) | 左到右 |
| 一元 | expr++ expr-- | 从左到右 |
| 一元 | ++expr --expr + - ~ ! | 从右到左 |
| 乘性 | * /% | 左到右 |
| 加性 | + - | 左到右 |
| 移位 | >> >>> << | 左到右 |
| 关系 | > >= < <= | 左到右 |
| 相等 | == != | 左到右 |
| 按位与 | & | 左到右 |
| 按位异或 | ^ | 左到右 |
| 按位或 | | | 左到右 |
| 逻辑与 | && | 左到右 |
| 逻辑或 | | | | 左到右 |
| 条件 | ?: | 从右到左 |
| 赋值 | = + = - = * = / =%= >> = << =&= ^ = | = | 从右到左 |
| 逗号 | , | 左到右 |
六、包机制、JavaDoc
包机制
包,相当于在PC中常用的文件夹。Java 使用包这种机制是为了防止命名冲突,访问控制,提供搜索和定位类、接口、枚举和注释等。
- 包的作用
- 把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用。
- 如同文件夹一样,包也采用了树形目录的存储方式。同一个包中的类名字是不同的,不同的包中的类的名字是可以相同的,当同时调用两个不同包中相同类名的类时,应该加上包名加以区别。因此,包可以避免名字冲突。
- 包也限定了访问权限,拥有包访问权限的类才能访问某个包中的类。
一般使用公司域名倒置为包名,如,博客园www.cnblogs.com ,包名com.cnblogs.www
为了能够使用某一个包的成员,我们可以在Java程序中使用“import"语句导入该包
import package[.package2...].(classname|*);
JavaDoc
JavaDoc命令是用来生成自己的API文档的,就如同Java的APIJDK8在线帮助文档
| 标签 | 描述 | 示例 |
|---|---|---|
| @author | 标识一个类的作者 | @author description |
| @deprecated | 指名一个过期的类或成员 | @deprecated description |
| 指明当前文档根目录的路径 | Directory Path | |
| @exception | 标志一个类抛出的异常 | @exception exception-name explanation |
| 从直接父类继承的注释 | Inherits a comment from the immediate surperclass. | |
| 插入一个到另一个主题的链接 | ||
| 插入一个到另一个主题的链接,但是该链接显示纯文本字体 | Inserts an in-line link to another topic. | |
| @param | 说明一个方法的参数 | @param parameter-name explanation |
| @return | 说明返回值类型 | @return explanation |
| @see | 指定一个到另一个主题的链接 | @see anchor |
| @serial | 说明一个序列化属性 | @serial description |
| @serialData | 说明通过writeObject( ) 和 writeExternal( )方法写的数据 | @serialData description |
| @serialField | 说明一个ObjectStreamField组件 | @serialField name type description |
| @since | 标记当引入一个特定的变化时 | @since release |
| @throws | 和 @exception标签一样. | The @throws tag has the same meaning as the @exception tag. |
| 显示常量的值,该常量必须是static属性。 | Displays the value of a constant, which must be a static field. | |
| @version | 指定类的版本 | @version info |
浙公网安备 33010602011771号