Java基本语法
本章一起来探讨下Java的基本语法。主要从以下几个方面展开:
- Java关键字
- Java标识符
- Java变量
- Java数据类型
- Java运算符
学完本章内容之后,我们对Java会有更深的认识,同时也可以使用Java完成基本的操作。
一、关键字
1.1 含义
被java赋予了特殊含义,用作专门用途的字符串。
例如:
public
:表示公共的class
:定义类
1.2特点
- 所有的单词都是小写
- goto:表示java的预留关键字
1.3 关键字列表
Java提供了很多关键字,具体如下表:
用于定义数据类型的关键字 | ||||
class | interface | enum | byte | short |
int | long | float | double | char |
boolean | void | |||
用于定义数据类型值的关键字 | ||||
true | false | null | ||
用于定义流程控制的关键字 | ||||
if | else | switch | case | default |
while | do | for | break | continue |
return |
用于定义访问修饰符的关键字 | ||||
private | protected | public | ||
用于定义类,函数,变量修饰符的关键字 | ||||
abstract | final | static | synchronized | |
用于定义类与类之间关系的关键字 | ||||
extends | implements | |||
用于定义建立实例及引用实例,判断实例的关键字 | ||||
new | this | super | instanceof | |
用于异常处理的关键字 | ||||
try | catch | finally | throw | throws |
用于包的关键字 | ||||
package | import | |||
其他修饰符关键字 | ||||
native | strictfp | transient | volatile | assert |
二、标识符
2.1 Java标识符含义
Java 对各种变量、方法和类等要素命名时使用的字符序列称为标识符
凡是自己可以起名字的地方都叫标识符。
2.2 Java标识符命名的规则
1.由26个英文字母大小写,数字:0-9 ,_或 $ 组成
2.数字不可以开头。
3.不可以使用关键字和保留字,但能包含关键字和保留字。
4.Java中严格区分大小写,长度无限制。
5.标识符不能包含空格。
注意:取名满足见名知意,长度不宜过长。小于30个字符;
2.3 java标识符的命格规则
很多公司里面,对命名有严格的要求
1.包名: xxxyyyzzz
所有的名称都是小写;
多个单词都是小写;
可以使用.创建多层包名
2.类名和接口名 XxxYyyZzz
首字母大写;
多个单词组成,首字母都是大写;
3.变量和方法名 xxxYyyZzz
首个单词首字母小写;
多个单词组成,除了第一个单词首字母小写,其余单词首字母大写;
4.常量的名称 XXX_YYY_ZZZ
常量的名称都是大写;
多个单词组成使用下划线链接;
三、变量
3.1 概念
- 内存中的一个存储区域;
- 该区域有自己的名称(变量名)和类型(数据类型);
- Java中每个变量必须先声明,后使用;
- 该区域的数据可以在同一类型范围内不断变化;
- 变量是通过使用变量名来访问这块区域的;
- 变量的作用域:一对{ }之间有效
3.2 定义格式
数据类型 变量名 = [初始值];
//例如
int num1 = 90;
3.3 变量的分类
a.按照申明(创建)的位置划分
1.成员变量|全局变量|属性
a.定义在方法的外部,类的内部;
b.范围在该类下所有的地方都可以使用,包括里面多个方法内部;
2.局部变量
a.定义在方法或者代码块的内容;
b.只在定义的方法或者代码块的{}里面使用;
之间的区别:
a.定义位置不一样;
b.局部变量在使用之前必须赋值。全局变量会生成对应数据类型的默认值;
b.按照数据类型划分
1.基本数据类型
数值型:
整数型:
byte:
short:
int:
long:
默认的类型是int
浮点型:
float
double:
Java 的浮点型常量默认为 double 型,声明 float 型常量,须后加 ‘f’ 或 ‘F’。
字符型:
char:
a.使用 '' 单引号定义内容;
b.可以存放一个中文
c.可以存放Java中还允许使用转义字符‘\’来将其后的字符转变为特殊字符型常量。例如:char c3 = '\n'; -- '\n'表示换行符
d.直接使用 Unicode 值来表示字符型常量:‘\uXXXX’。其中,XXXX代表一个十六进制整数。如: \u000a 表示 \n。
e.char 类型是可以进行运算的。因为它都对应有 Unicode 值。
布尔型:
boolean:
boolean类型数据只允许取值true和false
2.引用数据类型
除了以上8种基本类型之外,其余的都是引用数据类型。包括:String、Object包装类等
3.4 变量初始化
声明一个变量之后,必须用赋值语句对变量进行显式初始化,千万不要使用未初始化的局部变量。
例如,Java编译器认为下面的语句序列是错误的:
public static void main(String[] args) {
String username; //Variable 'username' might not have been initialized
System.out.println("username = " + username);
}
要想对一个已经声明过的变量进行赋值,就需要将变量名放在等号(=)左侧,相应取值的Java表达式放在等号的右侧
public static void main(String[] args) {
String username;
username = "猪小明"; //赋值
System.out.println("username = " + username);
}
也可以将变量的声明和初始化放在同一行中。例如:
String username = "猪小明"; //赋值
3.5 常量
在Java中,利用关键字final
指示常量。例如:
public static void main(String[] args) {
final double PI = 3.14;
//PI = 3.10; //异常 Cannot assign a value to final variable 'PI'
System.out.println("PI = " + PI);
}
关键字final表示这个变量只能被赋值一次。一旦被赋值之后,就不能够再更改了。习惯上,常量名使用全大写。
四、Java数据类型
Java是—种强类型语言。这就意味着必须为每一个变量声明一种类型,在内存中分配了不同大小的内存空间。在Java中,一共有8种基本类型(primitive type),其中有4种整型、2种浮点类型、1种用于表示Unicode编码的字符单元的字符类型char和1种用于表示真值的boolean类型。
4.1 整型
Java各整型类型有固定的数据范围和字段长度,不受操作系统OS的影响,以保证Java程序的可移植性。
并且Java提供四种整型(byte
,short
,int
,long
)用于表示没有小数部分的值,并且允许它们为负数。
Java的整型默认为int
类型,如果声明long
型整型必须在数值后添加l
或者L
int num1 = 100;
long num2 = 100L;
在通常情况下,int类型最常用。但如果表示星球上的居住人数,就需要使用long类型了,因为int类型数值范围最大的是 2的31次方(正好超过20亿)。这样的话如果使用int肯定会超过范围。
4.2 浮点型
与整数类型类似,Java 浮点类型也有固定的表数范围和字段长度,不受具体OS的影响。
浮点类型通常用于表示有小数部分的数值。float表示单精度;double表示双精度,同时也是float的两倍
Java 的浮点型常量默认为 double 型,声明 float 型常量,须后加 ‘f’
或 ‘F’
。
double d1 = 10.5;
float d2 = 10.5F;
浮点数值不适用于无法接受舍入误差的金融计算中。例如,命令System.out.printIn(2.0-1.1)将打印出0.8999999999999999,而不是人们想象的0.9。
这种舍入误差的主要原因是浮点数值采用二进制系统表示,而在二进制系统中无法精确地表示分数1/10。
这 就好像十进制无法精确地表示分数1/3一样。如果在数值计算中不允许有任何舍入误差,就应该使用BigDecimal
类,例如金额
4.3 char字符类型
char 型数据用来表示通常意义上"字符"。
字符型常量的三种表现形式:
- 字符常量是用单引号(‘ ’)括起来的单个字符,涵盖世界上所有书面语的字符。例如:char c1 = ‘a’; char c2 = ‘中’; char c3 = ‘9’;
- Java中还允许使用转义字符‘\’来将其后的字符转变为特殊字符型常量。例如:char c3 = ‘\n’; – '\n’表示换行符
- 直接使用 Unicode 值来表示字符型常量:‘\uXXXX’。其中,XXXX代表一个十六进制整数。如:\u000a 表示 \n。
char 类型是可以进行运算的。因为它都对应有 Unicode 值。
4.4 boolean
boolean 类型适于逻辑运算,一般用于程序流程控制:
- if条件控制语句;
- while循环控制语句;
- do-while循环控制语句;
- for循环控制语句;
boolean类型数据只允许取值true和false,不可以0或非 0 的整数替代true和false,这点和C语言不同。
4.5 基本数据类型转换
经常需要将一种数值类型转为另一种数值类型,但是在转换的过程中一定要注意可能会造成数据的精度丢失,例如:double类型转为int类型,那么小数点后面的数值就会丢失;
Java针对现实情况分别提高两种数值转换方式:自动类型转换
和强制类型转换
4.5.1 自动类型转换
容量小的类型自动转换为容量大的数据类型。数据类型按容量大小排序为:
有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那种数据类型,然后再进行计算。
byte,short,char之间不会相互转换,他们三者在计算时首先转换为int类型。
当把任何基本类型的值和字符串值进行连接运算时(+),基本类型的值将自动转化为字符串类型。
4.5.2 强制类型转换
将容量大的数据类型转换为容量小的数据类型。使用时要加上强制转换符(()
),但可能造成精度降低或溢出,格外要注意。
通常,字符串不能直接转换为基本类型,但通过基本类型对应的包装类则可以实现把字符串转换成基本类型。如:
String a = "43"; int i = Integer.parseInt(a);
boolean类型不可以转换为其它的数据类型。
4.6 大数值
如果基本的整数和浮点数精度不能够满足需求,那么可以使用java.math包中的两个很有用的类:BigInteger
和BigDecimal
。
这两个类可以处理包含任意长度数字序列的数值。
- BigIntcger类实现了任意精度的整数运算,
- BigDecimal实现了任意精度的浮点数运算。
使用静态的valueOf方法可以将普通的数值转换为大数值:
BigInteger bigInteger = BigInteger.valueOf(10);
BigDecimal bigDecimal = BigDecimal.valueOf(2.0);
遗憾的是,不能使用人们熟悉的算术运算符(如:+和*)处理大数值。而需要使用大数 值类中的add和multiply方法。
4.6.1 BigInteger
BigIntcger类实现了任意精度的整数运算。常用方法如下:
BigInteger方法名 | 含义 |
---|---|
static valueOf() | 将参数转换为BigInteger |
add() | 相加 |
subtract() | 相减 |
multiply() | 相乘 |
divide() | 相除取整 |
remainder() | 取余 |
public static void main(String[] args) {
//int 转为 BigInteger
BigInteger num1 = java.math.BigInteger.valueOf(100);
BigInteger num2 = java.math.BigInteger.valueOf(12);
//相加
BigInteger add = num1.add(num2);
System.out.println("相加:" + add);
//相减
BigInteger subtract = num1.subtract(num2);
System.out.println("相减:" + subtract);
//相乘
BigInteger multiply = num1.multiply(num2);
System.out.println("相乘:" + multiply);
//相除 取整
BigInteger divide = num1.divide(num2);
System.out.println("相除:" + divide);
//取摸|取余数
BigInteger remainder = num1.remainder(num2);
System.out.println("取余:" + remainder);
}
最终结果:
相加:112
相减:88
相乘:1200
相除:8
取余:4
4.6.1 BigDecimal
BigDecimal实现了任意精度的浮点数运算。常用方法如下:
BigDecimal方法名 | 含义 |
---|---|
static valueOf() | 将参数转换为BigDecimal |
add() | 相加 |
subtract() | 相减 |
multiply() | 相乘 |
divide() | 相除取整 |
remainder() | 取余 |
public static void main(String[] args) {
//int 转为 BigInteger
BigDecimal num1 = BigDecimal.valueOf(100.5);
BigDecimal num2 = BigDecimal.valueOf(12.3);
//相加
BigDecimal add = num1.add(num2);
System.out.println("相加:" + add);
//相减
BigDecimal subtract = num1.subtract(num2);
System.out.println("相减:" + subtract);
//相乘
BigDecimal multiply = num1.multiply(num2);
System.out.println("相乘:" + multiply);
//相除 保留两位小数,最后一位四舍五入。当然也可以使用其他模式
BigDecimal divide = num1.divide(num2,2, RoundingMode.UP);
System.out.println("相除两位小数/四舍五入:" + divide);
//取摸|取余数
BigDecimal remainder = num1.remainder(num2);
System.out.println("取余:" + remainder);
}
最终结果:
相加:112.8
相减:88.2
相乘:1236.15
相除两位小数/四舍五入:8.18
取余:2.1
五、Java运算符
Java提供了多种运算符来满足正常的需求,我们可以将运算符分为以下几类:
- 算术运算符
- 赋值运算符
- 比较运算符(关系运算符)
- 逻辑运算符
- 位运算符
- 三元运算符
5.1 算术运算符
运算符 | 运算 | 范例 | 结果 |
---|---|---|---|
+ | 正号 | +3 | 3 |
- | 负号 | b=4; -b | -4 |
+ | 加 | 5+5 | 10 |
- | 减 | 6-4 | 2 |
***** | 乘 | 3*4 | 12 |
/ | 除 | 5/5 | 1 |
% | 取模 | 5%5 | 0 |
++ ++ | 自增(前):先运算后取值 自增(后):先取值后运算 | a=2;b=++a; a=2;b=a++; | a=3;b=3 a=3;b=2 |
- - - - | 自减(前):先运算后取值 自减(后):先取值后运算 | a=2;b=- -a a=2;b=a- - | a=1;b=1 a=1;b=2 |
+ | 字符串相加 | “He”+”llo” | “Hello” |
5.2 赋值运算符
运算符 | 运算 | 范例 | 结果 |
---|---|---|---|
= | 赋值 | b=5 | 5 |
+=, -=, *=, /=, %= | 计算完再赋值 | b = 5;b+=2 | 7 |
5.3 比较运算符(关系运算符)
运算符 | **运算 ** | 范例 | 结果 |
---|---|---|---|
== | 相等于 | 4==3 | false |
!= | 不等于 | 4!=3 | true |
< | 小于 | 4<3 | false |
> | 大于 | 4>3 | true |
<= | 小于等于 | 4<=3 | false |
>= | 大于等于 | 4>=3 | false |
instanceof | 检查是否是类的对象 | “Hello” instanceof String | true |
5.4 逻辑运算符
运算符 | 运算 | 范例 | 结果 |
---|---|---|---|
& | AND(与) | false & true | false |
| | OR(或) | false|true | true |
^ | XOR(异或) | true^false | true |
! | Not(非) | !true | false |
&& | AND(短路) | false&&true | false |
|| | OR(短路) | false||true | true |
5.5 三元运算符
三元运算符,主要是根据条件表达式的不同,选择不能的结果
就类型if…else分支语句一样,可以到达二选一结果。
例如:成绩大于等于60分表示**及格,否则就是不及格**
//语法
(条件表达式)?表达式1:表达式2
-如果条件表达式为true,运算后的结果是表达式1;
-如果条件表达式为false,运算后的结果是表达式2;
//范例
int num1 = (100>1)?666:250;
因为100>1返回的是true,所以最终num1的结果是666