JAVA语言的特点
简单性、面向对象、安全性、跨平台性、支持多线程、分布性
面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,它通过将数据和操作这些数据的方法封装在一起,以创建对象的形式来组织代码。面向对象编程的主要特点包括:
-
封装(Encapsulation):封装是将数据(属性)和操作这些数据的方法(行为)放在一个单元(对象)中。它通过限制对数据的直接访问,只允许通过特定的方法来操作数据,从而提高了代码的安全性和可维护性。
-
继承(Inheritance):继承允许一个类(子类)从另一个类(父类)继承属性和方法。通过继承,子类可以重用父类的代码,同时可以扩展或修改父类的行为。这种特性提高了代码的可重用性和扩展性。
-
多态(Polymorphism):多态性指的是同一个方法在不同对象上可以表现出不同的行为。通过方法重载(同一方法名,不同参数)和方法重写(子类覆盖父类方法),多态性使得代码更加灵活和动态。
JAVA程序的运行流程
-
编写代码:
- 开发者使用文本编辑器编写 Java 源代码,并将其保存为
.java
文件。源代码包含一个或多个类的定义。
- 开发者使用文本编辑器编写 Java 源代码,并将其保存为
-
编译代码:
- 使用
javac
命令编译.java
文件,将 Java 源代码编译成字节码(Bytecode),并生成.class
文件。字节码是一种与平台无关的中间表示形式,Java 虚拟机 (JVM) 能够理解和执行它。class是二进制文件
- 使用
-
类加载(Class Loading):
- Java 类加载器(ClassLoader)负责在运行时动态加载类。类加载器查找并加载
.class
文件到 JVM 中。
- Java 类加载器(ClassLoader)负责在运行时动态加载类。类加载器查找并加载
-
字节码验证(Bytecode Verification):
- 在类加载之后,JVM 运行一个验证器来检查字节码是否符合 Java 语言规范,确保字节码不会破坏 JVM 的安全性和稳定性。验证步骤可以防止恶意代码的注入和执行。
-
准备(Preparation):
- JVM 为类的静态变量分配内存,并将其初始化为默认值。这一步不执行任何程序代码,只是为静态字段分配空间。
-
解析(Resolution):
- JVM 将符号引用(Symbolic References)转换为直接引用(Direct References)。符号引用是类文件中的符号表示(如类名、方法名等),而直接引用是内存地址。解析步骤确保类的正确链接。
-
初始化(Initialization):
- JVM 执行类的初始化代码(如静态初始化块和静态变量的初始化)。这一步将静态变量设置为实际的初始值,并执行任何静态块中的代码。
-
执行(Execution):
- JVM 调用类的
main
方法开始程序的执行。main
方法是程序的入口点,程序的所有逻辑从这里开始运行。
- JVM 调用类的
基本数据类型
Java 有八种基本数据类型:
-
整数类型(Integral Types):
byte
:- 大小:8 位
- 范围:-128 到 127
- 默认值:0
short
:- 大小:16 位
- 范围:-32,768 到 32,767
- 默认值:0
int
:- 大小:32 位
- 范围:-2^31 到 2^31-1
- 默认值:0
long
:- 大小:64 位
- 范围:-2^63 到 2^63-1
- 默认值:0L
-
浮点类型(Floating-Point Types):
float
:- 大小:32 位
- 范围:大约 ±3.40282347E+38F(6-7 位有效数字)
- 默认值:0.0f
double
:- 大小:64 位
- 范围:大约 ±1.79769313486231570E+308(15 位有效数字)
- 默认值:0.0d
-
字符类型(Character Type):
char
:- 大小:16 位
- 范围:0 到 65,535(Unicode 字符)
- 默认值:'\u0000'
-
布尔类型(Boolean Type):
boolean
:- 大小:不确定(依赖于 JVM 实现)
- 值:
true
或false
- 默认值:
false
引用数据类型
引用数据类型指向一个对象,它们是通过类、接口或数组来定义的:
-
类(Class):
- 类是创建对象的模板。每个对象都是一个类的实例。例如:
String str = "Hello, World!";
str
是一个引用数据类型,指向一个String
对象。
- 类是创建对象的模板。每个对象都是一个类的实例。例如:
-
接口(Interface):
- 接口是抽象类型,指定类必须实现的方法。引用数据类型可以是接口类型的对象。例如:
List<String> list = new ArrayList<>();
list
是一个引用数据类型,指向一个实现了List
接口的ArrayList
对象。
- 接口是抽象类型,指定类必须实现的方法。引用数据类型可以是接口类型的对象。例如:
-
数组(Array):
- 数组是一个包含相同类型元素的容器。数组类型也是引用类型。例如:
int[] numbers = {1, 2, 3, 4, 5};
是一个引用数据类型,指向一个包含整数的数组对象。
numbers
- 数组是一个包含相同类型元素的容器。数组类型也是引用类型。例如:
JAVA常见数据类型
访问控制关键字
-
private
:- 访问控制级别:类内部
- 用于声明类的成员(变量或方法)只能在该类内部访问。
-
protected
:- 访问控制级别:同一包内的类和子类
- 用于声明类的成员(变量或方法)可以在同一包内的类和子类中访问。
-
public
:- 访问控制级别:所有类
- 用于声明类、方法或变量可以被所有类访问。
-
default
:- 访问控制级别:同一包内的类
- 用于声明包级别的访问权限。如果未显式指定访问控制关键字,则默认是包级别访问权限。
类、方法和变量修饰符
-
abstract
:- 用于声明抽象类或方法,抽象类不能被实例化,抽象方法必须在子类中实现。
-
class
:- 用于定义一个类。
-
extends
:- 用于声明一个类是另一个类的子类。
-
final
:- 用于声明不可变的类、方法或变量,最终类不能被继承,最终方法不能被重写,最终变量不能被重新赋值。
-
implements
:- 用于声明一个类实现一个或多个接口。
-
interface
:- 用于定义一个接口。
-
static
:- 用于声明类的静态成员,静态成员属于类本身,而不是类的实例。
控制语句
-
break
:- 用于终止循环或 switch 语句。
-
case
:- 用于 switch 语句中,表示一个分支。
-
continue
:- 用于跳过循环中的当前迭代,并开始下一个迭代。
-
default
:- 用于 switch 语句中,表示没有匹配时的默认分支。
-
do
:- 用于定义 do-while 循环。
-
else
:- 用于 if 语句,表示条件为 false 时的执行块。
-
for
:- 用于定义 for 循环。
-
if
:- 用于定义条件语句。
-
return
:- 用于从方法返回值。
-
switch
:- 用于定义多分支条件语句。
-
while
:- 用于定义 while 循环。
异常处理
-
catch
:- 用于捕获异常。
-
finally
:- 用于定义在 try 语句块执行后总是执行的代码块。
-
throw
:- 用于抛出一个异常。
-
throws
:- 用于声明一个方法可能抛出的异常。
-
try
:- 用于定义一个可能抛出异常的代码块。
其他
-
super
:- 用于引用父类的成员(变量或方法)。
-
this
:- 用于引用当前实例的成员(变量或方法)。
-
void
:- 用于声明方法无返回值。
-
package
:- 用于声明类所属的包。
-
import
:- 用于导入其他包或类。
-
new
:- 用于创建新实例。
-
null
:- 表示空引用。
运算符分成以下几组
- 算术运算符
- 关系运算符
- 位运算符
- 逻辑运算符
- 赋值运算符
- 其他运算符