跳转至

Java 及面向对象简介

Java的历史与发展

1990 年 SUN 公司开始用 C++ 开发家用电器软件,1994 年基于 C++ 开发出了 Oka 语言,1995 年 正式将 Oka 命名为 Java,官网 java.sun.com,后 SUN 被 Oracle 收购。

Java 分为三大平台:

  • Java SE 标准版:用于桌面应用
  • Java EE 企业版:用于 web 应用
  • Java ME 微型版:用于移动端应用

JDK 是 Java 开发工具包,其发展历程如下:

  • 1995 - JDK 1.0:初创
  • 1998 - JDK 1.2:Java2
  • 2000 - JDK 1.3:改进
  • 2002 - JDK 1.4:稳定
  • 2004 - JDK 1.5:语法增加,从此叫 Java 5,6,7...
  • 2006 - JDK 1.6:广泛使用
  • 2010 - Oracle 并购 SUN
  • 2011 - JDK 1.7:改进
  • 2014 - JDK 1.8:前进大步

Java 的发展是由 JCP(Java Community Process) 和 JSR(Java Specification Requests)主要推动的。例如,Lambda 表达式是 JSR-335 引入的,这也是 Java8 重要的新特性。

Java 语言的特点

Java 是一种编程语言,它面向对象,语法与 C++ 极为相似,但比 C++ 更简单。

Java 的特点可以规纳入下:

  • 语法简单
  • 面向对象(与 C++ 保留了一部分 C 的特性不同,Java 的一切冻灾对象内,是更为纯粹的面向对象)
  • 平台无关
  • 安全稳定
  • 支持多线程

另外,Java 具备丰富的类库,提供了大量的类以满足网络化、多线程、面向对象系统的需要。

所以,Java 能够胜任 面向对象的应用开发、各类网络应用程序的开发、计算过程的可视化、动态画面和交互操作、Internet系统管理、数据库操作 等任务。

Java 相比 C++ 的砍掉了什么:

  • 无直接指针操作
  • 自动内存管理(系统自动释放内存)
  • 数据类型长度固定(平台无关)
  • 不用头文件
  • 不包含结构和联合
  • 不支持宏
  • 不用多重继承(而是用结构,从而避免了拷贝构造等 C++ 中的复杂操作)
  • 无类外全局变量
  • 无 GOTO

Java 运行机制 - 跨平台的原因

Java 有三个核心机制:

  • Java 虚拟机(JVM)
  • 代码安全性检查(Code Security)
  • 垃圾收集机制(Garbage Collection)

JavaCompileRun
Java 程序的编译和运行

其中 JVM 是在一台计算机上由软件或硬件模拟的计算机,读取并处理经过并以过的字节码 class 文件。

JVM 规范定义了:指令集、寄存器集、类文件结构、堆栈、垃圾收集堆、内存区域。

具体运行时需要运行环境 JRE(Java Runtime Environment)

JRE = JVM + API(Lib)

JRE 运行时有三项主要功能:

  • 加载代码:由 class loader 完成
  • 校验代码:由 bytecode verifier 完成 —— 该特点保证 Java 的安全性
  • 执行代码:由 run time interpreter 完成

另一方面,Java 有自动垃圾回收机制(在 C++ 中程序员需要利用 new/delete 操作管理内存)。

  • JVM 中有系统及线程跟踪存储空间的分配情况
  • 在 JVM 空闲时,检查并释放那些可被释放的存储空间
  • 程序员无须也无法精确控制或干预该回收过程

最后 JDK 是由 JRE+工具包 构成的,其中工具包主要包括:Java Compiler, Java Debugger, JavaDoc, JPDA。

JDK 提供的工具有:

  • java 编译器:javac
  • java 执行器:java
  • 文档生成器:javadoc
  • java 打包器:jar
  • java 调试器:jdb

面向对象程序设计

对象的含义:

  • 现实世界中:一个客观实体
  • 计算机世界中:一个可标识的存储区域

类:具有共同属性(变量,field)和行为(方法,method)的对象集合

类是对象的抽象(模板),对象是类的实例。

注:类和对象有时都称为“对象”,为了明确起见,后者称为对象实例。

面向对象的程序设计有 封装性、继承性、多态性 三大特征。

封装

  • 模块化:将属性和行为封装在类中,程序定义很多类。
  • 信息隐蔽:将类的细节部分隐藏起来,用户只通过某个后保护的接口访问某个类。

继承(inheritance)

继承的本质是基一种 类和子类之间共享数据的方法。从而大大提高了编程效率。

继承的好处可以总结为:

  • 更好地进行 抽象与分离
  • 增强代码的 重用率
  • 提高 可维护性

多态(polymorphism)

让不同的对象,在接收同一个指令(方法)的时候进行不同的操作。

其中细节的实现则由接收对象自行决定。

面向对象程序设计的要点

  • 认为客观世界有各种对象组成
  • 程序的分析和设计都围绕着

    • 有哪些类
    • 各个类有哪些属性、哪些方法
    • 类之间的关系(如继承、关联)
    • 对象之间发送消息(调用方法)