2. Java基本语法

1. 关键字和保留字

关键字(keyword):

  • 定义:被Java语言赋予了特殊含义,用做专门用途的字符串(单词)
  • 特点:关键字中所有字母都为小写
  • 用于定义数据类型的关键字:class、interface、enum、byte、short、int、float、double、char、boolean、void
  • 用于定义流程控制的关键字: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
  • 用于定义数据类型值的字面值:true、false、null

保留字(reserved word):
现有Java版本尚未使用,但以后版本可能会作为关键字使用,自己命名标识符时要避免使用这些保留字:goto、const

2. 标识符(Identifier)

  • 定义:Java对各种变量、方法和类等要素命名时使用的字符序列称为标识符
  • 技巧:凡是自己可以起名字的地方都叫标识符

定义合法标识符规则:

  • 由26个英文字母大小写,0-9,_或$组成
  • 数字不可以开头
  • 不可以使用关键字和保留字,但能包含关键字和保留字
  • Java中严格区分大小写,长度无限制
  • 标识符不能包含空格

Java中的名称命名规范:

  • 包名:多单词组成时所有字母都小写 xxxyyyzzz
  • 类名、接口名:多单词组成时,所有单词的首字母大写 XxxYyyZzz
  • 变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写 xxxYyyZzz
  • 常量名:所有字母都大写,多单词时每个单词用下划线连接 XXX_YYY_ZZZ

3. 变量

3.1 变量的概念:

  • 变量是内存中的一个存储区域,包含变量类型、变量名、存储的值
  • Java中的每个变量必须先声明后使用
  • 变量的作用于在其定义所在的一对“{ }”内
  • Java定义变量的格式:数据类型 变量名 = 变量值;or 数据类型 变量名;变量名 = 变量值;定义后必须赋值

3.2 变量的分类:
3.2.1 按数据类型分类
每一种数据都定义了明确的具体数据类型,在内存中分配了不同大小的内存空间。
在这里插入图片描述

  • Java的整型常量默认为int型,声明long型常量须后加“l”或“L”
类型 占用存储空间 范围
byte 1字节 − 128 ∼ 127 -128\sim127 128127
short 2字节 − 2 15 ∼ 2 15 − 1 -2^{15}\sim 2^{15}-1 2152151
int 4字节 − 2 31 ∼ 2 31 − 1 -2^{31}\sim 2^{31}-1 2312311
long 8字节 − 2 63 ∼ 2 63 − 1 -2^{63}\sim 2^{63}-1 2632631
  • Java的浮点型默认为double型,声明float型常量须后加“f”或“F”
类型 占用存储空间 范围
单精度float 4字节 − 3.403 E 38 ∼ 3.403 E 38 -3.403E38\sim3.403E38 3.403E383.403E38
双精度double 8字节 − 1.798 E 308 ∼ 1.798 E 308 -1.798E308\sim 1.798E308 1.798E3081.798E308
  • char型数据表示字符,一个字符占2个字节。Java中所有字符都用Unicode编码,故一个字符可以存储一个字母,一个汉字,或其他书面语的一个字符。字符型变量有三种表现形式:
  1. 字符常量是用单引号括起来的单个字符,如:char c1 = ‘a’;(单引号中只能有一个字符)
  2. 使用转义字符“\”将其后的字符转变为字符型常量,如:char c2 = ‘\n’;
  3. 直接使用Unicode值“\uXXXX”来表示字符型常量,其中XXXX代表一个十六进制整数,如:char c3 = ‘\u000a’; (char类型是可以进行运算的,因为对应Unicode码)
  • boolean类型只能取true和false,不能用0和1来代替。
  • String类型变量使用一对双引号声明。

3.2.2 按变量在类中声明的位置分类

  • 在方法体外,类体内声明的变量称为成员变量
  • 在方法体内声明的变量称为局部变量
    在这里插入图片描述
  • 同:两者都有生命周期
  • 异:局部变量除形参外,需显式初始化(指在使用前需要显示赋值)

3.3 基本数据类型转换
3.3.1 自动类型提升:容量小的类型自动转换为容量大的数据类型。排序如下:
在这里插入图片描述
有多种类型的数据混合运算时,系统先自动将所有数据转换成容量最大的那种数据类型,再进行计算。

  • byte、short、char之间不会相互转换,它们三者计算时会先转为int类型
  • boolean类型不能与其他数据类型运算
  • 当把任何基本数据类型的值和字符串(String)进行连接运算(+)时,基本数据类型的值会自动转为String类型(基本数据类型与String之间只能进行“+”运算)

3.3.2 强制类型转换:使用强转符“( )”,可能导致精度损失

long l = 123;	//本身123为int型,相当于自动类型提升把int变为long
long l1 = 123123123123123;	//赋值整数超出int范围时报错,此时必须在后面加l或L

3.4 进制
二进制以0b或0B开头,八进制以0开头,十六进制以0x或0X开头。

4. 运算符

运算符的分类:算术运算符、赋值运算符、比较运算符(关系运算符)、逻辑运算符、位运算符、三元运算符。

short s = 10;
s = s + 1;	//编译不通过,转为int型后不能赋值给s
s += 1;	//可以实现运算,且不改变s的数据类型
s++;	//自增不会改变变量本身的数据类型
  • 赋值运算符支持连续赋值
  • 逻辑运算符共有6个:&逻辑与、&&短路与、|逻辑或、||短路或、!逻辑非、^逻辑异或。逻辑运算无论左边是true还是false右边都会进行运算,短路与运算若左边为false右边不会进行运算。
//手动将60转化为十六进制
int i = 60;
int j = i & 15; //获得低四位的值
i = i >> 4;
int k = i & 15; //获得高四位的值
//将第四位与高四位都转为十六进制的字符串并相加
  • 位运算符共有7个:<<左移、>>右移、>>>无符号右移、&与运算、|或运算、^异或运算、~取反运算。位运算符是直接对整数的二进制进行的运算。
//使用异或运算交换两个数值变量的值
n = n ^ m;
m = n ^ m;
n = n ^ m;
  • 三元运算符:(条件表达式)?表达式1:表达式2;
  • instanceof:用于检查目标是否是类的对象

5. 程序流程控制

顺序结构、分支结构、循环结构
5.1 Scanner类
要想从键盘获取不同类型的变量,需要使用Scanner类。Scanner类中没有获取char型数据的方法,只能获取一个字符串。

import java.util.Scanner;

public class ScannerTest {
    
    
	public static void main(String[] args) {
    
    
		Scanner s = new Scanner(System.in);
		String str = s.next();
		int age = s.nextInt();
		System.out.println(str);
		System.out.println(age);
	}
}

5.2 分支结构switch-case

  • 若case后没有接break,则会继续执行其后的语句(后面的case不匹配也会执行)
  • switch结构中的表达式,只能是如下6种数据类型之一:byte、short、char、int、枚举、String
  • case之后只能声明常量,不能声明一个范围
  • default是可选的,而且位置是灵活的,无论放在哪都在最后执行
  • 当多个case语句处理的语句块一致时,可统一书写(没写break顺序执行的结果)
public class SwitchCaseTest {
    
    
	public static void main(String[] args) {
    
    
		int number = 1;
		switch (number) {
    
    
		case 0:
			System.out.println("zero");
			break;
		case 1:
			System.out.println("one");
			break;
		default:
			System.out.println("other");
		}
	}
}

5.3 循环结构

  • 循环结构的分类:for、while、do-while
  • 循环语句的4个要素:初始化条件、循环条件(boolean类型)、循环体、迭代条件
  • 无限循环:for(;;)或while(true)
  • 带标签的break和continue的使用:结束指定标签层的循环结构
public class PrimeNumberTest {
    
    	//计算100000以内质数的个数,使用带标签的continue后不用定义flag
	public static void main(String[] args) {
    
    
		int cnt = 0;
		label: for (int i = 2; i <= 100000; i++) {
    
    
			for (int j = 2; j <= Math.sqrt(i); j++) {
    
    
				if (i % j == 0) {
    
    
					continue label;
				}
			}
			cnt++;
		}
		System.out.println("质数的个数为" + cnt);
	}
}

猜你喜欢

转载自blog.csdn.net/qq_43221336/article/details/107027731