3.Java基础知识
2026/7/29 17:18:52 网站建设 项目流程

文章目录

  • 一、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#。

主要区别详解

  1. 程序设计角度

    • 面向过程:思考“怎么做”(How)。将问题分解为一系列步骤,然后编写函数来实现每个步骤,最后按顺序调用这些函数。
    • 面向对象:思考“谁来做”(Who)。将问题分解为一系列对象,定义每个对象的职责和行为,通过对象之间的协作来解决问题。
  2. 数据与代码的关系

    • 面向过程:数据和处理数据的函数是分离的。函数是主动的,数据是被动的。
    • 面向对象:数据和处理数据的函数被捆绑在一起,形成“对象”。对象是主动的,它知道自己能做什么(方法)。
  3. 三大特性(OOP独有)

    • 封装(Encapsulation):将对象的属性和实现细节隐藏起来,只对外暴露必要的接口。提高了安全性和代码的模块化。
    • 继承(Inheritance):允许创建新类(子类)基于现有类(父类)来构建,实现代码的复用和层次的抽象。
    • 多态(Polymorphism):同一操作作用于不同的对象,可以产生不同的执行结果。提高了程序的灵活性和可扩展性。
  4. 程序结构

    • 面向过程:程序结构是线性的或树状的,主函数调用一系列子函数。
    • 面向对象:程序结构是网状的,由多个对象通过消息传递进行交互。

举例说明:实现“开车从A点到B点”

  • 面向过程思路

    1. 启动发动机()
    2. 挂挡()
    3. 踩油门()
    4. 控制方向盘()
    5. 刹车()
    6. 熄火()
      (关注的是“开车”这个动作的步骤)
  • 面向对象思路

    • 涉及的对象:驾驶员汽车
    • 汽车对象有属性:品牌、颜色、速度、油量;有方法:启动()、加速()、转向()、刹车()。
    • 驾驶员对象有方法:驾驶(某汽车)。
    • 程序表现为:驾驶员.驾驶(汽车),在驾驶方法内部,驾驶员对象会调用汽车对象的一系列方法。
      (关注的是“谁”参与以及“谁”能做什么)

优缺点与适用场景

  • 面向过程

    • 优点:流程清晰,适合解决步骤明确的简单问题,性能通常更高(无对象创建和消息传递开销)。
    • 缺点:代码复用性差,难以应对复杂需求变化,数据和函数分离导致维护困难。
    • 适用场景:性能要求极高的系统(如操作系统内核、嵌入式系统)、简单的脚本或工具。
  • 面向对象

    • 优点:易于建模现实世界,代码复用性高(通过继承、组合),易于维护和扩展(封装变化),更适合大型复杂项目。
    • 缺点:性能略有开销,设计复杂度相对较高。
    • 适用场景:大型软件系统、GUI应用程序、业务系统、需要长期维护和迭代的项目。

二、 字面量

计算机是用来处理数据的,字面量(Literal)是指在源代码中直接表示一个固定值的书写方式。

三、变量

  • 变量就是用来存储一个数据的内存区域(可以理解成盒子),且里面存储的数据可以变化。
  • 变量使用的注意事项
    1. 变量使用前要声明
    2. 变量声明后不能存储其他类型变量
    3. 变量的有效范围是从定义开始到“}”截止,同一个范围内部不能定义2个同名的变量。
    4. 变量定义的时候可以没有初始值,但是使用的时候必须给初始值。

四、进制

  • 二进制:由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)
    类或接口:如果是一个单词要求首字母大写;如果多个单词要求每个单词首字母大写(驼峰命名)
    方法和变量:如果是一个单词每个字母都小写;如果是多个单词,从第二个单词开始首字母大写
    常量,如果是一个单词所有字母大写,如果是多个单词也是所有单词大写,但是用_(下划线)分开

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询