diff --git a/docs/开发/C++/简介.md b/docs/开发/C++/简介.md index 9c9beda2..0dd7a0ed 100644 --- a/docs/开发/C++/简介.md +++ b/docs/开发/C++/简介.md @@ -17,7 +17,41 @@ C++ 是 C 的一个超集,事实上,任何合法的 C 程序都是合法的 **注意:**使用静态类型的编程语言是在编译时执行类型检查,而不是在运行时执行类型检查。 -### 面向对象程序设计 +### 标准化 + +| 发布时间 | 文档 | 通称 | 备注 | +| -------- | --------------------- | ------ | ------------------- | +| 2017 | ISO/IEC 14882:2017 | C++17 | 第五个C++标准 | +| 2015 | ISO/IEC TS 19570:2015 | - | 用于并行计算的扩展 | +| 2015 | ISO/IEC TS 18822:2015 | - | 文件系统 | +| 2014 | ISO/IEC 14882:2014 | C++14 | 第四个C++标准 | +| 2011 | ISO/IEC TR 24733:2011 | - | 十进制浮点数扩展 | +| 2011 | ISO/IEC 14882:2011 | C++11 | 第三个C++标准 | +| 2010 | ISO/IEC TR 29124:2010 | - | 数学函数扩展 | +| 2007 | ISO/IEC TR 19768:2007 | C++TR1 | C++技术报告:库扩展 | +| 2006 | ISO/IEC TR 18015:2006 | - | C++性能技术报告 | +| 2003 | ISO/IEC 14882:2003 | C++03 | 第二个C++标准 | +| 1998 | ISO/IEC 14882:1998 | C++98 | 第一个C++标准 | + +### 发展历程 + +- C++ 编程语言的历史可以追溯到 **1979 年**,当时 Bjarne Stroustrup 为博士学位论文进行了一些开发。在 Stroustrup 可以使用的所有语言中,有一种被称为 Simula 的语言,顾名思义,它可能是一种主要为仿真而设计的语言。Simula 67 语言是 Stroustrup 使用的变体,被认为是支持面向对象编程范例的主要语言。Stroustrup 发现这种范例对包装开发很有帮助。但是,Simula 语言对于实践和实际使用而言太慢了。 随后不久,Bjarne Stroustrup 希望通过支持面向对象范例来增强 C。他深入研究了 Smalltalk 的 OO 实现,以获取有关实现的想法。但是他不愿意为此放弃性能,因此他开始从事 “C with Classes (带有类的 C)” 的工作,希望 C++ 代码运行时应具有与 C 代码相似(或更好)的性能。 +- **1983 年**,语言的名称从 “带有类的 C” 更改为 C++。C 语言中的 ++ 运算符是用于递增变量的运算符,它使您可以深入了解 Stroustrup 如何看待该语言。在此期间添加了许多新功能,其中最引人注目的是虚函数,函数重载,带有&符号的引用,const 关键字和使用两个正斜杠的单行注释。 +- **1985 年**,Stroustrup 出版了名为*“C++ 编程语言” 的书籍*。同年,C++ 被实现为商业产品。该语言尚未正式标准化,因此使该书成为非常重要的参考。该语言在 1989 年再次进行了更新,以包括受保护的成员和静态成员,以及从多个类的继承。 +- **1990 年**,发行了*《带注释的 C++ 参考手册*》。同年,Borland 的 Turbo C++ 编译器将作为商业产品发布。Turbo C++ 添加了许多其他库,这些库会对 C++ 的开发产生相当大的影响。尽管 Turbo C++ 的最后一个稳定版本是 2006 年,但该编译器仍被广泛使用。 +- **1998 年**,C++ 标准委员会发布了第一个 C++ ISO / IEC 14882:1998 国际标准,其非正式名称为 C++ 98。据说*《带注释的 C++ 参考手册*》对标准的制定产生了很大的影响。还包括标准模板库,该模板库于 1979 年开始概念开发。2003 年,该委员会对 1998 年标准所报告的多个问题做出了回应,并对其进行了相应的修订。更改的语言称为 C++ 03。 +- **2005 年**,C++ 标准委员会发布了一份技术报告(称为 TR1),详细介绍了他们计划添加到最新 C++ 标准中的各种功能。新标准被非正式地称为 C++ 0x,因为它有望在第一个十年结束之前的某个时间发布。具有讽刺意味的是,新标准要到 2011 年年中才会发布。直到那时为止,已经发布了几份技术报告,并且一些编译器开始为新功能添加实验性支持。 +- **2011 年中**,新的 C++ 标准(称为 C++ 11)完成。Boost 库项目对新标准产生了重大影响,其中一些新模块直接来自相应的 Boost 库。一些新功能包括正则表达式支持,全面的随机化库,新的 C++ 时间库,原子支持,标准线程库 ,一种新的 for 循环语法,提供的功能类似于某些其他语言中的 foreach 循环,auto 关键字,新的容器类,对联合和数组初始化列表以及可变参数模板的更好支持。 +- **2014 年**,C++ 14(也称为 C++ 1y)作为 C++11 的一个小扩展发布,主要功能是错误修复和小的改进,国际标准投票程序草案于 2014 年 8 月中完成,加强 lambda 函数,constexpr 和类型推导特性。 +- **2017 年**,发布 C17 标准,C17 提供了很多东西。增强了核心语言和库。 +- **2020 年**,发布 C++20 标准,推出了很多重量级功能,其中比较重要的有: + - Concepts:概念改变了我们思考和编程模板的方式。它们是模板参数的语义类别。它们使您可以直接在类型系统中表达您的意图。如果出了什么问题,您会收到清晰的错误消息。 + - Ranges library:新的 ranges 库使它可以直接在容器上执行算法,用管道符号组成算法,并将其应用于无限数据流。 + - Coroutines:由于协程,C++ 中的异步编程成为主流。协程是协作任务,事件循环,无限数据流或管道的基础。 + - Modules:模块克服了头文件的限制。头文件和源文件的分离变得和预处理器一样过时了。最后,我们有更快的构建时间和更轻松的构建软件包的方法。 + - Concurrency:Atomic Smart Pointers,Joining & Cancellable Threads,The C20 Synchronization Library,增强了 C++ 并发编程能力; + +### 面向对象 C++ 完全支持面向对象的程序设计,包括面向对象开发的四大特性: @@ -34,29 +68,34 @@ C++ 完全支持面向对象的程序设计,包括面向对象开发的四大 - C++ 标准库,提供了大量的函数,用于操作文件、字符串等。 - 标准模板库(STL),提供了大量的方法,用于操作数据结构等。 -### ANSI 标准 +## 实例 -ANSI 标准是为了确保 C++ 的便携性 —— 您所编写的代码在 Mac、UNIX、Windows、Alpha 计算机上都能通过编译。 +```cpp +// 输出单词 Hello World +#include +using namespace std; -由于 ANSI 标准已稳定使用了很长的时间,所有主要的 C++ 编译器的制造商都支持 ANSI 标准。 +// main() 是程序开始执行的地方 +int main(){ + // 输出 Hello World + cout << "Hello World"; + return 0; +} +``` +1. C++ 语言定义了一些头文件,这些头文件包含了程序中必需的或有用的信息。上面这段程序中,包含了头文件 -### 标准化 +2. 行 **using namespace std;** 告诉编译器使用 std 命名空间。命名空间是 C++ 中一个相对新的概念。 -| 发布时间 | 文档 | 通称 | 备注 | -| -------- | --------------------- | ------ | ------------------- | -| 2015 | ISO/IEC TS 19570:2015 | - | 用于并行计算的扩展 | -| 2015 | ISO/IEC TS 18822:2015 | - | 文件系统 | -| 2014 | ISO/IEC 14882:2014 | C++14 | 第四个C++标准 | -| 2011 | ISO/IEC TR 24733:2011 | - | 十进制浮点数扩展 | -| 2011 | ISO/IEC 14882:2011 | C++11 | 第三个C++标准 | -| 2010 | ISO/IEC TR 29124:2010 | - | 数学函数扩展 | -| 2007 | ISO/IEC TR 19768:2007 | C++TR1 | C++技术报告:库扩展 | -| 2006 | ISO/IEC TR 18015:2006 | - | C++性能技术报告 | -| 2003 | ISO/IEC 14882:2003 | C++03 | 第二个C++标准 | -| 1998 | ISO/IEC 14882:1998 | C++98 | 第一个C++标准 | +3. **// main() 是程序开始执行的地方** 是一个单行注释。单行注释以 // 开头,在行末结束。 -## g++ 编译器 +4. **int main()** 是主函数,程序从这里开始执行。 + +5. **cout << "Hello World";** 会在屏幕上显示消息 "Hello World"。 + +6. **return 0;** 终止 main( )函数,并向调用进程返回值 0。 + +### g++ 编译器 程序 g++ 是将 gcc 默认语言设为 C++ 的一个特殊的版本,链接时它自动使用 C++ 标准库而不用 C 标准库。通过遵循源码的命名规范并指定对应库的名字,用 gcc 来编译链接 C++ 程序是可行的,如下例所示: @@ -110,7 +149,7 @@ g++ 有些系统默认是使用 C++98,我们可以指定使用 C++11 来编译 g++ -g -Wall -std=c++11 main.cpp ``` -### 常用命令选项 +**常用命令选项** | 选项 | 解释 | | ------------ | ------------------------------------------------------------ | diff --git a/docs/开发/Java/简介.md b/docs/开发/Java/简介.md new file mode 100644 index 00000000..b643aee9 --- /dev/null +++ b/docs/开发/Java/简介.md @@ -0,0 +1,84 @@ +--- +id: 简介 +title: 简介 +sidebar_position: 1 +data: 2022年4月25日 +--- + +## Java 是什么 + +Java 是世界上使用最广泛的编程语言之一。 + +Java 最初由 Sun Microsystems 在 1990 年代开发,用于开发从 Web 应用程序到移动应用程序,再到批处理应用程序的所有内容。Java 最初是一种纯粹的面向对象的语言,但现在已经发展成为一种多范例语言,可以高度适应任何情况。拥有庞大的开发人员社区和支持库,Java 是开发几乎所有类型的应用程序的理想选择。 + +Java 是最初由开发 James Gosling (詹姆斯·高斯林,他被称为 Java 编程语言之父)在 Sun Microsystems 公司(现已被 Oracle 收购),并于1995年发布了作为 Sun 公司的一个核心组成部分 Java 平台。 + +James Gosling (詹姆斯·高斯林),Mike Sheridan (迈克·谢里丹)和 Patrick Naughton (帕特里克·诺顿)于 1991 年 6月启动了 Java 语言项目。Java 最初是为交互式电视设计的,但在当时的数字有线电视行业来说太先进了。该语言最初是在 James Gosling (詹姆斯·高斯林)办公室外的一棵橡树之后被称为 Oak 的。 + +后来,该项目以 *Green* 命名,并最终从 Java coffee (印度尼西亚的一种咖啡)重命名为 *Java*。 + +### Java SE + +**Java SE(Java Platform Standard Edition,Java 平台标准版)**以前称为 J2SE,它允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的 Java 应用程序。Java SE 包含了支持 Java Web 服务开发的类,并为 Java EE 提供基础,如 Java 语言基础、JDBC 操作、I/O 操作、网络通信以及多线程等技术。 + +### Java EE + +**Java EE(Java Platform Enterprise Edition,Java 平台企业版)**以前称为 J2EE。企业版本帮助开发和部署可移植、健壮、可伸缩且安全的服务器端 Java 应用程序。Java EE 是在 Java SE 基础上构建的,它提供 Web 服务、组件模型、管理和通信 API,可以用来实现企业级的面向服务体系结构(Service Oriented Architecture,SOA)和 Web 2.0 应用程序。 + +### Java ME + +**Java ME(Java Platform Micro Edition,Java 平台微型版)**以前称为 J2ME,也叫 K-JAVA。 Java ME 为在移动设备和嵌入式设备(比如手机、PDA、电视机顶盒和打印机)上运行的应用程序提供一个健壮且灵活的环境。 + +Java ME 包括灵活的用户界面、健壮的安全模型、丰富的内置网络协议以及对可以动态下载的联网和离线应用程序。基于 Java ME 规范的应用程序 只需编写一次就可以用于许多设备,而且可以利用每个设备的本机功能。 + +## Java 的特点 + +### 简单 + +Java 语言的风格很像 C 语言和 C++ 语言,是一种纯粹的面向对象语言,它继承了 C++ 语言面向对象的技术核心,但是拋弃了 C++ 的一些缺点,比如说容易引起错误的指针以及多继承等,同时也增加了垃圾回收机制,释放掉不被使用的内存空间,解决了管理内存空间的烦恼。 + +### 面对对象 + +Java 是一种面向对象的语言,它对对象中的类、对象、继承、封装、多态、接口、包等均有很好的支持。为了简单起见,Java 只支持类之间的单继承,但是可以使用接口来实现多继承。使用 Java 语言开发程序,需要采用面向对象的思想设计程序和编写代码。 + +### 平台独立性 + +平台独立性的具体表现在于,Java 是“**一次编写,到处运行(Write Once,Run any Where)**”的语言,因此采用 Java 语言编写的程序具有很好的可移植性,而保证这一点的正是 Java 的虚拟机机制。在引入虚拟机之后,Java 语言在不同的平台上运行不需要重新编译。 + +### 可移植性 + +Java 基本数据类型的数据大小都做了统一的规定,没有“与具体实现相关”的概念。所以 .jar 文件能够同时在 Windows、Mac OS、Linux 系统下运行,不需要再次编译。 + +### 多线程 + +Java 语言是容易实现多线程的,这也是 Java 语言的一大特性,它必须由 Thread 类和它的子类来创建。Java 支持多个线程同时执行,并提供多线程之间的同步机制。任何一个线程都有自己的 run() 方法,要执行的方法就写在 run() 方法体内。实现多线程的方式主要有下面这几种: + +- 用户空间中实现多线程 +- 内核空间中实现多线程 +- 用户和内核空间中混合实现线程 + +### 高性能 + +编写的代码,经过 javac 编译器编译为字节码(bytecode),经过 JVM 内嵌的解释器将字节码转为机器码,这是解释执行,这种效率相对较低。但部分 JVM 的实现比如 Hotspot JVM 都提供了 **JIT(Just in Time)动态编译器**,JIT 能够在运行时将热点代码编译机器码。随着 JIT(Just in Time)的发展,Java 的运行速度也越来越高。 + +### 健壮性 + +Java 的强类型机制、异常处理、垃圾回收机制等都是 Java 健壮性的重要保证。对指针的丢弃是 Java 的一大进步。另外,Java 的异常机制也是健壮性的一大体现。 + +### 分布式 + +Java 语言支持 Internet 应用的开发,在 Java 的基本应用编程接口中就有一个网络应用编程接口,它提供了网络应用编程的类库,包括 URL、URLConnection、Socket 等。Java 的 RIM 机制也是开发分布式应用的重要手段。 + +### 安全性 + +Java 通常被用在网络环境中,为此,Java 提供了一个安全机制以防恶意代码的攻击。除了 Java 语言具有的许多安全特性以外,Java 对通过网络下载的类具有一个安全防范机制(类 ClassLoader),如分配不同的名字空间以防替代本地的同名类、字节代码检查,并提供安全管理机制(类 SecurityManager)让 Java 应用设置安全哨兵。 + +## Java 的开发环境 + +### JDK + +JDK(Java Development Kit)称为 Java 开发包或 Java 开发工具,是一个编写 Java 的 Applet 小程序和应用程序的程序开发环境。JDK 是整个 java 的核心,包括了 Java 运行环境(Java Runtime Environment),一些 Java 工具和 Java 的核心类库(Java API)。 + +### JRE + +JRE(Java Runtime Environment)是个运行环境,运行 Java 程序的时候就需要 JRE。JDK 里面包含 JRE,因此只要安装了 JDK 就可以编辑、运行 Java 程序。如果只是运行普通的 java 程序无须安装 JDK,只需要安装 JRE 即可。