JavaSE:基础语法
JavaSE:基础语法
注释
Java中的注释有三种:
- 单行注释:只能注释当前行,以//开始,直到行结束
//输出HelloWorld!
- 多行注释:注释一段文字,以/ * 开始以 * / 结束!
/* 这是我们Java程序的主入口, main方法也是程序的主线程。 */
-
文档注释:用于生产API文档,配合JavaDoc。
/**再按回车键生成文档注释
平时我们编写代码,在代码量比较少的时候,我们还可以看懂自己写的,但是当项目结构一旦复杂起
来,我们就需要用到一个注释了,注释就类似于我们上学时候写的笔记,我们看着笔记就知道自己写的
什么东西了!平时我们一定要养成编写注释的习惯。
标识符
Java语言中,对于变量,常量,函数,语句块也有名字,我们统统称之为Java标识符。标识符是用来给类、对象、方法、变量、接口和自定义数据类型命名的。
关于 Java 标识符,有以下几点需要注意:
-
所有的标识符都应该以字母(A-Z 或者 a-z),美元符($)、或者下划线(_)开始
-
首字符之后可以是字母(A-Z 或者 a-z),美元符($)、下划线(_)或数字的任何字符组合
-
不能使用关键字作为变量名或方法名。
-
标识符是大小写敏感的
-
合法标识符举例:age、$salary、_value、__1_value
-
非法标识符举例:123abc、-salary、#abc
关键字
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 |
关键字 | 含义 |
---|---|
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?fromModule=lemma_inlink)算术规范 |
super | 表明当前对象的父类型的引用或者父类型的构造方法 |
switch | 分支语句结构的引导词 |
synchronized | 表明一段代码需要同步执行 |
this | 指向当前实例对象的引用 |
throw | 抛出一个异常 |
throws | 声明在当前定义的成员方法中所有需要抛出的异常 |
transient | 声明不用序列化的成员域 |
try | 尝试一个可能抛出异常的程序块 |
void | 声明当前成员方法没有返回值 |
volatile | 表明两个或者多个变量必须同步地发生变化 |
while | 用在循环结构中 |
数据类型
Java是一种强类型语言,每个变量都必须声明其类型。
强弱类型语言:
强类型语言:也称为强类型定义语言。要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用。也就是说,一旦一个变量被指定了某个数据类型,如果不经过转换,那么它就永远是这个数据类型了。安全性高,运行效率相对较慢,鱼和熊掌不可兼得!Java、.NET、C++等都是强制类型定义的。
弱类型语言:也称为弱类型定义语言。与强类型定义相反。像vb,php等就属于弱类型语言· 在VBScript中,可以将字符串‘12’和整数3进行连接得到字符串‘123’,也可以把它看成整数123,而不需要显示转换。
Java的数据类型分为两大类:基本类型(primitive type)和引用类型 (reference type)
基本数据类型:
数值类型:
整数类型:
byte占1个字节 范围:-128-127
short占2个字节 范围:-32768-32767
int占4个字节 范围:-2147483648-2147483647
long占8个字节 范围:-9223372036854775808-9223372036854775807
浮点类型:
float占4个字节
double占8个字节
字符类型:
char占2个字节
boolean类型:
占一位只有true或者false两个
引用类型:
类,接口,数组
注意:
字符串String类型也是一个类也属于引用类型。引用类型的大小统一为4个字节记录其引用对象的地址。java语言的整数类型默认为int浮点类型默认double。
浮点数使用总结:
-
默认是double。
-
浮点数存在舍入误差,很多数字不能精确表示。如果需要进行不产生舍入误差的精确数字计算,需要使用BigDecimal类。
-
避免比较中使用浮点数。
类型转换
由于Java是强类型语言,所以要进行有些运算的时候的,需要用到类型转换。
数据类型转换必须满足如下规则:
-
不能对boolean类型进行类型转换。
-
不能把对象类型转换成不相关类的对象。
-
在把容量大的类型转换为容量小的类型时必须使用强制类型转换。
-
转换过程中可能导致溢出或损失精度,例如:
int i =128; byte b = (byte)i;
因为 byte 类型是 8 位,最大值为127,所以当 int 强制转换为 byte 类型时,值 128 时候就会导致溢出。
-
浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入。
(int)23.7 == 23; (int)-45.89f == -45
自动类型转换
自动类型转换:容量小的数据类型可以自动转换为容量大的数据类型。
例如: short数据类型的位数为16位,就可以自动转换位数为32的int类型,同样float数据类型的位数为32,可以自动转换为64位的double类型。
强制类型转换
强制类型转换的语法格式: (type)var ,运算符“()”中的type表示将值var想要转换成的目标数据类型。 条件是转换的数据类型必须是 兼容的。
注意:当将一种类型强制转换成另一种类型,而又超出了目标类型的表示范围,就会被截断成为一个完全不同的值,溢出。
变量
变量是什么:就是可以变化的量!
我们通过变量来操纵存储空间中的数据,变量就是指代这个存储空间!空间位置是确定的,但是里面放置什么值不确定!
这就好像我们家里有一个大衣柜,里面有十分多的小格子,我们给格子上贴上标签,放衣服,放鞋子,放手表等等,此时我们知道了哪里该放什么,但是,我们并不知道里面到底放的是什么牌子的鞋子,是衣服还是裤子。那个标签就相当于我们的变量,我们给他起了个名字,但是里面要放什么需要我们自己去放。
Java是一种强类型语言,每个变量都必须声明其类型。
注意事项:
-
每个变量都有类型,类型可以是基本类型,也可以是引用类型。
-
变量名必须是合法的标识符。
-
变量声明是一条完整的语句,因此每一个声明都必须以分号结束。
变量作用域
变量根据作用域可划分为三种:
-
类变量(静态变量: static variable):独立于方法之外的变量,用 static 修饰。
-
实例变量(成员变量:member variable):独立于方法之外的变量,不过没有 static 修饰。
-
局部变量(lacal variable):类的方法中的变量。在使用前必须先声明和初始化(赋初值)。局部变量没有默认值,所以局部变量被声明后,必须经过初始化,才可以使用。
常量
常量(Constant):初始化(initialize)后不能再改变值!不会变动的值。常量名一般使用大写字符。
注意命名规范:
-
所有变量、方法、类名:见名知意
-
类成员变量:首字母小写和驼峰原则 : monthSalary
-
局部变量:首字母小写和驼峰原则
-
常量:大写字母和下划线:MAX_VALUE
-
类名:首字母大写和驼峰原则: Man, GoodMan
-
方法名:首字母小写和驼峰原则: run(), runRun()
运算符
Java 语言支持如下运算符:
-
算术运算符: +,-,*,/,%,++,–
-
赋值运算符 =
-
关系运算符: >,<,>=,<=,==,!= instanceof
-
逻辑运算符: &&,||,!
-
位运算符: &,|,^,~ , >>,<<,>>>
-
条件运算符 ?:
-
扩展赋值运算符:+=,-=,*=,/=
注意:
在整数运算中:如果两个操作数有一个为Long, 则结果也为long没有long时,结果为int。即使操作数全为shot,byte,结果也是int。
在浮点数运算中:如果两个操作数有一个为double, 则结果为double.只有两个操作数都是float, 则结果才为float。
在取模运算中:负数%负数=负数;负数%正数=负数;正数%负数=正数;
自增自减运算中:
public static void main(String[] args) {
int a = 3; int b = a++; //执行完后,b=3。先给b赋值,再自增。
int c = ++a; //执行完后,c=5。先自增,再给b赋值
}
在逻辑运算中:逻辑与和逻辑或采用短路的方式(&& ||)。从左到右计算,如果确定值则不会再计算下去。在两个操作数都为true时,结果才为true,但是当得到第一个操作为false时,其结果就必定是false,这时候就不会再判断第二个操作了。
逻辑与(&&)只要有一个为false, 则直接返回false。
逻辑或(||)只要有一个为true, 则直接返回true。
在位运算中:右移一位相当于除2取商。左移一位相当于乘2。
在字符串连接运算中:“+” 运算符两侧的操作数中只要有一个是字符串(String)类型,系统会自动将另一个操作数转换为字符串然后再进行连接。
在三目条件运算中:x ? y : z 其中x为boolean类型表达式,先计算x的值,若为true,则整个三目运算的结果为表达式y的值,否则整个运算结果为表达式z的值。
包机制
存在这样一个问题:当定义了多个类的时候,可能会发生类名的重复问题。
解决方式:在java中采用包机制处理开发者定义的类名冲突问题。
就好比我们平时的用电脑,一个文件夹下不能存在同名的文件,我们要是有这样的需求,但是又不想换名字,我们就可以考虑使用新建一个文件夹来存放!在我们的Java中也是这样的。
为了能够使用某一个包的成员,我们需要在 Java 程序中明确导入该包。使用 “import” 语句可完成此功能。