Java概述
定义
编程语言和计算平台
(计算平台是电脑中运行应用程序的环境,包括硬件环境和软件环境)
特点
面向对象
摒弃了C++中的多继承、指针、内存管理等等概念;不用手动管理对象的生命周期
具备功能强大和简单易用两个特点,适用于企业级开发、快速敏捷型开发,同时出现了多种框架。
支持网络编程
静态语言(在编译时期就知道数据类型)
基于JVM的平台独立性和可移植性
定义:Java应用程序是在Java虚拟机(JVM)上运行的。JVM是一个虚拟的计算机环境,它可以在不同的操作系统和硬件平台上运行。
原先计算机应用程序和硬件之间会屏蔽很多细节,它们之间通过操作系统来完成调度和协调。
加入JVM之后的变化
- 在用户空间内实现多线程
- 健壮性(强类型机制、异常处理机制、垃圾回收机制)
- Java很容易分布式开发项目
jdk1.5之后的三大版本
- Java SE(J2SE,Java 2 Platform Standard Edition,标准版)
Java SE 以前称为 J2SE。它允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的 Java 应用程序。Java SE 包含了支持 Java Web 服务开发的类,并为Java EE和Java ME提供基础。 - Java EE(J2EE,Java 2 Platform Enterprise Edition,企业版)
Java EE 以前称为 J2EE。企业版本帮助开发和部署可移植、健壮、可伸缩且安全的服务器端Java 应用程序。Java EE 是在 Java SE 的基础上构建的,它提供 Web 服务、组件模型、管理和通信 API,可以用来实现企业级的面向服务体系结构(service-oriented architecture,SOA)和 Web2.0应用程序。2018年2月,Eclipse 宣布正式将 JavaEE 更名为 JakartaEE - Java ME(J2ME,Java 2 Platform Micro Edition,微型版)
Java ME 以前称为 J2ME。Java ME 为在移动设备和嵌入式设备(比如手机、PDA、电视机顶盒和打印机)上运行的应用程序提供一个健壮且灵活的环境。Java ME 包括灵活的用户界面、健壮的安全模型、许多内置的网络协议以及对可以动态下载的连网和离线应用程序的丰富支持。基于 Java ME 规范的应用程序只需编写一次,就可以用于许多设备,而且可以利用每个设备的本机功能。
JVM、JRE和JDK的关系
JVM
Java Virtual Machine是Java虚拟机,Java程序需要运行在虚拟机上,不同的平台有自己的虚拟机,因此Java语言可以实现跨平台。
JRE
Java Runtime Environment包括Java虚拟机和Java程序所需的核心类库等。核心类库主要是java.lang包:包含了运行Java程序必不可少的系统类,如基本数据类型、基本数学函数、字符串处理、线程、异常处理类等,系统缺省加载这个包
如果想要运行一个开发好的Java程序,计算机中只需要安装JRE即可。
JDK
Java Development Kit是提供给Java开发人员使用的,其中包含了Java的开发工具,也包括了JRE。所以安装了JDK,就无需再单独安装JRE了。其中的开发工具:编译工具(javac.exe),打包工具(jar.exe)等
JVM&JRE&JDK关系图
java包
- java.lang:这个是系统的基础类;
- java.io:这里面是所有输入输出有关的类,比如文件操作等;
- java.nio:为了完善 io 包中的功能,提高 io 包中性能而写的一个新包;
- java.net:这里面是与网络有关的类;
- java.util:这个是系统辅助类,特别是集合类;
- java.sql:这个是数据库操作的类。
字节码
字节码:Java源代码经过虚拟机编译器编译后产生的文件(即扩展为.class的文件),它不面向任何特定的处理器,只面向虚拟机。
字节码的好处:解决了传统解释型语言执行效率低的问题,同时又保留了解释性语言可移植的优点。
虚拟机
定义及特点
使用软件仿真技术,作为一种在操作系统上被安装的支持特定软件包运行的软件,通过在物理硬件上模拟出一台或多台虚拟计算机,使得每个虚拟计算机具备自己的操作系统、应用程序和资源。
- 独立(eg:一台宿主机上配备了多台虚拟机,每个虚拟机都可以运行不同的操作系统并且各自运行应用程序)
- 可以对资源进行分配和管理
拓展:虚拟主机(VH)
一台物理服务器上划分出多个逻辑的、私密的虚拟服务器环境。每个虚拟主机都有自己独立的操作系统、应用程序和资源,它们相互之间是隔离的,互不影响。虚拟主机可以通过服务器虚拟化技术实现,例如使用容器或虚拟化软件(如VMware、Xen、KVM等)。
实现原理
每一种平台的解释器是不同的,但是实现的虚拟机是相同的。
JIT(Just In Time
)编译器:部分的.java代码通过JIT编译器进行编译,实时将一些热点代码编译成机器码,不同于单纯进行编译执行
,提高了效率。
Java与C++的区别
- 都是面向对象的语言,都支持继承、封装和多态
Java不提供指针来直接访问内存,程序内存更加安全
Java的类是单继承的,C++支持多重继承,虽然Java中的类不可以多继承,但是其接口是可以多继承的。
- Java中有自动内存管理机制,不需要程序员手动释放内存。