什么是java,java在linux和windows下的安装方法以及变量配置
以下为今日总结(干货比较多)
Java
一种编程语言、一种开发环境、一种应用环境、一种部署环境
- Java是一种可以撰写跨平台应用程序的面向对象的程序设计语言。Java技术具有卓越的通用性、高
效性、平台移植性和安全性(以牺牲执行效率为代价换取了高安全性),广泛应用于PC、数据中心、
游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群- Java完全面向对象的编程语言,主要用于Internet应用程序
- Java 既是一种解释执行的语言(先编译后解释执行),也是一种编译执行的语言
- Java平台是基于Java语言的平台。这样的平台非常流行。因此微软公司推出了与之竞争的.NET平台
以及模仿Java的C#语言。首先将源代码编译成二进制字节码(bytecode不是机器语言),然后依
赖各种不同平台上的虚拟机来解释执行字节码。从而实现了【一次编译、到处执行】的跨平台特
性。不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了Java程
序的性能 - Java是一个开发环境,Java技术包含一系列的工具:编译器,解释器,文档生成工具,打包工具
等。另外由Java 2 SDK提供的JRE还包括了一个完整的Java集合,如基本语言类,GUI控件类等 - Java是一个运行环境,它可以从SUN公司提供的Java 2 SDK中来搭建运行环境,免费
Java 主要技术分支
JavaSE:Java标准版,适合于开发桌面系统和低端商务应用系统
- 前身J2SE,2005年之后更名
- Java 语言核心类: 数据库连接, 接口定义,输入/输出和网络编程
JavaEE:Java企业版,为企业提供电子商务构架及Web服务的解决方案
- 企业级应用:大型的商业组织。跨地域性和数据来源复杂性
- 前身J2EE,2005年之后更名,2017年Oracle决定把JavaEE移交给开源组织Eclipse基金会,但是不希望JavaEE继续使用Java这个名字,尽管Eclipse做了争取,但是看来并没有什么用处。最终2018年正式更名为JakartaEE
- 包含JAVA SE 中所有类,并且还包含用于开发区企业级应用的类,如EJB, Servelet, JSP. XML… J2EE目前已成为开发电子商务应用的事实标准
JavaME:Java微型版,是移动商务最佳的应用典范
- 前身J2ME,2005年之后更名
- 包含JAVA SE中部分类,用于消费类电子产品的软件开发,如呼机、智能卡、手机、PDA 和机顶盒
- 已经被Android所替代
Java 2:是Java的一个版本,一般指Java1.2及以后的Java版本
Java应用场景
Java编程语言是一种广泛应用于互联网应用的高级计算机语言,主要应用于网络编程和互联网电子商务应用,特别适合于Internet应用程序开发。
安装
官方网站https://www.oracle.com/java/
在JDK 9发布之前,Oracle的发版策略是以特性驱动的,只有重大的特性改变才会发布大版本,比如JDK7到JDK 8,中间会发多个更新版本。而从JDK 9开始变为以时间驱动的方式。发布周期为6个月一个大版本,比如JDK 9到JDK 10,3个月一次补丁版,3年一个 LTS长期支持版本。
安装可以考虑直接安装JDK1.8或者LTS的JDK11做开发,当然如果学习可以考虑使用JDK15
Linux下的安装
默认情况下可能会自动安装openjdk,所以需要检查,如果已经安装则需要卸载openJDK
- 查看是否安装其他JDK rpm -qa | grep jdk
- 如果可以查询到安装的JDK,则执行卸载操作 rpm -e 查到的名称
1、可以使用lrzsz上传或者使用xshell自动工具上传下载好的文件,或者直接在linux中使用wget命令或
者使用图形化界面中的firefox浏览器下载文件
2、tar -zxvf jdk-8u191-linux-x64.tar.gz解压缩文件到当前目录
3、将解压的文件夹移动到安装路径,可以考虑使用usr/local文件夹或者opt文件夹
mv jdk1.8.0_191/ /usr/local/
如果需要修改名称还可以添加名称
4、配置环境变量 /etc/profile,在配置文件默认追加配置
export JAVA_HOME=/usr/local/jdk1.8.0_191 定义变量执行具体的安装路径
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar 设置执行程序时查找文件的位置,这里有3个值,各个值使用:进行分割。点表示在当前文件夹下查找,dt.jar和tools.jar是另外执行需要的jar
export PATH=$PATH:$JAVA_HOME/bin 将安装路径的bin文件夹添加到path中,以保证可以直接运行bin下的可执行程序,例如编译器javac和解释器java
5、执行命令source使配置生效
source /etc/profile
6、执行命令以判定是否安装成功
[root@localhost jdk1.8.0_191]# javac -version 查看编译器的版本号
javac 1.8.0_191
root@localhost jdk1.8.0_191]# java -version 查看解释器的版本号,两个版本号应该一致,否则就有可能出错
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)
windows下的安装
1、下载windows版本的安装程序jdk-8u172-windows-x64.exe
2、点击安装执行,可以配置具体的安装路径。而且jdk8安装还有一个额外的JRE安装
3、配置环境变量
新增2个
- JAVA_HOME值为C:\Java\jdk1.8.0_172
- CLASSPATH值为.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
修改1个环境变量 Path
path中原始的配置值不要修改,否则可能会导致系统运行不正常,只是在末尾添加一个配置内容;
%JAVA_HOME%\bin
4、测试
javac -version
java -version
安装中需要注意的问题
- 不允许在安装路径中包含特殊符号:中文、空格
Hello world
在home文件夹下
vi Hello.java
//Java是面向对象的编程语言,编写程序的开始就是定义类的开始。定义类使用关键字class
public class Hello{//在一个Hello.java文件中可以定义无数个class,然是只能有一个
public class,而且public class的名称必须和文件名称一致,包括大小写在内
public static void main(String[] args){ //main方法是程序的执行起始点,要求方法签名必须正确,注意Java严格区分大小写
System.out.println("Hello world!");//System.out.println用于在控制台上
输出指定的字符串内容,使用""表示字符串,注意这里的标点符号必须是英文的,不能使用中文符号。语句以;收尾
}
}
javac Hello.java编译指定的文件,如果在程序中有语法错误,则会报错
[root@localhost ~]# javac Hello.java
Hello.java:3: error: package system does not exist //报错的提示信息,因为在java中是严格区分大小写的,所以system和System不一样
system.out.println("Hello world!");
^
1 error //这里用于告知出错位置
如果编译成功,则会自动生成一个后缀为.class的二进制文件----字节码文件
-rw-r--r--. 1 root root 416 Dec 29 00:05 Hello.class -- 后置为.class表示二进制的字节码文件,java跨平台性体现在这个字节码文件上
-rw-r--r--. 1 root root 100 Dec 29 00:05 Hello.java --后缀为.java表示是java源代码文件
java Hello解释执行类。注意java后面是类名称,不是文件名称
返回输出的内容为:Hello world!
安装JDK后的目录结构
bin存放可执行文件
db存放的是Java DB
include存放的是c相关的头文件,使用JNI可以调用c编写的程序
jre是JDK包含的java运行时环境
lib存放Java的库文件
jar: java应用资源的缩写,是一种压缩文件,其中包含系统提供的各种类文件
src.zip是一个zip压缩文件,其中包含Java的类定义源文件
Oracle JDK和Open JDK
- OpenJDK是Sun在2006年末把Java开源而形成的项目,这里的开源是通常意义上的源码开放形式,即源码是可被复用的,从而在这个基础上衍生出了一些商业版
- Oracle JDK采用了商业实现,而OpenJDK使用的是开源的FreeType
- 相同是建立在两者共有的组件基础上的,Oracle JDK中还会存在一些Open JDK没有的、商用闭源的功能
- OpenJDK基本上可以认为性能、功能和执行逻辑上都和官方的Oracle JDK是一致的
- 在大多数Linux发行版本里,内置或者通过软件源安装的JDK,都是安装的OpenJDK。
Java文件的类型有两种:
- 扩展名为java的文件:是Java源文件,属于编译之前的纯文本文件,存储java源代码
- 扩展名为class的文件:是Java类文件,属于编译之后的二进制文件,存储字节码。
字节码的执行的三个大步骤
源代码首先通过javac进行编译,以生成.class的字节码文件,然后通过解释器解释执行java Hello
1、由类装载器负责把类文件加载到java虚拟机中,在此过程需要检验该类文件是否符合类文件规范
2、字节码校验器检查该类文件的代码中是否存在着某些非法操作
3、如果字节码校验器检验通过,由java解释器负责把该类文件解释成为机器码进行执行
java虚拟机采用的是沙箱运行模式,即把java程序的代码和数据都限制在一定内存空间里执行,不允许程序访问该内存空间外的内存
总结Java虚拟机中类加载的过程:系统会通过加载、连接、初始化三步来实现这个类进行初始化。
链接包括验证、准备以及解析三个阶段。(1)验证阶段。主要的目的是确保被加载的类满足Java虚拟机规范,不会造成安全错误。(2)准备阶段。负责为类的静态成员分配内存,并设置默认初始值。(3)解析阶段。将类的二进制数据中的符号引用替换为直接引用。
总结
Java语言
一种面向对象的语言
一种平台无关的语言,必须程序运行的解释环境
一种健壮的语言,吸收了C/C++语言的优点,但是去掉了影响程序健壮性的部分,例如指针、内存的申请与释放等
典型的应用场景:互联网环境
程序是为了让计算机执行某些操作或解决某个问题而编写的一系列有序指令的集合。
Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。
JDK全称是Java Development Kit,译为Java开发工具包,JDK是整个Java的核心,包括Java运行环境、Java工具和Java基础类库。JDK是开发任何类型Java应用程序的基础。
每一个程序有且只能有一个main方法。
编译Java源程序不需要手工操作,如果程序没有错误,可以通过工具实现自动编译;如果有错误,IDE会给出相应的错误提示,修改正确后会自动完成编译。
- vi Hello.java
- javac Hello.java
- java Hello
- 为了提高开发效率可以使用IDE工具:Eclipse、IDEA、STS,不允许使用MyEclipse
Java能做什么
- Java语言可以方便地增加网络网页的功能
- Java语言可以方便地实现多种任务的并行工作 (网络应用的优势 +多线程 )
- Java语言可以方便地访问网络资源
- Java语言可以方便地实现基于Web的数据库访问 (JDBC技术,基于Web网页的数据库访问程序 )
- Java语言可以方便地实现分布式应用 (JSP、RMI、CORBA和EJB等技术 )
Java语言的11个特点
- Java语言是易学的 Java丢弃了C++中很难理解的、令人迷惑的那些特性,而且不使用指针,而是引用。并提供了自动的垃圾收集,使得程序员不必为内存管理而担忧 垃圾收集 不再需要的分配存储器应取消分配,在其它语言中,取消分配是程序员的责任 Java 编程语言提供了一种系统级线程以跟踪存储区分配 引入了真正的数组,删除了指针运算,不再担心使用指针时的偏差而改写关键内存区域的问题
- Java语言是强制面向对象的 面向对象是一种设计技术,它将设计重点放在数据以及与对象的接口上Java语言是一个纯的面向对象程序设计语言 除了8个基本数据类型外,Java中任何东西都是对象 删除了多继承,而使用接口代替,不用处理多继承各层间的复杂性 Java语言提供类、接口和继承等原语,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制(关键字为implements)。
- Java语言是分布式的 Java语言支持Internet应用的开发,提供了用于网络应用编程的类库 丰富的类库可以封装TCP/IP协议细节,将非常复杂的功能变得很简单 Java使编写CGI脚本更容易 Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段
- Java语言是健壮的(鲁棒性) Java的强类型机制、异常处理、垃圾的自动收集等是Java程序健壮性的重要保证 Java的安全检查机制使得Java更具健壮性 java的指针模型消除了改写内存、损坏数据的可能性
- Java语言是安全的 Java安全性能防止的内容 Java提供了一个安全机制以防恶意代码的攻击
- Java语言是体系结构中立的 在PC下用windows编写的程序能够不做修改就直接拿到UNIX系统上运行吗 显然是不可以的,因为程序的执行最终必须转换成为计算机硬件的机器指令来执行,专门为某种计算机硬件和操作系统编写的程序是不能够直接放到另外的计算机硬件上执行的,至少要做移植工作 要想让程序能够在不同的计算机上能够运行,就要求程序设计语言是能够跨越各种软件和硬件平台的,而java满足了这一需求 Java程序(后缀为java的文件)在Java平台上被编译为体系结构中立的字节码格式(后缀为class的文件),然后可以在实现这个Java平台的任何系统中运行。这种途径适合于异构的网络环境和软件的分发 字节码和任何具体计算机结构无关 字节码被设计得既容易在任何计算机上解释又可容易地被快速翻译成本地机器代码 执行效率略有影响,但是即时编译器(just-in-time)在许多方面进行弥补
- Java语言是可移植的 可移植性来源于体系结构中立性 Java还严格规定了各个基本数据类型的长度int永远是32位长,不象C/C++中可以是16、32位 二进制数据按照固定格式存储,消除了高位结束/低位结束的混淆 字符串按照标准unicode格式存储 Java编译器是用Java实现的,Java的运行环境是用ANSI C实现的 但是在窗口系统中还是有些问题,可能为伴有不同的程序错误,但是可移植性毕竟比其漂亮程度重要的多
- Java语言是解释型的 Java程序在Java平台上被编译为字节码格式,然后可以在实现这个Java平台的任何系统中运行 在运行时,Java平台中的Java解释器对这些字节码进行解释执行,执行过程中需要的类在联接阶段被载入到运行环境中 字节码解释器也有其它公司版本,如Cafe和Visual J++,这些编译器比Sun的可能都快 源代码*.java ----> Java编译器 javac.exe ---->字节码 *.class 字节码由Java虚拟机解释执行 JVM负责字节码和操作系统之间的通讯 源代码一次编译,可以在多个平台上执行
- Java是高效的 Java可以构造在微小机器上独立运行,基本解释器和最小支持类约40k 基本标准类库和线程支持类才增加175k
- Java语言是原生支持多线程的 多线程能够提供更好的交互响应和实时特性
- Java语言是动态的 Java程序需要的类能够动态地被载入到运行环境,也可以通过网络来载入所需要的类。这也有利于软件的升级 Java中的类有一个运行时刻的表示,能进行运行时刻的类型检查