本章一起来探讨下Java的基本语法。主要从以下几个方面展开:
学完本章内容之后,我们对Java会有更深的认识,同时也可以使用Java完成基本的操作。
被java赋予了特殊含义,用作专门用途的字符串。
例如:
public
:表示公共的class
:定义类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 |
Java 对各种变量、方法和类等要素命名时使用的字符序列称为标识符
凡是自己可以起名字的地方都叫标识符。
1.由26个英文字母大小写,数字:0-9 ,_或 $ 组成 2.数字不可以开头。 3.不可以使用关键字和保留字,但能包含关键字和保留字。 4.Java中严格区分大小写,长度无限制。 5.标识符不能包含空格。 注意:取名满足见名知意,长度不宜过长。小于30个字符;
很多公司里面,对命名有严格的要求 1.包名: xxxyyyzzz 所有的名称都是小写; 多个单词都是小写; 可以使用.创建多层包名 2.类名和接口名 XxxYyyZzz 首字母大写; 多个单词组成,首字母都是大写; 3.变量和方法名 xxxYyyZzz 首个单词首字母小写; 多个单词组成,除了第一个单词首字母小写,其余单词首字母大写; 4.常量的名称 XXX_YYY_ZZZ 常量的名称都是大写; 多个单词组成使用下划线链接;
数据类型 变量名 = [初始值];
//例如 int num1 = 90;
1.成员变量|全局变量|属性 a.定义在方法的外部,类的内部; b.范围在该类下所有的地方都可以使用,包括里面多个方法内部; 2.局部变量 a.定义在方法或者代码块的内容; b.只在定义的方法或者代码块的{}里面使用; 之间的区别: a.定义位置不一样; 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包装类等
声明一个变量之后,必须用赋值语句对变量进行显式初始化,千万不要使用未初始化的局部变量。
例如,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 = "猪小明"; //赋值
在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中,一共有8种基本类型(primitive type),其中有4种整型、2种浮点类型、1种用于表示Unicode编码的字符单元的字符类型char和1种用于表示真值的boolean类型。
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肯定会超过范围。
与整数类型类似,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
类,例如金额
char 型数据用来表示通常意义上"字符"。
字符型常量的三种表现形式:
char 类型是可以进行运算的。因为它都对应有 Unicode 值。
boolean 类型适于逻辑运算,一般用于程序流程控制:
boolean类型数据只允许取值true和false,不可以0或非 0 的整数替代true和false,这点和C语言不同。
经常需要将一种数值类型转为另一种数值类型,但是在转换的过程中一定要注意可能会造成数据的精度丢失,例如:double类型转为int类型,那么小数点后面的数值就会丢失;
Java针对现实情况分别提高两种数值转换方式:自动类型转换
和强制类型转换
容量小的类型自动转换为容量大的数据类型。数据类型按容量大小排序为:
有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那种数据类型,然后再进行计算。
byte,short,char之间不会相互转换,他们三者在计算时首先转换为int类型。
当把任何基本类型的值和字符串值进行连接运算时(+),基本类型的值将自动转化为字符串类型。
将容量大的数据类型转换为容量小的数据类型。使用时要加上强制转换符(()
),但可能造成精度降低或溢出,格外要注意。
通常,字符串不能直接转换为基本类型,但通过基本类型对应的包装类则可以实现把字符串转换成基本类型。如:
String a = "43"; int i = Integer.parseInt(a);
boolean类型不可以转换为其它的数据类型。
如果基本的整数和浮点数精度不能够满足需求,那么可以使用java.math包中的两个很有用的类:BigInteger
和BigDecimal
。
这两个类可以处理包含任意长度数字序列的数值。
使用静态的valueOf方法可以将普通的数值转换为大数值:
BigInteger bigInteger = BigInteger.valueOf(10); BigDecimal bigDecimal = BigDecimal.valueOf(2.0);
遗憾的是,不能使用人们熟悉的算术运算符(如:+和*)处理大数值。而需要使用大数 值类中的add和multiply方法。
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
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提供了多种运算符来满足正常的需求,我们可以将运算符分为以下几类:
运算符 | 运算 | 范例 | 结果 |
---|---|---|---|
+ | 正号 | +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” |
运算符 | 运算 | 范例 | 结果 |
---|---|---|---|
= | 赋值 | b=5 | 5 |
+=, -=, *=, /=, %= | 计算完再赋值 | b = 5;b+=2 | 7 |
运算符 | **运算 ** | 范例 | 结果 |
---|---|---|---|
== | 相等于 | 4==3 | false |
!= | 不等于 | 4!=3 | true |
< | 小于 | 4<3 | false |
> | 大于 | 4>3 | true |
<= | 小于等于 | 4<=3 | false |
>= | 大于等于 | 4>=3 | false |
instanceof | 检查是否是类的对象 | “Hello” instanceof String | true |
运算符 | 运算 | 范例 | 结果 |
---|---|---|---|
& | AND(与) | false & true | false |
| | OR(或) | false|true | true |
^ | XOR(异或) | true^false | true |
! | Not(非) | !true | false |
&& | AND(短路) | false&&true | false |
|| | OR(短路) | false||true | true |
三元运算符,主要是根据条件表达式的不同,选择不能的结果
就类型if…else分支语句一样,可以到达二选一结果。
例如:成绩大于等于60分表示**及格,否则就是不及格**
//语法
(条件表达式)?表达式1:表达式2
-如果条件表达式为true,运算后的结果是表达式1;
-如果条件表达式为false,运算后的结果是表达式2;
//范例 int num1 = (100>1)?666:250; 因为100>1返回的是true,所以最终num1的结果是666