1 故事:Java帝国的诞生
C & C++
1972年, C语言
诞生。
它具有贴近硬件,运行极快,效率极高等多个优点。
好用,但同时C也给程序员安上了两把枷锁:指针和内存管理。
虽然指针的功能十分强大,能够直接操作内存,但由于其使用难度较大,且C语言也缺少相应的工具去做一些越界的检查,就导致了新手程序员很容易犯错。
而至于内存管理,C语言更是一种放任的态度,自己分配的空间要自己去释放。
然而更要命的是,这些问题在编译期间是发现不了的,只有在运行程序时才能暴露出来,常常让程序员昏天黑地的去调试,浪费大量的时间和精力。
1982年 C++
诞生。
它面向对象,兼容C,比C好用但是却复杂了很多,可移植性也不强。
反抗
因此,我们需要建立一个新的语言,它应该具有以下特点。
- 语法有点像C
- 没有指针
- 没有内存管理
- 真正的可移植性,编写一次,到处运行
- 面向对象
- 类型安全
- 高质量的类库
- ……
于是乎, java
诞生。
关于java名字的由来,最开始想命名为 C++--
,意思是在C++的基础上优化及删减一部分,但后来发现java与C++的设计理念相差太大,遂放弃。
然后由于java开发工作室门口有棵橡树,就将其命名为 Oak
(橡树英文),但在注册商标时发现Oak也已被注册。
后来又尝试了一系列的名字,但均被否掉。
最终,一名提议者在喝咖啡时想起印度尼西亚的爪哇岛(该岛盛产咖啡豆),java一名由此诞生。
Java初生
1995年的网页简单而粗糙,缺乏互动性。
于是java推出Applet,一个关于图形界面的小程序,能够很好地提升网页的互动性。
通过Applet,无数人知道了java的存在,也使得java挖走了很多不满C语言暴政的人,也包括 Oracle
和 微软
。
Bill Gates曾说,这是迄今为止设计的最好的语言!
然而和微软的合作好景不长。
微软想把java绑死在Windows以获取更高的利润,但这一行为会导致java不可移植,于是java和微软产生争执,最终导致微软推出了java领域。
java三大版本:
- JavaSE 标准版
- JavaME 移动版
- JavaEE 企业版
java三大军开始拓展,SE和ME均发展较差,互联网时代的到来则导致EE开始兴起。
Java发展
基于java,巨多的平台、系统、工具等被开发出来。
- 构建工具:Ant, Maven, Jekins
- 应用服务器:Tomcat, Jetty, Jboss, Websphere, weblogic
- Web开发:Struts, Spring, Hibernate, myBatis
- 开发工具:Eclipse, Netbean,
intellij idea
, Jbuilder - ……
java具有“三高”特点:高可用,高性能,高并发。
微软眼睁睁地看着服务器市场被java逐渐占据,于是推出了.NET来抗衡,但却并未引起java的一点重视。
而python和php仅在开发一些复杂度较低的系统时效率高于java,在设计大型的web系统时仍要使用java,因此python和php对java并没有实质性的冲击力。
关于.NET的可移植性。
理论上c#和.Net程序是跨平台的,C#作为一种编程语言,早在2003年就成为ISO的标准之一。
但是有很多实际问题。
- 微软官方并没有提供除Windows(包括windows mobile)以外的其他系统,如Linux,苹果,Unix,等等的Framework。而不像Sun公司开发Windows,Linux以及手机版等多个版本JRE(Java Run Enviroment). 就是说C#和Java语言理论上都是针对各自的虚拟机开发的,而虚拟机(微软的虚拟机叫.Net Framework, Sun的虚拟机叫JRE)不是跨平台的,目前,除Windows外,还没有其他操作系统上有稳定版本的.Net Framework环境,提供给.Net 程序来运行。Linux上的Mono项目只实现了.Net Framework 1.1的规范,远远落后于Windows平台。
- 许多Dot Net 开发者处于某种需要,如功能性和效率性,调用了Windows操作系统的API函数,而这些函数的名称不是跨平台的。
2006年,Hadoop使得java进入大数据领域。
2008年, Android
的诞生更使得java一发不可收拾,java运行在Android之上并被 谷歌
支持,完成了当年ME壮志未酬的事业。
至此,一个伟大的帝国诞生了!
2 Java特性和优势
简单性
- 没有指针运算、头文件
- 不用分配内存
- 简单易学
面向对象
- 重点是对象以及对象之间的接口,模拟人的思维去写程序
- java中流传一句话:万物皆对象
可移植性
- 跨平台
- Write once, run anywhere
高性能
- 即时编译效率接近C++
分布式
- java为网络分布式而设计
- 能处理TCP/IP协议相关问题
- 支持远程方法调用,程序可通过网络调用方法
动态性
- java本身不具有动态性,但java具有反射机制可实现动态性
- C++无法实现
多线程
- 带来更多交互行为
安全性
- 异常机制
健壮性
- 每次运行自动检查内存
- 运行时不会导致计算机崩溃
3 Java三大版本
JavaSE:标准版
- 桌面程序
- 控制台开发
- ...
JavaME:嵌入式开发
- 手机
- 小家电
- ...
JavaEE:企业级开发
- web端
- 服务器开发
SE是核心、基础。
ME已死,近乎绝迹。
EE技术应用最为广泛,偏向服务器开发。
4 JDK, JRE, JVM
JDK:Java Development Kit
- java开发工具,包含JRE
JRE:Java Runtime Environment
- java运行环境,包含JVM
- 安装了JRE就能运行java程序
JVM:Java Virtual Machine
- java虚拟机
- 实现跨平台的核心
- 可屏蔽底层系统差异
5 Java开发环境搭建
JDK下载与安装
Oracle官网:https://www.oracle.com/index.html
配置环境变量
1、首先在设置中搜索环境变量
2、设置环境变量
3、新建系统变量
4、变量名:JAVA_HOME
变量值为JDK安装路径
5、配置Path变量(双击)
6、新建两个变量
变量值为 %JAVA_HOME%bin 和 %JAVA_HOME%jrebin
两个 % 表示引用
7、使用 java -version
命令测试变量是否配置成功
JDK目录介绍
bin目录中存放一些可执行程序,比如javac(编译器)及一些运行工具
include目录可实现在java中引入C语言头文件
lib目录存放java库文件
文本编辑器下载
下载一个可直接编辑 .java
文件的文本编辑器。
如PSPad,Emacs,EditPlus,Vim,TextMate,Gedit等等。
6 HelloWorld详解
1、 新建文件夹,用于存放代码
2、 新建一个java文件
- 后缀名:.java
- HelloWorld.java
- 若系统不显示文件后缀名,手动打开
3、 编写代码
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, world!");
}
}
4、 使用javac命令编译java文件,生成一个class文件
5、 运行class文件
7 编译型和解释型
什么是编译型语言和解释型语言
计算机是不能理解高级语言的,更不能直接执行高级语言,它只能直接理解机器语言,所以使用任何高级语言编写的程序若想被计算机运行,都必须将其转换成计算机语言,也就是机器码。而这种转换的方式有两种:
- 编译
- 解释
由此高级语言也分为编译型语言和解释型语言。
编译型语言
性质
使用专门的编译器,针对特定的平台,将高级语言源代码一次性地编译成可被该平台硬件执行的机器码,并包装成该平台所能识别的可执行性程序的格式。
特点
在编译型语言写的程序执行之前,需要一个专门的编译过程,把源代码编译成机器语言的文件,如exe格式的文件,以后要再运行时,直接使用编译结果即可,如直接运行exe文件。因为只需编译一次,以后运行时不需要编译,所以编译型语言执行效率高。
总结
- 一次性地编译成平台相关的机器语言文件,运行时脱离开发环境,运行效率高;
- 与特定平台相关,一般无法移植到其他平台;
- 现有的C、C++、Objective等都属于编译型语言。
解释型语言
性质
使用专门的解释器对源程序逐行解释成特定平台的机器码并立即执行。
特点
解释型语言不需要事先编译,其直接将源代码解释成机器码并立即执行,所以只要某一平台提供了相应的解释器即可运行该程序。
总结
- 解释型语言每次运行都需要将源代码解释称机器码并执行,效率较低;
- 只要平台提供相应的解释器,就可以运行源代码,所以可以方便源程序移植;
- Python等属于解释型语言。
本节转自CSDN博客文章 什么是编译型语言和解释型语言-叶无缺
使用IDEA开发
IDE
集成开发环境
(IDE,Integrated Development Environment )是用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和图形用户界面等工具。
集成了代码编写功能、分析功能、编译功能、调试功能等一体化的开发软件服务套。所有具备这一特性的软件或者软件套(组)都可以叫集成开发环境。
如微软的Visual Studio系列,Borland的C++ Builder、Delphi系列等。
该程序可以独立运行,也可以和其它程序并用。
IDE多被用于开发HTML应用软件。例如,许多人在设计网站时使用IDE(如HomeSite、DreamWeaver等),因为很多项任务会自动生成。
IDEA
IDEA
全称 IntelliJ IDEA,是java编程语言开发的集成环境。
IntelliJ在业界被公认为最好的java开发工具,尤其在智能代码助手、代码自动提示、重构、JavaEE支持、各类版本工具(git、svn等)、JUnit、CVS整合、代码分析、 创新的GUI设计等方面的功能可以说是超常的。
IDEA是JetBrains公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主。
它的旗舰版本还支持HTML,CSS,PHP,MySQL,Python等。免费版只支持Java,Kotlin等少数语言。
IDEA官网:https://www.jetbrains.com/idea/
百度搜索 IDEA优化
以优化使用体验。
感谢 狂神说 提供的java学习资源。