面向对象程序设计

202402150304

声明:本博客仅作为学习交流,博客中的信息仅供参考,并尽力确保其准确性和时效性,但无法保证绝对无误。因此,对于读者依据博客内容所作出的任何决定或行动,作者不承担任何责任。

文章目录


一、初识Java与面向对象程序设计

1.1 Java概述

1.1.1 计算机编程语言发展史

计算机编程语言的发展经历了从机器语言到汇编语言,再到高级语言的过程。随着技术的进步,编程语言不断演进,以适应不同的计算需求和技术挑战。高级语言如C、C++等为程序员提供了更接近自然语言的表达方式,简化了编程过程。

编程语言的发展历程:
在这里插入图片描述

  1. 机器语言
    直接使用二进制代码(0和1)编写。
    依赖于硬件架构,难以编写、阅读和维护。
  2. 汇编语言
    使用助记符表示机器指令。
    提供了比机器语言更易理解的抽象层。
    与特定处理器架构紧密相关。
  3. 高级语言
    提供更高层次的抽象,接近自然语言。
    独立于硬件架构,易于编写、阅读和维护。
    需要编译器或解释器将代码转换为机器码。

1.1.2 Java语言发展史

Java的历史可以追溯到1991年,当时Sun Microsystems(现已被Oracle收购)的一个团队开始开发一种小型的计算机语言,最初名为Oak,旨在用于消费电子产品。由于市场条件的变化以及互联网的兴起,Java最终转向了网络应用领域,并于1995年正式发布。自那时以来,Java经历了多个版本的迭代更新,引入了许多新特性,例如泛型、注解、lambda表达式等,逐渐成为企业级Web应用和移动应用开发的重要工具。
在这里插入图片描述
Java版本:
从1996年发布1.0版本开始,到目前为止,最新的Java版本是Java 21:

时间 版本
1996 1.0
1997 1.1
1998 1.2
2000 1.3
2002 1.4
2004 1.5 / 5.0
2005 1.6 / 6.0
2011 1.7 / 7.0
2014 1.8 / 8.0
2017/9 1.9 / 9.0
2018/3 10
2018/9 11
2019/3 12
2019/9 13
2020/3 14
2020/9 15
2021/3 16
2021/9 17
2022/3 18
2022/9 19
2023/3 20
2023/9 21
2024/3 22
2024/9 23

在Java语言的发展历程中,Java被分成三个版本:

  • Java SE:Java SE 是 Java 平台的标准版,提供了开发和部署跨平台应用程序所需的核心功能。它包括了丰富的 API,支持图形用户界面(GUI)、网络编程、文件处理等(定位在个人计算机上的应用)。
  • Java EE:Java EE 是为开发大型分布式企业级应用而设计的版本,包含了 Java SE 的所有特性,并在此基础上增加了更多企业级服务和技术(定位在服务端的应用)。
  • Java ME:Java ME 是专门为资源受限设备(如手机、嵌入式系统)设计的精简版 Java 平台。它根据设备的特点和限制优化了运行环境和 API(定位在消费性电子产品的应用)。
    在这里插入图片描述

1.1.3 Java语言的特点

Java是一种简单易学、面向对象、分布式的编程语言,它具有跨平台性、可移植性、安全性、健壮性、编译和解释性、高性能和动态性等特点。特别是其“一次编写,到处运行”的理念,使得Java程序可以在任何安装了适当JVM的操作系统上运行,极大地提高了代码的可移植性和重用性。

  1. 简单性:Java 语言设计得相对简单,易于学习和使用。它摒弃了许多复杂的特性(如指针操作、运算符重载等),使得开发者可以专注于解决问题而不是语言本身的细节。Java 还引入了垃圾回收机制,自动管理内存分配和释放,减轻了程序员的手动内存管理负担。
  2. 面向对象:Java 是一种完全的面向对象编程语言。它支持类、继承、多态、封装和接口等面向对象的概念,允许开发者构建模块化、可维护和可扩展的应用程序。每个应用程序至少包含一个类,并且所有代码都必须在类中定义。
  3. 跨平台性:Java 采用“编写一次,到处运行”的理念,通过 Java 虚拟机(JVM)实现了跨平台能力。只要目标系统上安装了对应的 JVM,Java 应用程序就可以在不同操作系统和硬件架构之间无缝迁移。
  4. 可移植性:由于 Java 源代码被编译成与平台无关的字节码,这种字节码可以在任何实现了 JVM 的平台上运行,这大大提高了代码的可移植性和互操作性。同时,Java 标准库的设计也考虑到了跨平台的一致性。
  5. 安全性:Java 提供了多层次的安全机制来保护应用程序免受恶意攻击。包括沙箱安全模型、类加载器体系结构、安全管理器以及加密服务等。这些特性确保了即使是在网络环境中执行的代码也能保持高度的安全性。
  6. 健壮性:Java 强调异常处理机制,强制要求程序员为可能出现的错误编写适当的处理逻辑。此外,Java 的类型检查严格,编译时能够捕捉更多错误,减少了运行时错误的发生几率,从而提高了程序的稳定性和可靠性。
  7. 编译和解释性:Java 源代码首先被编译成中间形式的字节码,然后由 JVM 解释或即时编译为本地机器指令执行。这种方式结合了编译型语言的速度优势和解释型语言的灵活性。
  8. 高性能:尽管 Java 早期版本的性能不如某些编译型语言,但随着 JIT(Just-In-Time)编译技术的发展,Java 程序可以在运行时优化,实现接近甚至超过传统编译语言的执行效率。此外,Java 的垃圾收集机制也经过不断改进以提高性能。
  9. 动态性:Java 支持动态加载类,这意味着可以在运行期间根据需要加载类文件。这增加了程序的灵活性,尤其是在网络应用中,能够适应不断变化的需求。Java 的反射 API 允许程序在运行时获取类的信息并操纵对象。
  10. 多线程:Java 内置对多线程的支持,允许并发执行多个任务。Java 提供了丰富的 API 来简化线程管理和同步操作,使开发人员更容易创建高效且响应迅速的应用程序,特别是在图形用户界面和服务器端应用中。
  11. 健壮性:健壮性已经在第6点中详细介绍。这里再次强调,Java 的强类型系统、自动垃圾回收、异常处理机制等特性共同作用,确保了程序的健壮性和稳定性,降低了程序崩溃的风险,提升了用户体验。

1.1.4 Java跨平台原理

Java的跨平台特性主要依赖于Java虚拟机(JVM)。当Java源代码被编译成字节码后,可以在不同平台上由相应的JVM解释执行。这意味着只要目标平台上存在合适的JVM实现,Java应用程序就能顺利运行。这种机制不仅保证了代码的一致性和稳定性,也促进了Java生态系统的繁荣。
在这里插入图片描述

1.2 面向对象程序设计思想

1.2.1 面向过程程序设计

面向过程编程(POP)是一种传统的编程范式,强调按照特定顺序执行一系列步骤来解决问题。这种方式适合逻辑相对简单的任务,但对于复杂的业务场景则显得不够灵活。例如,在猜拳游戏中,每一步都可以明确地用代码描述出来;但如果换成象棋游戏,使用POP就难以实现了。

1.2.2 面向对象程序设计

面向对象编程(OOP)则是现代软件工程中更为流行的范式。它将现实世界中的实体抽象成类和对象,通过定义属性和行为来描述事物的本质特征。OOP的核心在于模拟真实世界的交互模式,让各个组件能够独立运作同时又能协同合作。这种方法有助于构建模块化、易于维护且具有良好扩展性的大型系统。

1.2.3 面向对象与面向过程程序设计的比较

两者的主要区别在于思维方式的不同:POP关注的是如何一步步完成任务;而OOP侧重于创建相互协作的对象来共同达成目标。此外,OOP还具备更好的封装性、继承性和多态性,这使得代码更加结构化和复用性强。

1.3 Java开发环境搭建

1.3.1 JDK与JRE

Java Development Kit (JDK) 包含了Java Runtime Environment (JRE) 以及一系列用于开发Java应用程序的工具。JRE则仅包含运行已编译好的Java程序所需的库文件和支持组件。因此,如果你打算编写自己的Java程序,则需要安装JDK;如果只是想运行别人写的Java程序,则只需安装JRE即可。

简单地说,JRE就是运行Java字节码的虚拟机。但是,如果只有Java源码,要编译成Java字节码,就需要JDK,因为JDK除了包含JRE,还提供了编译器、调试器等开发工具。

二者关系如下:
在这里插入图片描述

1.3.2 JDK安装

安装JDK通常是一个直接的过程,用户可以从Oracle官方网站下载最新版本的JDK包,并按照提示完成安装。安装过程中可以选择是否要配置环境变量,以便后续可以通过命令行轻松调用Java编译器和其他工具。

  1. 下载 JDK
    在安装 JDK 之前,首先需要到 Oracle 官网下载 JDK。
    使用浏览器访问 Oracle 官网,在首页的栏目中选择 Products,然后选择 Java
    在这里插入图片描述
    选择 Java downloads 按钮跳转到 Java SE 下载页面,切换到 Java 17 的 Windows 版本列表,然后点击 x64 Installer 右侧的超链接进行下载:https://www.oracle.com/cn/java/technologies/downloads/
    在这里插入图片描述

  2. 安装 JDK
    在 JDK 下载完成后,接下来我们就可以开始安装 JDK 了,
    双击执行文件 jdk-17_windows-x64_bin.exe 打开 JDK 17 的安装向导,直接点击“下一步”
    在这里插入图片描述
    点击“更改…”按钮修改 JDK 的安装目录,然后点击下方的“下一步(N)”
    在这里插入图片描述
    进入 JDK 安装进度窗口
    在这里插入图片描述
    进入 JDK 安装完成界面,点击下方的“关闭©”,完成 JDK 的安装。
    在这里插入图片描述

1.3.3 环境变量配置

为了使系统能够识别并正确调用Java命令,我们需要设置PATH和CLASSPATH两个环境变量。前者指向JDK的bin目录,后者指定Java类库的位置。正确设置了环境变量之后,就可以在任意位置运行javac或java命令了。

1.4 第一个Java程序:HelloWorld!

1.4.1 显示文件扩展名

确保操作系统显示所有类型的文件扩展名,这对于正确处理Java源文件(.java)至关重要。例如,在Windows系统中,可以通过文件夹选项来启用此功能。

1.4.2 编写代码

创建一个新的文本文件,并将其保存为HelloWorld.java。然后在这个文件里输入以下内容:

public class HelloWorld {
   
   
    public static void main(String[] args) {
   
   
        System.out.println("Hello, World!");
    }
}

1.4.3 编译与执行

打开命令提示符窗口,导航至存放HelloWorld.java文件的目录,运行javac HelloWorld.java进行编译。成功编译后会生成一个同名但带有.class扩展名的文件。接下来,通过java HelloWorld命令来启动该程序,屏幕上应该会出现“Hello, World!”字样。
在这里插入图片描述

1.4.4 代码解析

上述代码定义了一个名为HelloWorld的公共类,其中包含了main方法作为程序入口点。System.out.println()语句负责输出指定的消息字符串。这里,“public”关键字表示该类可以被其他类访问;“static”意味着main方法属于整个类而非某个特定实例;“void”说明此方法不会返回任何值。
在这里插入图片描述

1.4.5 代码的注释

在Java中,我们可以使用单行注释(//)或多行注释(/…/)来添加解释性文字。良好的注释习惯可以帮助他人更容易理解你的代码意图,同时也是自我记录的好方法。

1.5 Java常用开发工具

1.5.1 Eclipse的安装与使用

Eclipse是一款开源的集成开发环境(IDE),专为Java开发者设计。它提供了丰富的插件支持,涵盖了从项目管理到调试测试等多个方面。安装Eclipse同样简单,只需前往官网下载对应平台版本的压缩包,解压后即可启动使用。初次启动时,建议选择一个合适的工作空间路径。
下载地址:https://www.eclipse.org/downloads/
在这里插入图片描述

1.5.2 IntelliJ IDEA的安装与使用

IntelliJ IDEA是由JetBrains公司开发的一款商业级IDE,以其智能感知、快速响应和强大的重构功能著称。对于希望提高生产力的专业人士来说,这是一个非常不错的选择。安装过程类似于Eclipse,下载安装包后按指示操作即可。此外,IntelliJ IDEA还提供了一个社区版,适用于个人学习和非商业用途。
下载地址:https://www.jetbrains.com/zh-cn/idea/download/
在这里插入图片描述

1.6 总结

在学习本章过程中,我收获颇丰。
知识方面,掌握了 Java 语言基础,包括数据类型、运算符、控制结构,还理解了面向对象编程的类与对象、封装性和构造方法等概念。技能上,学会搭建编程环境并熟练使用 IDE,代码编写与调试能力有所提升。
学习中我体会到理论与实践结合、善用网络资源及团队学习交流的重要性。但我对面向对象编程思想理解不够深入,编程实践能力也有待加强。

二、Java编程基础

2.1 变量与常量

2.1.1 关键字与保留字

在Java中,关键字是具有特殊含义的词汇,它们用于定义程序的结构和控制逻辑。Java语言包含了一系列的关键字,例如abstract, continue, for, new, switch等。值得注意的是,虽然goto和const被列为保留字,但在当前版本的Java中并没有实际功能。

2.1.2 标识符与命名规范

标识符是用来给Java程序中的元素如变量、方法、类等命名的符号。标识符必须遵循一定的规则:只能由字母、数字、下划线(_)、美元符号($)组成,并且不能以数字开头;标识符区分大小写,长度无限制;不能使用Java的关键字作为标识符。为了提高代码的可读性和维护性,Java社区普遍接受了一些命名规范,比如包名全部小写,类名采用大驼峰命名法(UpperCamelCase),而方法名、参数名、成员变量名则采用小驼峰命名法(lowerCamelCase)。

2.1.3 数据类型

Java是一种强类型的语言,这意味着每个变量都有一个明确的数据类型,在编译时就确定了。Java的数据类型分为两大类:基本数据类型和引用数据类型。基本数据类型包括整数类型(如byte, short, int, long)、浮点类型(如float, double)、字符类型(char)以及布尔类型(boolean)。引用数据类型则涵盖了类、接口、数组等。

2.1.4 变量的定义与赋值

变量是一段有名字的连续存储空间,用于存放数据。在Java中,变量必须先声明后使用,声明时需要指定其数据类型。例如,声明一个整型变量可以写作int age;。如果希望同时初始化这个变量,可以在声明的同时赋予它一个初始值,像这样:int age = 20;。对于局部变量来说,在首次使用之前必须为其赋值,否则会导致编译错误。

2.1.5 常量

常量是指一旦被初始化就不能改变其值的变量。在Java中,通过在声明变量时加上final修饰符来创建常量。例如,final double PI = 3.14159; 定义了一个名为PI的双精度浮点数常量。一旦设置了常量的值,就不能再对其进行修改。

2.1.6 变量的类型转换

Java支持两种类型的转换:自动类型转换(也称为隐式转换)和强制类型转换(显式转换)。当较小的数据类型向较大的数据类型转换时,Java会自动完成这一过程,比如从int到double。然而,当尝试将较大的数据类型转换为较小的数据类型时,则需要程序员显式地进行强制转换,并且需要注意可能产生的数据丢失问题。

2.1.7 Scanner的使用

为了从用户那里获取输入,Java提供了Scanner类,位于java.util包下。要使用Scanner对象,首先需要导入该类,然后创建一个新的Scanner实例。例如,Scanner input = new Scanner(System.in); 创建了一个新的Scanner对象,它可以用来读取用户的键盘输入。之后,可以通过调用next(), nextInt(), nextDouble()等方法来获取不同类型的数据。

2.2.运算符与表达式

2.2.1 算术运算符

Java中的算术运算符用于执行基本的数学运算。常见的算术运算符包括加(+)、减(-)、乘(*)、除(/)和取模(%)。此外,还有自增(++)和自减(–)运算符。

int a = 10, b = 3;
System.out.println("a + b = " + (a + b)); // 加法
System.out.println("a - b = " + (a - b)); // 减法
System.out.println("a * b = " + (a * b)); // 乘法
System.out.println("a / b = " + (a / b)); // 除法
System.out.println("a % b = " + (a % b)); // 取模

2.2.2 赋值运算符

赋值运算符用来给变量赋予一个新值。除了简单的=之外,还有复合赋值运算符如+=, -=, *=, /=, %=等,它们可以简化赋值操作。

int x = 5;
x += 3; // 等同于 x = x + 3;
System.out.println("x = " + x);

2.2.3 关系运算符

关系运算符用于比较两个值之间的大小关系,结果为布尔类型。常见的有等于(==)、不等于(!=)、大于(>)、小于(<)、大于等于(>=)和小于等于(<=)。

boolean isEqual = (a == b); // 比较是否相等
System.out.println("isEqual: " + isEqual);

2.2.4 逻辑运算符

逻辑运算符用于组合多个条件表达式,包括与(&&)、或(||)和非(!)。它们在控制流程中非常有用。

boolean condition = (a > 0 && b < 5) || !(a == b);
System.out.println("condition: " + condition);

2.2.5 位运算符

位运算符直接对整数类型的二进制表示进行操作,如按位与(&)、按位或(|)、按位异或(^)、左移(<<)、右移(>>)以及无符号右移(>>>)。

int c = 6; // 二进制: 110
int d = 3; // 二进制: 011
System.out.println("c & d = " + (c & d)); // 按位与

2.2.6 三元运算符

三元运算符提供了一种简洁的方式来进行条件判断,并返回不同的值。

int maxValue = (a > b) ? a : b;
System.out.println("maxValue: " + maxValue);

2.2.7 运算符的优先级

不同运算符有不同的优先级,这决定了表达式中各项计算的先后顺序。通常情况下,括号可以改变默认的优先级。

int result = 1 + 2 * 3; // 先乘后加
System.out.println("result: " + result);

2.3.选择结构

2.3.1 if语句

if语句根据条件决定是否执行某段代码。它也

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值