Java核心基础第2篇-Java基本语法

1,319 阅读12分钟

Java基本语法

本章一起来探讨下Java的基本语法。主要从以下几个方面展开:

  • Java关键字
  • Java标识符
  • Java变量
  • Java数据类型
  • Java运算符

学完本章内容之后,我们对Java会有更深的认识,同时也可以使用Java完成基本的操作。

一、关键字

1.1 含义

被java赋予了特殊含义,用作专门用途的字符串。

例如:

  • public:表示公共的
  • class:定义类

1.2特点

  • 所有的单词都是小写
  • goto:表示java的预留关键字

1.3 关键字列表

Java提供了很多关键字,具体如下表:

用于定义数据类型的关键字
classinterfaceenumbyteshort
intlongfloatdoublechar
booleanvoid
用于定义数据类型值的关键字
truefalsenull
用于定义流程控制的关键字
ifelseswitchcasedefault
whiledoforbreakcontinue
return
用于定义访问修饰符的关键字
privateprotectedpublic
用于定义类,函数,变量修饰符的关键字
abstractfinalstaticsynchronized
用于定义类与类之间关系的关键字
extendsimplements
用于定义建立实例及引用实例,判断实例的关键字
newthissuperinstanceof
用于异常处理的关键字
trycatchfinallythrowthrows
用于包的关键字
packageimport
其他修饰符关键字
nativestrictfptransientvolatileassert

二、标识符

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类型数据只允许取值truefalse

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类型。

Java数据类型

4.1 整型

Java各整型类型有固定的数据范围和字段长度,不受操作系统OS的影响,以保证Java程序的可移植性。 并且Java提供四种整型(byte,short,int,long)用于表示没有小数部分的值,并且允许它们为负数。

mark

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的两倍 mark

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 自动类型转换

容量小的类型自动转换为容量大的数据类型。数据类型按容量大小排序为: Java数据类型转换

有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那种数据类型,然后再进行计算。 byte,short,char之间不会相互转换,他们三者在计算时首先转换为int类型。 当把任何基本类型的值和字符串值进行连接运算时(+),基本类型的值将自动转化为字符串类型。

4.5.2 强制类型转换

将容量大的数据类型转换为容量小的数据类型。使用时要加上强制转换符(()),但可能造成精度降低或溢出,格外要注意。 通常,字符串不能直接转换为基本类型,但通过基本类型对应的包装类则可以实现把字符串转换成基本类型。如:

String a = "43"; int i = Integer.parseInt(a); 

boolean类型不可以转换为其它的数据类型。

4.6 大数值

如果基本的整数和浮点数精度不能够满足需求,那么可以使用java.math包中的两个很有用的类:BigIntegerBigDecimal

这两个类可以处理包含任意长度数字序列的数值。

  • 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 算术运算符

运算符运算范例结果
+正号+33
-负号b=4; -b-4
+5+510
-6-42
*****3*412
/5/51
%取模5%50
++ ++自增(前):先运算后取值 自增(后):先取值后运算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=55
+=, -=, *=, /=, %=计算完再赋值b = 5;b+=27

5.3 比较运算符(关系运算符)

运算符**运算 **范例结果
==相等于4==3false
!=不等于4!=3true
<小于4<3false
大于4>3true
<=小于等于4<=3false
>=大于等于4>=3false
instanceof检查是否是类的对象“Hello” instanceof Stringtrue

5.4 逻辑运算符

运算符运算范例结果
&AND(与)false & truefalse
|OR(或)false|truetrue
XOR(异或)true^falsetrue
!Not(非)!truefalse
&&AND(短路)false&&truefalse
||OR(短路)false||truetrue

5.5 三元运算符

三元运算符,主要是根据条件表达式的不同,选择不能的结果

就类型if...else分支语句一样,可以到达二选一结果。

例如:成绩大于等于60分表示**及格,否则就是不及格**

//语法 (条件表达式)?表达式1:表达式2 -如果条件表达式为true,运算后的结果是表达式1; -如果条件表达式为false,运算后的结果是表达式2;

//范例     
int num1 = (100>1)?666:250;
因为100>1返回的是true,所以最终num1的结果是666

本博文由 IT蚱蜢哥 原创发布!欢迎转载,注明出处!