Java语法基础
注释、标识符,关键字
注释
平时我们编写代码,在代码量比较少的时候,我们还可以看懂自己写的,但是当项目结构一旦复杂起来,我们就需要用到注释了。
注释并不会被执行,是给写代码的人看的。
写注释是一个很好的习惯
写代码要注意规范
Java的注释有三种:单行注释;多行注释;文档注释
1 | //单行注释 |
JavaDoc ,可通过终端命令生成Api文档
1 | javadoc -encoding UTF-8 -charset UTF-8 *.java |
也可以通过Intellij IDEA生成,在工具栏中找到 Tools——>Generate JavaDoc…
关键字
标识符
Java所有的组成部分都需要名字。类名、变量名以及方法名都被称为标识符。
标识符注意点:
- 所有的标识符都应该以字母(A-z或者a-z),美元符($)、或者下划线(_)开始
- 首字符之后可以是字母(A-Z或者a-z),美元符($)、下划线(_)或数字的任何字符组合。
- 不能使用关键字作为变量名或方法名。
- 标识符是大小写敏感的
- 可以使用中文命名,但是一般不建议这样去使用,也不建议使用拼音,很Low,不规范
1 | //合法标识符举例:age、$salary、value、_1_value |
数据类型
Java是强类型语言,要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用。
1 | // 八大基本数据类型 |
位(bit):是计算机内部数据储存的最小单位,11001100是一个八位二进制数。
字节(byte):是计算机中数据处理的基本单位,习惯上用大写B来表示,1B(byte,字节)=8bit(位)
字符:是指计算机中使用的字母、数字、字和符号
1bit表示1位,1Byte表示一个字节1B=8b。1024B=1KB,1024KB=1MB,1024MB=1GB…
数据类型拓展
整数拓展
进制问题:
二进制 0b;十进制;八进制 0;十六进制 0x
1 | int i = 0b10; //二进制 输出2 |
浮点数拓展
float和double类型,表现的长度是有限的,同时它也是离散的,它存在舍入误差
的问题,他的结果是一个大约数,接近但不等于。
尽量不要使用浮点数进行比较,尤其是在做涉及钱的业务时。
看下面的例子:
1 | float f = 0.1f; //0.1 |
我们可以看出,浮点数是存在误差的。
Java中,我们可以用BigDecimal
这个数学工具类来执行上述的操作。
字符拓展
所有字符本质还是数字
编码: Unicode码 u0000-uFFFF —>UTF-8
,UTF-16,UTF-32
1 | //字符强制转换 |
转义字符
转义字符 | 作用 |
---|---|
\n | 换行 |
\t | 水平制表符 |
\r | 回车,将当前位置移到本行开头 |
\b | 退格,将当前位置移到前一列 |
\f | 换页,将当前位置移到下页开头 |
\\ | 代表一个反斜线字符’’\‘ |
\‘ | 代表一个单引号(撇号)字符 |
\“ | 代表一个双引号字符 |
\0 | 空字符(NULL) |
\ddd | 1到3位八进制数所代表的任意字符 \000 ~ \377 |
\uxxxx | Unicode转义字符,\u + 四个十六进制数字所代表的字符 \u0000 ~ \uFFFF |
布尔值拓展
1 | boolean flag = true; |
Less is More,代码要精简易读
类型转换
由于Java是强类型语言,所以要进行有些运算的时候,需要用到类型转换。
1 | 低--------------------------------------->高 |
运算中,不同类型的数据先转换为同一类型,然后进行运算。
1 | int i = 128; |
注意:
- 在类型转换时,要注意数据类型的取值范围,避免内存溢出。
- 不能对布尔值进行转换
- 不能把对象类型转换为不相干的类型
- 转换时还可能存在精度问题,比如将浮点数转换为int类型,会舍去小数部分。
操作比较大的数的时候,注意溢出问题
1 | //JDK7以后,数字之间可以用下划线分割,下划线并不会被打印出来 |
变量、常量、作用域
变量
变量就是可以变化的量!
Java是一种强类型语言,每个变量都必须声明其类型。
Java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域。
1 | type varNam [= value][{,varName[= value],...}]; |
注意:
每个变量都有类型,类型可以是基本类型,也可以是引用类型。
变量名必须是合法的标识符。
变量声明是一条完整的语句,因此每一个声明都必须以分号结束。
类变量、实例变量、局部变量
1 | public class Variable{ |
类变量:从属于类,作用域是在这个类内,随类一起出现,一起消失。
实例变量:从属于对象;如果不进行初始化,数值类型默认值为 0 | 0.0,char类型默认为一个空格,布尔类型默认值为false;除了基本类型,其余的默认都为 null。
局部变量,必须声明和初始化值,作用域仅限方法之内。
常量
常量(constant):初识化(initialize)后不能再改变值!不会变动的值。
所谓常量可以理解成一种特殊的变量,它的值被设定后,在程序运行过程中不允许被改变。
常量名一般使用大写字符表示。
1 | final 常量名 = 值; |
说明:修饰符,不存在先后顺序,
final static double PI = 3.14
和static final double PI = 3.14
是一样的。
变量的命名规范
- 所有变量、方法、类名:见名知意
- 类成员变量:首字母小写和驼峰原则:monthSalary
- 局部变量:首字母小写和驼峰原则
- 常量:大写字母和下划线:MAX_VALUE
- 类名:首字母大写和驼峰原则:Man,GoodMan
- 方法名:首字母小写和驼峰原则:run(),runRun()
运算符
Java语言支持如下运算符:
1 | 算术运算符: +,-,*,/,%,++,-- |
算数运算符
基本运算符
1 | +(加),-(减),*(乘),/(除),%(模,取余) |
1 | 低--------------------------------------->高 |
不同类型相互运算时,结果的类型总是与要计算的数中优先级最高的那个数的类型保持一致,但最低为int,即当只有short、byte、char相互运算时,结果仍为int类型。
1 | public class Test { |
自增自减运算符
1 | // ++ -- 自增,自减 一元运算符 |
关系运算符
关系运算符计算后返回的结果是布尔值
,常与if
判断语句结合使用。
逻辑运算符
1 | // &&(与),||(或),!(非) |
位运算
1 | A和B都是二进制数 |
位运算由于是操作二进制数,所以效率极高。
扩展运算符
看下面例子
1 | a += b; //就相当于 a=a+b |
条件运算符
1 | 条件运算符是三元运算符 |
运算符优先级
优先级 | 运算符 | 结合性 |
---|---|---|
1 | ()、[]、{} | 从左向右 |
2 | !、+、-、~、++、– | 从右向左 |
3 | *、/、% | 从左向右 |
4 | +、- | 从左向右 |
5 | <<、>>、>>> | 从左向右 |
6 | <、<=、>、>=、instanceof | 从左向右 |
7 | ==、!= | 从左向右 |
8 | & | 从左向右 |
9 | ^ | 从左向右 |
10 | | | 从左向右 |
11 | && | 从左向右 |
12 | || | 从左向右 |
13 | ? : | 从右向左 |
14 | =、+=、-=、*=、/=、&=、|=、^=、~=、<<=、>>=、>>>= | 从右向左 |
拓展
字符串连接符 +
1
2
3
4int a = 10;
int b = 20;
System.out.println("引号在前面"+a+b);// 输出 引号在前面1020
System.out.println(a+b+"引号在后面");// 输出 30引号在后面
可见,如果字符串在前面,则它后面连接的内容不会进行运算,如果字符串在后面,则它前面连接的内容会进行运算。
很多运算,我们需要一些工具类来操作!如下代码用
Math
类进行幂运算。1
double power = Math.pow(2,3); //2的3次方,8.0
包机制
为了更好地组织类,Java提供了包机制,用于区别类名的命名空间。
包语句的语法格式为:
1 | package pkg1[. pkg2[. pkg3...]]; |
一般利用公司域名倒置作为包名
为了能够使用某一个包的成员,我们需要在Java 程序中明确导入该包。使用import
语句可完成此功能
1 | import package1[.package2...].(classname|*); |