Java基础语法
目录1.关键字和保留字
Java中的关键字(Keywords)和保留字(Reserved Words)是Java编程语言中具有特殊含义的标识符,它们在Java编译器中有特定的作用。以下是对Java中的关键字与保留字的详细解释:
关键字(Keywords)
Java中的关键字是对Java编译器有特殊意义的字符串,它们用来表示一种数据类型、程序的结构或控制流程等。Java关键字不能用作变量名、方法名、类名、包名和参数等。Java的关键字数量可能会随着版本的更新而有所变化,但截至当前时间(2024年),Java中常用的关键字包括但不限于:
关键字 | 描述 |
---|---|
abstract | 声明抽象类、抽象方法 |
assert | 断言,用于调试 |
boolean | 基本数据类型之一,表示逻辑值true或false |
break | 跳出循环或switch语句 |
byte | 基本数据类型之一,表示8位整数 |
case | switch语句中的一个分支 |
catch | 捕获异常 |
char | 基本数据类型之一,表示单个字符 |
class | 声明类 |
continue | 跳过当前循环的剩余语句,继续下一次循环的迭代 |
default | switch语句中的默认分支,或在没有显式指定修饰符时的访问级别 |
do | 循环的开始,与while一起使用 |
double | 基本数据类型之一,表示双精度浮点数 |
else | if语句的备选分支 |
enum | 枚举类型 |
extends | 表示一个类是另一个类的子类 |
final | 表示类、方法或变量不可被继承、重写或修改 |
finally | 无论是否发生异常,都会执行的代码块 |
float | 基本数据类型之一,表示单精度浮点数 |
for | 循环语句 |
if | 条件语句 |
implements | 表示一个类实现了某个接口 |
import | 引入包或类 |
instanceof | 测试一个对象是否是某个类的实例 |
int | 基本数据类型之一,表示整数 |
interface | 声明接口 |
long | 基本数据类型之一,表示长整数 |
native | 声明一个方法是由与Java不同的语言(如C或C++)实现的 |
new | 创建对象的实例 |
package | 声明包 |
private | 表示私有访问级别,只能被类本身访问 |
protected | 表示受保护访问级别,能被类本身、子类及同一个包中的类访问 |
public | 表示公有访问级别,能被任何类访问 |
return | 从方法中返回一个值 |
short | 基本数据类型之一,表示短整数 |
static | 表示静态的,属于类而不是类的某个特定实例 |
strictfp | 严格浮点,保证浮点运算的精确性 |
super | 引用当前对象的直接父类对象(在子类中) |
switch | 选择语句 |
synchronized | 同步方法或代码块,保证在同一时刻只有一个线程可以执行该方法或代码块 |
this | 引用当前对象 |
throw | 抛出一个异常 |
throws | 声明一个方法可能抛出的异常列表 |
transient | 声明一个实例变量不应该被序列化 |
try | 尝试执行一个可能抛出异常的代码块 |
void | 表示方法没有返回值 |
volatile | 表示变量可能会被意外地修改,用于多线程编程 |
while | 循环语句,当条件为真时执行循环体 |
保留字(Reserved Words)
Java中的保留字是那些在当前Java版本中尚未使用,但在未来版本中可能会作为关键字使用的字符串。在编写Java程序时,应避免使用这些保留字作为变量名、方法名、类名等。Java中的保留字包括:
- goto:在其他编程语言中常用作跳转语句,但在Java中未被使用,保留为未来可能的功能。
- const:在其他编程语言中用于声明
2.标识符
2.1.命名规则
1. 标识符的组成
- 标识符可以由字母(A-Z,a-z)、数字(0-9)、美元符号($)和下划线(_)组成。
- 标识符不能包含其他特殊字符或空格。
2. 标识符的首字符
- 标识符的第一个字符必须是字母、美元符号($)或下划线(_)。
- 标识符不能以数字开头。
3. 标识符的命名限制
- 标识符不能是Java的关键字和保留字。例如,不能将标识符命名为
if
、for
、while
、class
等。 - 标识符是大小写敏感的。例如,
myVariable
和myvariable
是两个不同的标识符。
4. 命名风格
- 类名:建议使用大驼峰命名法(UpperCamelCase),即每个单词的首字母都大写。例如,
MyClass
。 - 方法名和变量名:建议使用小驼峰命名法(lowerCamelCase),即第一个单词的首字母小写,后续每个单词的首字母大写。例如,
myMethodName
、localValue
。 - 常量名:建议使用全大写字母和下划线分隔单词。例如,
MY_CONSTANT
、MAX_STOCK_COUNT
。
5. 其他建议
- 标识符应具有描述性,以便其他开发人员能够理解其用途。
- 对于包名,建议使用小写字母和反向域名来命名包。例如,
com.example.mypackage
。 - 对于枚举常量名,也建议使用全大写字母和下划线分隔单词。
- 避免使用单个字符作为变量名或方法名,除非在某些特殊情况下。
- 尽量不要在标识符中使用中文或其他非ASCII字符,以避免潜在的编码问题。
- 避免与Java类库的类名或接口名重名,以减少混淆。
6. 示例
标识符类型 | 示例 |
---|---|
类名 | MyClass 、UserDO |
方法名 | myMethodName 、showTime |
变量名 | localValue 、httpMessage |
常量名 | MY_CONSTANT 、MAX_STOCK_COUNT |
遵循这些命名规则和建议,可以使Java代码更加清晰、易于理解和维护。
2.2.驼峰命名法
驼峰命名法(CamelCase)是编程中常用的一种命名约定,特别是在使用英文单词为变量、函数、方法、类、接口等命名时。它通过在单词之间不使用空格或任何其他分隔符,而将每个单词的首字母大写(在某些情况下,第一个单词的首字母小写)来区分单词。根据首字母是否大写,驼峰命名法可以进一步细分为大驼峰命名法(UpperCamelCase)和小驼峰命名法(lowerCamelCase)。
大驼峰命名法(UpperCamelCase)
- 也称为帕斯卡命名法(PascalCase)。
- 第一个单词的首字母大写,后续每个单词的首字母也大写。
- 常用于类名、接口名、枚举类型名等。
- 示例:
MyClass
、UserDetails
、HttpResponse
。
小驼峰命名法(lowerCamelCase)
- 第一个单词的首字母小写,后续每个单词的首字母大写。
- 常用于变量名、方法名、属性名等。
- 示例:
myVariable
、getUserDetails
、httpResponseCode
。
注意事项
- 驼峰命名法使得代码更易于阅读,尤其是在不使用分隔符的情况下,它能够通过单词的大小写变化来区分不同的单词。
- 在使用驼峰命名法时,应该避免使用缩写,除非该缩写是广泛认可的。如果必须使用缩写,并且缩写可能产生歧义,则应该考虑使用更明确的命名方式。
- 驼峰命名法在不同的编程语言中有不同的应用方式和约定。例如,JavaScript中通常使用小驼峰命名法来命名变量和函数,而Java中则更倾向于使用大驼峰命名法来命名类名。
- 除了驼峰命名法外,还有其他命名约定,如蛇形命名法(snake_case,使用下划线分隔单词)和凯鲍命名法(kebab-case,使用短横线分隔单词),它们在不同的编程语言或社区中有不同的应用。
2.3.变量
在Java中,变量是存储数据值的基本单元。每个变量都有一个类型,该类型决定了变量可以存储什么类型的数据,以及可以对这些数据进行哪些操作。变量还必须有一个名称(即标识符),通过这个名称可以访问变量中的数据。
声明变量
在Java中,声明变量的一般语法是:
java复制代码
type variableName;
其中,type
是变量的数据类型(如 int
、double
、String
等),variableName
是变量的名称。
初始化变量
声明变量后,通常会在声明时或之后不久对其进行初始化,即给它分配一个初始值。初始化变量的语法是:
java复制代码
type variableName = value;
或者,如果已经声明了变量,可以单独进行初始化:
java复制代码
variableName = value;
示例
public class Main {
public static void main(String[] args) {
// 声明并初始化变量
int age = 30;
double salary = 5000.50;
String name = "John Doe";
// 声明变量后初始化
boolean isEmployed;
isEmployed = true;
// 使用变量
System.out.println("Age: " + age);
System.out.println("Salary: $" + salary);
System.out.println("Name: " + name);
System.out.println("Is Employed? " + isEmployed);
}
}
变量作用域
变量的作用域指的是变量在程序中可以被访问的范围。根据声明的位置,变量可以是局部变量、实例变量(成员变量)、类变量(静态变量)等。
- 局部变量:在方法或代码块中声明的变量,其作用域仅限于声明它的方法或代码块。
- 实例变量:在类中但在任何方法之外声明的变量,其作用域是整个类。每个类的实例(对象)都会有自己的实例变量副本。
- 类变量:使用
static
关键字声明的变量,其作用域是整个类。所有类的实例共享同一个类变量。
变量类型
Java是一种静态类型语言,意味着每个变量在声明时都必须指定其类型。Java中的数据类型可以分为两大类:基本数据类型和引用数据类型。
- 基本数据类型:包括整数类型(
byte
、short
、int
、long
)、浮点类型(float
、double
)、字符类型(char
)和布尔类型(boolean
)。 - 引用数据类型:不是基本数据类型的数据类型都是引用数据类型,如类(
class
)、接口(interface
)、数组等。引用数据类型变量存储的是对象的引用(即对象的内存地址),而不是对象本身。
2.4.数据类型
Java中的数据类型分为两大类:基本类型(Primitive Types)和引用类型(Reference Types)。以下是这两大类数据类型的详细解释:
一、基本类型
基本类型又称为简单数据类型,是不能简化的、内置的数据类型,由编程语言本身定义,表示了真实的数字、字符和整数。Java中共有八种基本数据类型,它们分别是:
-
整数类型
:
byte
:占用1个字节,取值范围为-128到127。short
:占用2个字节,取值范围为-32768到32767。int
:占用4个字节,取值范围为-2,147,483,648到2,147,483,647。long
:占用8个字节,取值范围为-263到263-1。注意,在声明long
类型变量时,如果字面量是整数,则需要在数字后面加上L
或l
(通常使用大写L
以避免与数字1混淆)。
-
浮点类型
:
float
:占用4个字节,单精度浮点数,有效位数大约为6~7位。在声明float
类型变量时,如果字面量是浮点数,则需要在数字后面加上F
或f
。double
:占用8个字节,双精度浮点数,有效位数大约为15~16位。
-
字符类型
:
char
:占用2个字节,用于存储单个字符,取值范围为0到65535。
-
布尔类型
:
boolean
:用于表示逻辑上的真或假,只有两个值:true
和false
。虽然boolean
类型在JVM中可能不直接占用一个字节,但从概念上讲,可以认为它占用一个字节的存储空间。
二、引用类型
引用类型在Java中是指向对象的变量,它们不是直接存储数据值,而是存储数据的引用地址(即对象的内存地址)。Java中的引用类型主要有三种:
-
类(Class)
:
- Java中的类是对象的模板,它定义了对象的属性和方法。类的实例(即对象)是引用类型的变量。
-
接口(Interface)
:
- 接口是一种引用类型,是一种抽象的类型,它是一种特殊的类,里面全部是由全局常量和公共的抽象方法所组成。
-
数组(Array)
:
- 数组是一种引用数据类型,可以存储相同类型的数据的集合。在Java中,数组一旦被创建,其长度就不可改变。
此外,还有一些特殊的引用类型,如枚举(Enum)和注解(Annotation),但它们在传统的Java数据类型分类中不常被提及为主要的引用类型。
三、基本类型与引用类型的区别
- 存储位置:基本类型变量存储在栈内存中,而引用类型变量(实际上是对象的引用)存储在栈内存中,对象本身存储在堆内存中。
- 初始化:基本类型变量在声明时会自动初始化为默认值(如
int
为0,boolean
为false
等),而引用类型变量在声明时默认值为null
,因为它们不直接存储数据值,而是存储数据的引用地址。 - 使用方式:基本类型变量可以直接使用其值进行运算和比较等操作,而引用类型变量需要通过其引用来访问对象的方法和属性。
2.5.数据类型的转换
Java中数据类型的转换主要分为两大类:自动类型转换(也称为隐式类型转换)和强制类型转换(也称为显式类型转换)。
1. 自动类型转换(隐式类型转换)
自动类型转换发生在较小的数据类型向较大的数据类型转换时,这种转换是自动进行的,不需要程序员显式地指定。比如,byte
、short
、char
类型的数据可以自动转换为 int
类型的数据。在进行运算时,如果两边的数据类型不一致,会首先进行自动类型转换,使两边的数据类型一致后再进行运算。
示例:
byte a = 10;
int b = a; // 自动将 byte 类型转换为 int 类型
2. 强制类型转换(显式类型转换)
强制类型转换发生在较大的数据类型向较小的数据类型转换时,由于这种转换可能会丢失精度,因此需要程序员显式地指定。强制类型转换的格式为 (类型名)变量名
。
示例:
int a = 100;
byte b = (byte)a; // 强制将 int 类型转换为 byte 类型,注意这里可能会有精度丢失
在上面的示例中,a
是一个 int
类型的变量,值为 100。当我们尝试将 a
的值赋给 byte
类型的变量 b
时,因为 byte
类型的取值范围是 -128
到 127
,所以直接赋值会导致编译错误。通过强制类型转换 (byte)a
,我们可以显式地告诉编译器我们知道这种转换可能会导致数据丢失,但仍然希望进行这种转换。
注意事项
- 强制类型转换可能会导致数据丢失,特别是当较大类型的数据超出较小类型的表示范围时。
- 在进行自动类型转换时,程序员通常不需要做任何操作,但应了解转换的规则,以避免意外的结果。
- 在进行类型转换时,应始终注意数据类型的范围,以确保转换后的数据在预期范围内。
- 布尔类型(
boolean
)不能与其他任何基本数据类型进行转换。 - 字符串(
String
)可以与基本数据类型进行转换,但这种转换不是通过类型转换操作符完成的,而是通过包装类提供的方法或字符串的构造方法完成的。例如,Integer.toString(int i)
将整数转换为字符串,Integer.parseInt(String s)
将字符串转换为整数。
2.6.运算符
Java 中的运算符用于对变量和值进行各种算术运算、逻辑运算、位运算、赋值运算等。Java 的运算符可以分为以下几类:
- 算术运算符:用于执行基本的数学运算,如加、减、乘、除等。
+
:加法-
:减法*
:乘法/
:除法%
:取余(模)++
:自增--
:自减
- 赋值运算符:用于给变量赋值。
=
:赋值+=
、-=
、*=
、/=
、%=
:复合赋值运算符
- 关系运算符(也称为比较运算符):用于比较两个值的大小。
>
:大于<
:小于>=
:大于等于<=
:小于等于==
:等于(比较的是值是否相等)!=
:不等于
- 逻辑运算符:用于进行逻辑判断。
&&
:逻辑与(AND)||
:逻辑或(OR)!
:逻辑非(NOT)
- 位运算符:用于对二进制位进行操作。
&
:按位与|
:按位或^
:按位异或~
:按位取反<<
:左移>>
:右移(带符号)>>>
:无符号右移
- 条件运算符(三元运算符):
条件 ? 表达式1 : 表达式2
:如果条件为真,则执行表达式1,否则执行表达式2。
- 字符串连接运算符:
+
:当用于字符串时,用作连接运算符。
- 类型转换运算符:
- 强制类型转换:
(类型)变量
,如(int)floatVar
将floatVar
转换为int
类型。
- 强制类型转换:
- instanceof:
- 用于判断一个对象是否是一个类的实例。
- 其他运算符:
? :
条件运算符(已在逻辑运算符中提及)::
方法引用运算符(Java 8 引入)
这些运算符在Java编程中起着至关重要的作用,它们允许你执行复杂的数学计算、逻辑判断、位操作以及控制程序的流程。掌握这些运算符的使用对于编写有效的Java代码至关重要。
标签:类型转换,运算符,Java,变量,数据类型,基础,语法,类型 From: https://www.cnblogs.com/tubby233/p/18323165