文章目录
- 一、Java语言特点 &面向对象和面向过程的区别
- 1. java语言的特点
- 2. 面向对象和面向过程的区别
- 核心思想对比
- 主要区别详解
- 举例说明:实现“开车从A点到B点”
- 优缺点与适用场景
- 二、 字面量
- 三、变量
- 四、进制
- 五、原码反码和补码
- 六、数据类型
- 1.概念
- 2.作用:
- 3.分类:(引用数据类型和基本数据类型,以下为基本数据类型)
- 七、关键字及其使用
- 八、标识符
一、Java语言特点 &面向对象和面向过程的区别
1. java语言的特点
- 简单易学,有丰富的类库:语法相对简洁,去除了C++中复杂的特性(如指针、多重继承),并提供了自动垃圾回收机制, 。
- 面向对象:Java是完全面向对象的语言,支持封装、继承、多态三大特性,所有代码都写在类中,让程序耦合更低,内聚性更高。
- 平台无关性(跨平台):通过“一次编写,到处运行”的Java虚拟机(JVM)实现,编译后的字节码可以在任何安装了JVM的操作系统上执行。
- 健壮性与安全性:强类型检查、异常处理机制、自动内存管理(垃圾回收)减少了程序崩溃的可能;安全管理器(Security Manager)和字节码验证器提供了运行时的安全保护。
- 分布式支持:内置了网络编程库(如java.net),方便开发分布式应用和Web服务。
- 多线程支持:在语言级别提供了多线程机制(Thread类、Runnable接口),便于开发并发程序。
- 动态性:支持运行时加载类、反射(Reflection)机制,使得程序在运行期间能够动态获取信息和调用方法。
进程(Process):是操作系统进行资源分配和调度的基本单位。每个进程都有自己独立的内存空间(代码段、数据段、堆栈等),进程间的数据共享需要通过进程间通信(IPC)机制(如管道、消息队列、共享内存等)来实现。一个进程崩溃通常不会影响其他进程。
线程(Thread):是进程中的一个执行单元,是CPU调度和分派的基本单位。同一个进程内的多个线程共享进程的内存空间和系统资源(如打开的文件、全局变量等),因此线程间通信更加高效,但同时也带来了数据同步和线程安全的问题。
关系与区别:
- 包含关系:一个进程可以包含多个线程。
- 资源开销:进程创建、切换和销毁的开销远大于线程。
- 通信方式:进程间通信复杂,线程间通信简单(直接读写共享内存)。
- 健壮性:一个线程崩溃可能导致整个进程崩溃;而进程之间是隔离的。
Java中的多线程:Java在语言层面通过
java.lang.Thread类和java.lang.Runnable接口提供了对多线程的直接支持,使得开发者能够方便地创建和管理线程,编写并发程序,充分利用多核CPU的计算能力。
2. 面向对象和面向过程的区别
面向对象编程(Object-Oriented Programming, OOP)和面向过程编程(Procedure-Oriented Programming, POP)是两种主流的程序设计范式,它们在思想、结构和适用场景上存在显著差异。
核心思想对比
| 对比维度 | 面向过程 (POP) | 面向对象 (OOP) |
|---|---|---|
| 核心思想 | 以过程(函数)为中心,关注解决问题的步骤和流程。 | 以对象(数据+行为)为中心,关注问题域中实体的属性和交互。 |
| 程序组成 | 由一系列函数(或过程)构成,数据与函数分离。 | 由一系列对象构成,每个对象封装了数据(属性)和操作数据的方法(行为)。 |
| 数据与操作 | 数据通常作为全局变量或在函数间传递,操作围绕数据展开。 | 数据和对数据的操作被封装在对象内部,通过对象的方法进行访问和修改。 |
| 代码复用 | 主要通过函数库和模块化实现。 | 通过继承、组合、多态等机制实现更高层次的复用和扩展。 |
| 典型语言 | C、Pascal、早期的 BASIC。 | Java、C++、Python、C#。 |
主要区别详解
程序设计角度
- 面向过程:思考“怎么做”(How)。将问题分解为一系列步骤,然后编写函数来实现每个步骤,最后按顺序调用这些函数。
- 面向对象:思考“谁来做”(Who)。将问题分解为一系列对象,定义每个对象的职责和行为,通过对象之间的协作来解决问题。
数据与代码的关系
- 面向过程:数据和处理数据的函数是分离的。函数是主动的,数据是被动的。
- 面向对象:数据和处理数据的函数被捆绑在一起,形成“对象”。对象是主动的,它知道自己能做什么(方法)。
三大特性(OOP独有)
- 封装(Encapsulation):将对象的属性和实现细节隐藏起来,只对外暴露必要的接口。提高了安全性和代码的模块化。
- 继承(Inheritance):允许创建新类(子类)基于现有类(父类)来构建,实现代码的复用和层次的抽象。
- 多态(Polymorphism):同一操作作用于不同的对象,可以产生不同的执行结果。提高了程序的灵活性和可扩展性。
程序结构
- 面向过程:程序结构是线性的或树状的,主函数调用一系列子函数。
- 面向对象:程序结构是网状的,由多个对象通过消息传递进行交互。
举例说明:实现“开车从A点到B点”
面向过程思路:
- 启动发动机()
- 挂挡()
- 踩油门()
- 控制方向盘()
- 刹车()
- 熄火()
(关注的是“开车”这个动作的步骤)
面向对象思路:
- 涉及的对象:
驾驶员、汽车。 汽车对象有属性:品牌、颜色、速度、油量;有方法:启动()、加速()、转向()、刹车()。驾驶员对象有方法:驾驶(某汽车)。- 程序表现为:
驾驶员.驾驶(汽车),在驾驶方法内部,驾驶员对象会调用汽车对象的一系列方法。
(关注的是“谁”参与以及“谁”能做什么)
- 涉及的对象:
优缺点与适用场景
面向过程
- 优点:流程清晰,适合解决步骤明确的简单问题,性能通常更高(无对象创建和消息传递开销)。
- 缺点:代码复用性差,难以应对复杂需求变化,数据和函数分离导致维护困难。
- 适用场景:性能要求极高的系统(如操作系统内核、嵌入式系统)、简单的脚本或工具。
面向对象
- 优点:易于建模现实世界,代码复用性高(通过继承、组合),易于维护和扩展(封装变化),更适合大型复杂项目。
- 缺点:性能略有开销,设计复杂度相对较高。
- 适用场景:大型软件系统、GUI应用程序、业务系统、需要长期维护和迭代的项目。
二、 字面量
计算机是用来处理数据的,字面量(Literal)是指在源代码中直接表示一个固定值的书写方式。三、变量
- 变量就是用来存储一个数据的内存区域(可以理解成盒子),且里面存储的数据可以变化。
- 变量使用的注意事项
- 变量使用前要声明
- 变量声明后不能存储其他类型变量
- 变量的有效范围是从定义开始到“}”截止,同一个范围内部不能定义2个同名的变量。
- 变量定义的时候可以没有初始值,但是使用的时候必须给初始值。
四、进制
二进制:由0 1 组成,以0b开头
八进制:由0到7组成,以0开头(二进制中三位一组)
十六进制:由1到f组成,以0x组成(二进制中四位一组)
数据在计算机底层都是采用二进制存储的,最小单位是字节,一个字节等于8个二进制位,1B=8b。
五、原码反码和补码
- 原码:最高位为符号位,0表示正,1表示负,其余表示数值大小
- 反码:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外
- 补码:正数的补码与其原码相同;负数的补码是在其反码末尾+1
六、数据类型
1.概念
java语言是强类型语言,对于每一种数据都定义了明确的具体数据类型,在内存中分配了不同大小的内存空间。2.作用:
数据类型就是约束变量存储数据的形式。3.分类:(引用数据类型和基本数据类型,以下为基本数据类型)
整数型
byte 一个字节 -128—127
short 两个字节 -215—215-1
int 四个字节 -231—231-1
long 八个字节 -263—263-1(L/l)浮点型
float 四个字节 -3.403E38—3.403E38
double 八个字节 -1.798E308—1.798E308(F/f)字符型
char 两个字节 0—65535布尔型
Boolean 理论上值占八分之一个字节,因为一个开关就决定true和false,但是java中boolean类型没有指明明确的大小
七、关键字及其使用
- 特点:组成字母全部为小写
- 注意事项:goto与const作为保留字存在,目前并未使用
八、标识符
- 概念:就是给类、接口、方法、变量等起名字时使用的字符序列
- 组成规则:英文大小写字符、数字、$和下划线_
- 注意事项:不能以数字开头、不能是java中的关键字、区分大小写
- 命名规则:
- 包:要求全部小写,一般是公司域名倒着写
例:com.heima.包的作用 (www.heima.com)
类或接口:如果是一个单词要求首字母大写;如果多个单词要求每个单词首字母大写(驼峰命名)
方法和变量:如果是一个单词每个字母都小写;如果是多个单词,从第二个单词开始首字母大写
常量,如果是一个单词所有字母大写,如果是多个单词也是所有单词大写,但是用_(下划线)分开