java简介
Java介于编译型语言和解释型语言之间。
编译型语言如C、C++,代码是直接编译成机器码执行,但是不同的平台(x86、ARM等)CPU的指令集不同,因此,需要编译出每一种平台的对应机器码。
解释型语言如Python、Ruby没有这个问题,可以由解释器直接加载源码然后运行,代价是运行效率太低。而Java是将代码编译成一种“字节码”,它类似于抽象的CPU指令,然后,针对不同平台编写虚拟机,不同平台的虚拟机负责加载字节码并执行,这样就实现了“一次编写,到处运行”的效果。当然,这是针对Java开发者而言。对于虚拟机,需要为每个平台分别开发。为了保证不同平台、不同公司开发的虚拟机都能正确执行Java字节码,SUN公司制定了一系列的Java虚拟机规范。从实践的角度看,JVM的兼容性做得非常好,低版本的Java字节码完全可以正常运行在高版本的JVM上。
JVM:
JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。
Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等。
面向对象编程:
面向对象是当今主流的一种程序设计理念和设计规范,它取代了早期的"结构化"过程设计开发技术,主张一切皆为对象,程序以人的思维模式去解决问题。对象是把数据及对数据的操作方法放在一起,变为一个相互依存的整体。类就是对同类对象抽象出其共性,即面向对像的程序是由类组成的,每个类包含对用户公开的特定功能部分和隐藏的实现部分。传统的结构化程序设计通过设计一系列的过程(即算法)来求解问题。这一些过程一旦被确定,就要开始考考虑存储数据的方式,这就明确的表述了程序员的工作方式。但面相对像却调换了这个顺序,它不必关心数据对象的具体实现,只要能满足用户的需求即可。面向对象有三个最基本的特性,即:封装,继承,多态。
封装(Encapsulation):使用方法把类的数据隐藏起来,遵循了java 一切皆为对象的基本概念和核心思想,达成对类的封装,让普通类型上升为对象级;封装控制用户对类的修改和访问数据的程度,增强了程序的可维护性。
继承(Implementation):发生在类和类之间,可分为单继承和多层继承描述父子对象之间的血缘关系, 最终达到的目的是:一旦使用了继承,子类便获得了父类所有的成员(变量和方法),但是父类的私有的方法和属性不能被访问,父类的final成员不能被重写。 一旦使用了继承,父类的实例能指向派生类(子类)的引用。
多态(Multipart):对象在运行期和编译期具有的两种状态,使代码具有灵活性和重用性。编译时多态,也就是函数重载,所谓函数重载就是指同一个函数名可以对应多个函数的实现具体调用哪个按照由参数个数,参数类型等来决定。运行时多态:用一个基类的指针或引用来操纵多个派生类型的能力被称为多态性
随着Java的发展,SUN给Java又分出了三个不同版本:
- Java SE:Standard Edition
- Java EE:Enterprise Edition
- Java ME:Micro Edition
这三者之间有啥关系呢?
┌───────────────────────────┐
│Java EE │
│ ┌────────────────────┐ │
│ │Java SE │ │
│ │ ┌─────────────┐ │ │
│ │ │ Java ME │ │ │
│ │ └─────────────┘ │ │
│ └────────────────────┘ │
└───────────────────────────┘
简单来说,Java SE就是标准版,包含标准的JVM和标准库,而Java EE是企业版,它只是在Java SE的基础上加上了大量的API和库,以便方便开发Web应用、数据库、消息服务等,Java EE的应用使用的虚拟机和Java SE完全相同。
Java ME就和Java SE不同,它是一个针对嵌入式设备的“瘦身版”,Java SE的标准库无法在Java ME上使用,Java ME的虚拟机也是“瘦身版”。
毫无疑问,Java SE是整个Java平台的核心,而Java EE是进一步学习Web应用所必须的。我们熟悉的Spring等框架都是Java EE开源生态系统的一部分。不幸的是,Java ME从来没有真正流行起来,反而是Android开发成为了移动平台的标准之一。
Java SE,Java EE,Java ME三者之间的区别
-
Java SE(Java Platform,Standard Edition)。Java SE 以前称为 J2SE。它允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的 Java 应用程序。Java SE 包含了支持 Java Web 服务开发的类,并为 Java Platform,Enterprise Edition(Java EE)提供基础。
-
Java EE(Java Platform,Enterprise Edition)。这个版本以前称为 J2EE。企业版本帮助开发和部署可移植、健壮、可伸缩且安全的服务器端 Java 应用程序。Java EE 是在 Java SE 的基础上构建的,它提供 Web 服务、组件模型、管理和通信 API,可以用来实现企业级的面向服务体系结构(service-oriented architecture,SOA)和 Web 2.0 应用程序。
-
Java ME(Java Platform,Micro Edition)。这个版本以前称为 J2ME。Java ME 为在移动设备和嵌入式设备(比如手机、PDA、电视机顶盒和打印机)上运行的应用程序提供一个健壮且灵活的环境。Java ME 包括灵活的用户界面、健壮的安全模型、许多内置的网络协议以及对可以动态下载的连网和离线应用程序的丰富支持。基于 Java ME 规范的应用程序只需编写一次,就可以用于许多设备,而且可以利用每个设备的本机功能。
说得更简单点
Java SE 是做电脑上运行的软件。
Java EE 是用来做网站的-(我们常见的JSP技术)
Java ME 是做手机软件的。
Java版本
从1995年发布1.0版本开始,到目前为止,最新的Java版本是Java 15:
名词解释
初学者学Java,经常听到JDK、JRE,JVM这些名词,它们到底是啥?
-
JDK:Java Development Kit (java开发工具包)
-
JRE:Java Runtime Environment (java运行环境)
-
JVM :Java Virtual Machine (java虚拟机)
-
简单地说,JRE就是运行Java字节码的虚拟机。但是,如果只有Java源码,要编译成Java字节码,就需要JDK,因为JDK除了包含JRE,还提供了编译器、调试器等开发工具。
二者关系如下:
┌─ ┌───────────────────────────────────────────────────────────────┐
│ │ Compiler(编译程序), debugger(调试器),etc
│ └───────────────────────────────────────────────────────────────┘
JDK ┌─ ┌──────────────────────────────────┐
│ │ │ │
│ JRE │ JVM + Runtime Library (运行库) │
│ │ │ │
└─ └─ └──────────────────────────────────┘
┌───────┐┌───────┐┌───────┐┌───────┐
│Windows││ Linux ││ macOS ││others │
└───────┘└───────┘└───────┘└───────┘
要学习Java开发,当然需要安装JDK了。
那JSR、JCP……又是啥?
- JSR规范:Java Specification Request (java规范请求)
- JCP组织:Java Community Process (java社区进程)
为了保证Java语言的规范性,SUN公司搞了一个JSR规范,凡是想给Java平台加一个功能,比如说访问数据库的功能,大家要先创建一个JSR规范,定义好接口,这样,各个数据库厂商都按照规范写出Java驱动程序,开发者就不用担心自己写的数据库代码在MySQL上能跑,却不能跑在PostgreSQL上。
所以JSR是一系列的规范,从JVM的内存模型到Web程序接口,全部都标准化了。而负责审核JSR的组织就是JCP。
一个JSR规范发布时,为了让大家有个参考,还要同时发布一个“参考实现”,以及一个“兼容性测试套件”:
- RI:Reference Implementation (参考实施)
- TCK:Technology Compatibility Kit (技术兼容性工具包)
比如有人提议要搞一个基于Java开发的消息服务器,这个提议很好啊,但是光有提议还不行,得贴出真正能跑的代码,这就是RI。如果有其他人也想开发这样一个消息服务器,如何保证这些消息服务器对开发者来说接口、功能都是相同的?所以还得提供TCK。
通常来说,RI只是一个“能跑”的正确的代码,它不追求速度,所以,如果真正要选择一个Java的消息服务器,一般是没人用RI的,大家都会选择一个有竞争力的商用或开源产品。
参考:Java消息服务JMS的JSR:https://jcp.org/en/jsr/detail?id=914
Java能做什么
1.视频游戏开发
2.Android应用开发
3.桌面GUI
4.软件开发
**Java有什么优点 **
1.开发者被大量需求:2015年Dice.com报告表明,Java开发者是需求量最高的软件开发技能
2.一种进化的语言:这个平台在继续增加新功能,如lambda功能
3.Android应用开发:谷歌的Android系统保有量在移动终端系统中居世界之首,编写安卓应用,开发者主要还是使用Java
Java有什么缺点
1.大量使用内存:Java相比C++,需要使更多的内存
2.学习曲线:Java其实不是学起来最简单的语言,但幸好也不是最难的
3.缓慢的启动时间:每一个试着用java写安卓应用的人都知道,同样的代码在模拟器中,启动有多么缓慢
Java有哪些知名的应用
1.《我的世界》:这是一款知名度挺高的沙盘游戏,《我的世界》就是用Java写的,怎么样,你也想自己用Java创造一个世界?
2.淘宝网:淘宝网的服务端就是用Java写的,成功的支撑起了双十一双十二的"大数据"
3.Android操作系统:大名鼎鼎的安卓操作系统,开发语言就是Java
Java学习环境准备
安装JDK
因为Java程序必须运行在JVM之上,所以,我们第一件事情就是安装JDK。
搜索JDK 15,确保从Oracle的官网下载最新的稳定版JDK:
找到Java SE 15的下载链接,下载安装即可。
安装完了,首先进行环境变量的配置。
设置环境变量
安装完JDK后,需要设置一个JAVA_HOME
的环境变量,它指向JDK的安装目录。在Windows下,它是安装目录,类似:
C:\Program Files\Java\jdk-15
然后,把JAVA_HOME
的bin
目录附加到系统环境变量PATH
上。在Windows下,它长这样:
Path=%JAVA_HOME%\bin;<现有的其他路径>
把JAVA_HOME
的bin
目录添加到PATH
中是为了在任意文件夹下都可以运行java
。打开命令提示符窗口,输入命令java -version
,如果一切正常,你会看到如下输出:
┌────────────────────────────────────────────────────────┐
│Command Prompt - □ x │
├────────────────────────────────────────────────────────┤
│Microsoft Windows [Version 10.0.0] │
│(c) 2015 Microsoft Corporation. All rights reserved. │
│ │
│C:\> java -version │
│java version "15" ... │
│Java(TM) SE Runtime Environment │
│Java HotSpot(TM) 64-Bit Server VM │
│ │
│C:\> │
│ │
│ │
└────────────────────────────────────────────────────────┘
如果你看到的版本号不是15
,而是14
、1.8
之类,说明系统存在多个JDK,且默认JDK不是JDK 15,需要把JDK 15提到PATH
前面。
如果你得到一个错误输出:
┌────────────────────────────────────────────────────────┐
│Command Prompt - □ x │
├────────────────────────────────────────────────────────┤
│Microsoft Windows [Version 10.0.0] │
│(c) 2015 Microsoft Corporation. All rights reserved. │
│ │
│C:\> java -version │
│'java' is not recognized as an internal or external comm│
│and, operable program or batch file. │
│ │
│C:\> │
│ │
│ │
│ │
└────────────────────────────────────────────────────────┘
这是因为系统无法找到Java虚拟机的程序java.exe
,需要检查JAVA_HOME和PATH的配置。
有的时候系统变量设置后,需要重启电脑才会生效。
│
│ │
└────────────────────────────────────────────────────────┘
这是因为系统无法找到Java虚拟机的程序`java.exe`,需要检查JAVA_HOME和PATH的配置。
有的时候系统变量设置后,需要重启电脑才会生效。
当设置成功后,使用cmd命令,查看jdk版本能看到相对应的信息,就说明安装成功了。