[JIT_APP]Java基础知识总结
一、Java语言的基础知识
1. 开发Java语言的公司
美国Sun(Sum Microsystems)公司开发。
2.Java的3个版本
J2SE(Java2 Standard Edition) 标准版,是为开发普通桌面和商务应用程序提供的解决方案。该技术体系是其他两者的基础,可以完成一些桌面应用程序的开发。比如Java版的扫雷。平时所说的JDK其实就是指J2SE。
J2EE(Java 2 Platform,Enterprise Edition) 企业版,是为开发企业环境下的应用程序提供的一套解决方案。该技术体系中包含的技术如Servlet Jsp等,主要针对于Web应用程序开发。
J2ME(Java 2 Micro Edition) 小型版,是为开发电子消费产品和嵌入式设备提供的解决方案。该技术体系主要应用于小型电子消费类产品,如手机中的应用程序等。这里的小型电子消费品不是指搭载了IOS或Android操作系统的手机,IOS和Android系统都有自己的开发组件。
两点注意:
Java5.0版本后,J2EE、J2SE、J2ME分别更名为JAVAEE JAVASE JAVAME。
每个版本名称中都带有一个数字"2",这个"2"是指Java2:自从 Java1.2 发布后,Java 改名为 Java2(不过我们平时仍然称为 Java)。
3.Java语言的几个主要特点
平台无关性:能运行于不同的平台上
安全性: 去掉了指针操作,内存由操作系统分配
面向对象: 利用类使程序更加利于维护
分布式: 可以使用网络文件和使用本机文件一样容易
健壮性: 检查程序编译和运行的错误
4.Java的三大核心机制
虚拟机机制: 利用虚拟机解释字节码执行java程序实现跨平台
垃圾收集机制: 自动内存回收
代码安全性机制: 加载代码后校验代码后再执行代码。
5.JDK是什么
JDK(Java Development Kit)Java开发工具包。包括了JRE,是开发Java的人员必备的开发运行Java程序的工具。
6.JRE是什么
JRE(Java Runtime Environment)Java运行环境,运行JAVA程序所必须的环境的集合,包含JVM标准实现及Java核心类库。
7.JVM是什么
JVM (Java Virtual Machine) Java虚拟机,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
8.Java文件的类型
有两种:
扩展名为java的文件:是Java源文件,属于编译之前的纯文本文件,存储java源代码。
扩展名为class的文件:是Java类文件,属于编译之后的二进制文件,存储字节码。
9.Java的编译运行原理
首先编写java源文件,然后编译成class类文件,然后通过虚拟机解释成机器码到硬件执行。
10.Java是编译型语言还是解释型的语言
既不是完全编译型,也不是完全解释型,是半编译半解释的。
二、Java在哪些方面有应用
Java 的应用可以简单分为以下几个方面:
1.Java的桌面应用
桌面应用仅仅需要JRE的支持就足够了。
2.Java Web应用
Java的Web应用至少需要安装JDK和一个Web容器(例如 Tomcat),以及一个多用户数据库,Web应用至少分为3层:
Browser层:浏览器显示用户界面
Web层:运行Servlet/JSP
DB层:后端数据库,向Java程序提供数据访问服务
3.Java企业级应用
企业级应用不叫复杂,可以扩展到n层,最简单情况会分为4层:
Browser层:浏览器显示用户界面
Client层:Java客户端图形程序(或者嵌入式设备的程序)直接和Web层或者EIB层交互
Web层:运行Servlet/JSP
EJB层:运行EJB,完成业务逻辑运算
DB层:祸端数据库,向Java程序提供数据访问服务
4.Java嵌入式应用
Java嵌入式应用是一个方心未艾的领域。嵌入式开发,需要从下载J2ME开发包,J2ME包含了嵌入式设备专用虚拟机KVM,和普通的JDK中包含的JVM有所不同,另外还需要到特定的嵌入式厂商那里下载模拟器。
三、Java语言概述
Java语言是SUN(Stanford University Network,斯坦福大学网络公司)公司1995年推出的一门高级编程语言,起初主要应用在小型消费电子产品上,后来随着互联网的兴起,Java语言迅速崛起,成为大型互联网项目的首选语言。2009年04月20日,美国甲骨文公司74亿美元收购Sun,取得java的版权。
更多关于Java的历史发展信息请参考:http://baike.baidu.com/view/29.htm#2
Java语言的崛起,与它的跨平台特性有着密切的关系。这里所说的"平台"主要是指不同的操作系统,所谓跨平台,是指通过Java语言编写的应用程序可以在不同的系统平台上平稳运行。
更多特性请参考:Java的特点
那么,跨平台是怎样实现的呢?这就要谈及Java虚拟机(Java Virtual Machine,简称 JVM)。
Java虚拟机可以理解为软件模拟的计算机,可以在任何处理器上(无论是在计算机中还是在其它电子设备中)安全并且兼容的执行程序。我们编写的Java源代码,编译以后会生成一种 .class 的文件,称为 字节码文件。java虚拟机就是负责将字节码文件翻译成特定的机器码然后运行,也就是说,只要在不同平台上安装相应的JVM,就可以运行字节码文件,运行我们编写的Java程序。
而这个过程中,我们编写的Java程序没有做任何改变,仅仅是通过JVM这一"中间层",就能在不同平台上运行,真正实现了"一次编译,到处运行"的目的。
关于JVM的更多解释,请查看:http://baike.baidu.com/view/160708.htm
总结:JVM是一个"桥梁",是一个"中间件",是实现跨平台的关键,Java代码首先被编译成字节码文件,再由JVM将字节码文件翻译成机器语言,从而达到运行Java程序的目的。
如下图所示,正是因为有了JVM,同一个Java程序才可以在三个不同的操作系统中执行。这样就就实现了Java程序的跨平台性,也称Java具有良好的可移植性。
图解Java实现跨平台的过程
四、Java与C/C++的区别
首先应该清楚,Java 是由 C++发展而来的,保留了 C++的大部分内容,其编程方式类似于 C++。但 Java 的句法更清晰、规模更小、更易学。Sun 公司对多种程序设计语言进行了深入研究,并摒弃了其他语言的不足之处,最终推出了 Java。正是这样,Java 从根本上解决了 C++的固有缺陷,形成了一种新的完全面向对象的语言。
Java 和 C/C++的相似之处多于不同之处,有 C 基础的读者,学习 Java 会更容易。相比较而言,Java 的编程环境更为简单。因篇幅所限,这里不能完全列出不同之处,仅列出一些比较显著的区别。
指针
Java 没有指针的概念,从而有效地防止了在 C/C++语言中,容易出现的指针操作失误(如指针悬空所造成的系统崩溃)。在 C/C++中,指针操作内存时,经常会出现错误。在Java 中没有指针,更有利于 Java 程序的安全。
多重继承
C++支持多重继承,它允许多父类派生一个子类。也就是说,一个类允许继承多个父类。尽管多重继承功能很强,但使用复杂,而且会引起许多麻烦,编译程序实现它也很不容易。所以 Java 不支持多重继承,但允许一个类实现多个接口。可见,Java 既实现了 C++多重继承的功能,又避免了 C++的许多缺陷。
数据类型
Java 是完全面向对象的语言,所有方法和数据都必须是类的一部分。除了基本数据类型之外,其余类型的数据都作为对象型数据。例如对象型数据包括字符串和数组。类将数据和方法结合起来,把它们封装在其中,这样每个对象都可实现具有自己特点的行为。而 C++将函数和变量定义为全局的,然后再来调用这些函数和变量,从而增加了程序的负担。此外,Java 还取消了 C/C++中的结构和联合,使编译程序更简洁。
自动内存管理
Java 程序中所有的对象都是用 new 操作符建立在堆栈上的,这个操作符类似于 C++的"new"操作符。Java 自动进行无用内存回收操作,不需要程序员进行删除。当 Java 中一个对象不再被用到时,无须使用内存回收器,只需要给它加上标签以示删除。无用内存的回收器在后台运行,利用空闲时间工作。而 C++中必须由程序释放内存资源,增加了程序设计者的负担。
操作符重载
Java 不支持操作符重载,操作符重载被认为是 C++的突出特征。在 Java 中虽然类可以实现这样的功能,但不支持操作符重载,这样是为了保持 Java 语言尽可能简单。
预处理功能
C/C++在编译过程中都有一个预编译阶段,即预处理器。预处理器为开发人员提供了方便,但增加了编译的复杂性。Java 允许预处理,但不支持预处理器功能,因为 Java 没有预处理器,所以为了实现预处理,它提供了引入语句(import),它与 C++预处理器的功能类似。
Java 不支持缺省函数参数,而 C++支持。
在 C 中,代码组织在函数中,函数可以访问程序的全局变量。C++增加了类,提供了类算法,该算法是与类相连的函数,C++类方法与 Java 类方法十分相似。由于 C++仍然支持 C,所以 C++程序中仍然可以使用 C 的函数,结果导致函数和方法混合使用,使得 C++程序比较混乱。
Java 没有函数,作为一个比 C++更纯的面向对象的语言。Java 强迫开发人员把所有例行程序包括在类中。事实上,用方法实现例行程序可激励开发人员更好地组织编码。
字符串
C 和 C++不支持字符串变量,在 C 和 C++程序中使用"Null"终止符代表字符串的结束,在 Java 中字符串是用类对象(String 和 StringBuffer)来实现的,在整个系统中建立字符串和访问字符串元素的方法是一致的。Java 字符串类是作为 Java 语言的一部分定义的,而不是作为外加的延伸部分。此外,Java 还可以对字符串用"+"进行连接操作。
goto 语句
"可怕"的 goto 语句是 C 和 C++的"遗物"。它是该语言技术上的合法部分,引用 goto语句造成了程序结构的混乱,不易理解。goto 语句一般用于无条件转移子程序和多结构分支技术。Java 不提供 goto 语句,其虽然指定 goto 作为关键字,但不支持它的使用,这使程序更简洁易读。
类型转换
在 C 和 C++中,有时出现数据类型的隐含转换,这就涉及了自动强制类型转换问题。例如,在 C++中可将一个浮点值赋予整型变量,并去掉其尾数。Java 不支持 C++中的自动强制类型转换,如果需要,必须由程序显式进行强制类型转换。