1、Java语言基本概述
1.1、什么是计算机编程语言
人与人之间是如何沟通的呢?从小父母就教会我们说话,在长期的熏陶和自我学习中,我们就学会了普通话,学会了表达自己的需求,父母收到我们的信号或者听到我们的要求也会尽量满足我们。
同样,计算机编程语言是我们与计算机之间通信的语言,它是一种遵守了一定规则和法语的计算机语言,我们可以通过这种语言来控制计算机。
在介绍计算机基础知识的时候,我们介绍过计算机系统的层次概念,编程语言最终都会转成计算机能够直接解读的机器语言。
直至今日,编程语言已有成百上千种,它们主要经历了机器语言、汇编语言、高级语言三个阶段。
第一代语言(1946-1953)——机器语言:它是内置在计算机电路中的指令,由0和1组成,是CPU能直接解读的数据,由于机器语言是直接对计算机硬件操作的,所以效率很高,这些机器语言一般也只有专业人士能读懂;
第二代语言(1954-1964)——汇编语言:为了解决复杂而难于阅读的机器语言,于是有了汇编语言,是接近于机器语言的低级语言。汇编指令是机器指令便于记忆的书写格式,用助记符(Mnemonics)代替机器指令的操作码,用地址符号(Symbol)或标号(Label)代替指令或操作数的地址,这大大提高了语言的记忆性和识别性,但是汇编语言还是带有浓重的机器思维,程序员还是必须记住很多汇编指令。
随着计算机的发展,人们对计算机程序的移植性需求也不断的提高,因此急需一种不依赖于特定型号的计算机语言,希望用这种语言编写的程序能在各种平台运行,于是诞生了第三代语言,又叫高级语言。高级语言的发展分为两个阶段,前一阶段属于结构化语言或称为面向过程的语言,后一阶段属于面向对象的语言。
第三代语言(20世纪80年代前)——面向过程的高级语言:面向过程是一种以过程为中心的编程思想,就是分析出解决问题所需要的步骤,然后按照步骤执行算法。过程式语言程序的本质是重复地、按步地计算,是从计算机执行的角度出发的。面向过程式语言不适用于设计复杂的算法。
面向过程的高级语言有:FORTRAN(1956年)、ALGOL(1958年)、GOBOL(1959年)、PASCAL(1968年)、C(1972年)等等。
1)FORTRAN(1956年)
FORTRAN全名为FORmula TRANslation(公式转换),它是1954年被提出来的,1956年正式使用,由IBM为它的704计算机开发的。
2)ALGOL(1958年)
ALGOL全称为ALGOrithmic Language(算法语言),是一种嵌套结构的面向过程的程序设计语言,首次引进了局部变量和递归的概念。
3)GOBOL(1959年)
GOBOL全称是Common Business-Oriented Language(面向商业的通用语言),主要用于商业管理领域(数据处理)。
4)PASCAL(1968年)
PASCAL为了纪念十七世纪法国著名哲学家和数学家Blaise Pascal而来的,它由瑞士Niklaus Wirth教授于六十年代末设计并创立的,Pascal是最早出现的结构化编程语言,具有丰富的数据类型和简洁灵活的操作语句。
5)C(1972年)
C语言是由美国电话电报公司(AT&T)贝尔实验室的Dennis M.Ritchie,克服B语言(美国贝尔实验室的Ken Thompson,以BCPL语言为基础,设计出很简单接近硬件的语言)依赖于机器和无数据类型等局限性开发出来的最具经典的面向过程的语言。
第三代语言(20世纪80年代后)——面向对象的高级语言:面向对象编程(Object Oriented Programming,OOP)是一种围绕对象构建的编程语言模型,而不是用动作或函数来表示数据和逻辑,面向对象的思想是从人的角度出发的,即万物皆对象。
在面向对象编程中有两个最重要也是最基本的概念,那就是:类和对象。对象由属性和行为组成,多种相似的属性和行为又可以归类,所有的对象都可以通过类来描述,而反过来确不是这样的,并不是所以的类都是用来描绘对象的,如果一个类中没有足够的信息来描绘一个具体的对象,那么这样的类就是抽象的。
面向对象的高级语言有:Smalltalk(1972年)、C++(1983年)、Python(1991年)、Java(1995年)、C#(2001年)、Go(2009年)等等。
1)Smalltalk(1972年)
Smalltalk被公认为历史上第二个面向对象的程序设计语言,和第一个真正的集成开发环境(IDE)的语言。面向对象的类和对象的两个概念最早出现在 Simula 编程语言中。
2)C++(1983年)
1997年,本贾尼·斯特劳斯特卢普在贝尔实验室,主要是对C进行改良,直到1983年,正式命名为C++,但是直到1998年国际标准组织(ISO)颁布了C++标准第一版。
3)Python(1991年)
1989年为了打发圣诞节假期,Guido开始写Python语言的编译/解释器,1991年,第一个Python编译器(同时也是解释器)诞生。它是用C语言实现的,并能够调用C库(.so文件)。
4)Java(1995年)
Java是在1991年由SUN公司的James Gosling及其团队所研发的一种编程语言,最开始命名为Oak(一种橡树),直到1995年SUN公司正式将其改名为Java。
5)C#(2001年)
C#的全称是C sharp,在1998年由Delphi语言的设计者Hejlsberg带领Microsoft开发团队,建立在.Net Framework环境之上,并沿用且发展了C++的基本思想而研发的一门语言,并在2001年正式发布。
6)Go(2009年)
Go又称作Golang,由Google首席软件工程师Rob Pike,协同Robert Griesemer(Java HotSpot编译器及Google浏览器JavaScript的V8引擎参与者)和Ken Thompson(B语言和C语言设计者)等人设计开发,并在2009年11月开源的一门语言。
1.1.1、Java编程语言的定义
官方英文定义:
The Java™ Programming Language is a general-purpose, concurrent, strongly typed, class-based object-oriented language. It is normally compiled to the bytecode instruction set and binary format defined in the Java Virtual Machine Specification.
Java™ 编程语言是一种通用、并发、强类型、基于类的面向对象语言。它通常被编译为Java虚拟机规范中定义的字节码指令集和二进制格式。
1.2、Java语言发展史
年份 | 事件 |
---|---|
1991年 | 美国SUN公司研究小组为了能够在消费电子产品上(PDA、机顶盒、手机等)开发应用程序,但是当时最流行的编程语言是C和C++,由于C++过于庞大且复杂,将其应用在消费电子产品上显得有些吃力,最后由Sun公司的James Gosling (詹姆斯·高斯林)领导的小组基于C++开发了一种与平台无关的新语言叫Oak,Oak的取名源于Gosling办公室外有一棵橡树。 |
1995年 | 1995年1月,Oak被改名为Java,因为Oak是一家显卡制造商已注册的商标,Java是印度尼西亚“爪哇(注:Java的音译)”岛的英文名称,该岛因盛产咖啡而闻名。这就是Java的官方商标是一杯浓郁的咖啡的原因。 |
1996年 | 1996年初发布JDK1.0版本,这个版本包括两个部分:运行环境(即 Java Runtime Environment,JRE)和开发环境(即 Java Development Kit,IDK)。运行环境包括核心API(Java核心类库),集成API、用户界面API、发布技术、Java虚拟机(即 Java Virtual Machine,JVM)五个部分;开发环境包括编译Java程序的编译器( Javac 命令) |
1998年 | 1998年12月4日jdk迎来了一个里程碑的版本1.2,伴随JDK1.2一同发布的还有JSP/SERVLET、EJB等规范,并将Java分成了J2EE、J2SE和J2ME三个版本。 Java SE:(Java Platform,Standard Edition)为创建和运行Java程序提供了最基本的环境,是Java技术的核心和基础,可以重点学习:集合类、文件操作、I/O流、线程、序列化和GUI窗体编程等内容。 Java EE:(Java Platform,Enterprise Edition)为基于服务器的分布式企业应用提供开发和运行环境,可以重点学习jsp、servlet、jdbc、ejb以及ssh等框架。 J2ME(Java Platform,Java2 Micro Edition):为嵌入式应用提供开发和运行环境。如手机程序和PDA程序。 |
1999年 | 1994年4月27日,HotSpot虚拟机发布; |
2000-2002年 | 2000年JDK1.3发布;2002年JDK1.4发布,是JDK历史上较为成熟的版本,此版本新增了对正则表达式的支持、新增了XML解析器、异常链、NIO以及日志API。 |
2004年 | 2004年9月30日,jdk1.5发布。在该版本在Java语法的易用性做了非常大的改进,因此SUN将JDK1.5改为JDK5.0,此版本加入了自动装箱与拆箱、枚举、可变参数(Varargs)、泛型(Generic) 、For-Each循环等功能。 |
2006年 | 2006年11月3日,jdk6.0发布;此版本使用JAXB2来实现对象与XML之间的映射,JDBC升级至JDBC4.0、Compiler API、通用的Annotations支持。2009年,甲骨文(oracle)收购了SUN。 |
2011年 | 2011年7月28日,djk7.0发布;此版本引入了二进制整数、支持字符串的switch语句、多异常捕捉、自动关闭资源的try语句等新特性; |
2014年 | 2014年3月18日,jdk8.0发布;此版本新增了接口默认方法、引入了全新的Lambda表达式、函数式接口、集合的流式操作、IO\NIO 的改进等特性; |
2017年 | 2017年9月22日,jdk9.0发布; |
2018年 | 2018年3月20日,jdk10发布;同年9月25日,jdk11发布; |
2019年 | 2019年3月19日,jdk12发布;同年9月17日,jdk13发布; |
2020年 | 2020年3月17日,jdk14发布;同年9月15日,jdk15发布; |
2021年 | 2021年3月16日,jdk12发布;同年9月14日,jdk17发布; |
2022年 | 2022年3月22日,jdk18发布;同年9月20日,jdk19发布; |
1.3、Java语言的特点
Java作为一门集大成的语言,博纳众多语言之所长,是最优秀的面向对象语言之一,它不仅吸收了C++语言的各种优点,还摒弃了C++中难以理解的指针等概念。Java具有简单性、面向对象性、跨平台性(可移植性)、可靠性、安全性、动态性、支持多线程等特点;
-
简单性
Java语言继承了C++语言的优点,摒弃了C++中难以理解的指针,并使用接口取代了多重继承,多重继承和指针会使程序变得复杂;同时Java还设计了自动垃圾回收机制,使内存管理变得更简单;Java还提供了丰富的类库、API文档以及第三方工具库;
-
面向对象性
面向对象是Java语言的基础,是以对象为基本单元,包含属性和方法。对象的状态用属性表达,对象的行为用方法表达,Java把面向对象的特性发挥的淋漓尽致,它提倡"万物皆对象",所有的对象都通过类来描述,不能在类以外单独描述属性和方法。
-
跨平台性(可移植性)
计算机高级编程语言按其程序的执行方式可以分为:编译型语言和解释型语言。
编译型:使用专门的编译器,针对特定操作系统将查询代码一次性翻译成计算机能识别的机器指令。C、C++都属于编译型语言。
解释型:使用专门的解释器,将源程序代码逐条的解释成特定平台的机器指令,解释一句执行语句,类似于同声翻译。ASP、PHP属于解释型语言。
而Java号称“Write once, run anywhere”(一次编写,到处运行),这也是SUN公司用来展示Java程序设计语言的跨平台特性的口号。
为了改善编译型语言的效率而发展出的即时编译技术,早在1996年发布的JDK1.0版本中就有了即时(JIT)编译器,这种技术混合了编译型语言与解释型语言的优点,Java就是这种技术的代表产物。
Java是一个编译型与解释型并存的语言,首先采用通用的java编译器将java源程序编译成为与平台无关的字节码文件(.calss文件),然后由JVM(Java虚拟机)对字节码文件逐条进行解释执行(解释成本地机器码),当某段代码被频繁执行时,JVM会把这段代码直接翻译为机器码,并保存下来,下次执行的时候就不用再翻译了,这便成就了Java优秀的跨平台性了。
-
可靠性
Java是强类型的语言,会检查程序在编译期和运行期的错误,并提供了异常处理机制,使得Java更具可靠性。
-
安全性
Java程序代码要经过字节码校验,并且摒弃了C++语言的指针和内存释放操作,并提供了自动垃圾回收机制,有效地避免了用户对内存的非法操作。
Java严格遵守面向对象的规范,封装了数据实现的细节,只暴露接口给用户。
-
动态性
Java实现跨平台性,分为编译期和运行期,Java提供了反射机制,让我们能获得运行时的信息,动态的调整或载入所需的类信息。
-
支持多线程
Java语言支持多个线程的同时执行,并提供多线程之间的同步机制,保证不同线程能够正确地共享数据,很大程度上提高程序的执行效率。
2、JDK的下载与安装
2.1、下载JDK
1)进入官网
进入JDK官网Oracle | Cloud Applications and Cloud Platform,选择Products->Java,然后在右上角选择Download Java,如果下载最新版本这个页面就可以了。
2)找打需要下载的版本
这里我们需要去下载JDK8,选择Java archive(Java 归档)
3)选择版本
找到Java8,这里有两个:一个是Java SE8(8u211 and later)——Java SE8u211及其之后的版本、另一个是Java SE8(8u202 and earlier)——Java SE8u202及其之前的版本。
这里选择Java SE8(8u211 and later)。
再点进去就是具体的版本了,进入我们发现一个版本下提供了多个系统的Java SE Development Kit 8u341(jdk)和Java SE Runtime Environment 8u341(jre)。这里我们下载jdk。
注:如果没有登录,会跳转至登录页面,需要注册一个Oracle账户。
2.2、安装JDK
1)JDK的默认安装位置是是 C:\Program Files,当然你也可以选择其他盘符安装。
2)接着会要求安装一个 jre
在第一步安装jdk时,jdk目录下其实就包含了一个jre,这里还需要在选择一个jre目录,安装了两套jre。第二个jre是给大众用户使用的,而jdk中的jre是给开发者用的。
2.3、jre和jdk的关系
关于jre和jdk的关系,我们使用官方一张图片来展示:
注:官方JDK8 API文档下载地址Java Development Kit 8 Documentation
2.3.1、什么是JRE
JRE,是英文Java Runtime Environment的缩写,即Java运行时环境,提供了执行Java应用程序的最低要求。主要由java虚拟机(JVM)、java平台核心类和若干支持文件组成。
官方英文解释:
The JRE provides the libraries, Java virtual machine, and other components necessary for you to run applets and applications written in the Java programming language. This runtime environment can be redistributed with applications to make them free-standing.
JRE提供了运行用Java编程语言编写的小程序和应用程序所需的库、Java虚拟机和其他组件。这个运行时环境可以与应用程序一起重新分发,使其独立。
2.3.1.1、JRE的组成
1)Deployment-部署技术
2)User Interface Libraries-用户界面库
Swing(图形用户界面) | java2d(2D图形和成像) | AWT(抽象窗口工具包) | Accessibility(可访问的Java应用程序与辅助技术) |
---|---|---|---|
Drag and Drop(拖放) | Input Method(输入法) | Image I/O(图像I/O) | Print Service(打印服务) |
Sound(声音) | Java FX(JDK 7高版本后才引入的新界面库) |
3)Integration Libraries-集成库
IDL(接口定义语言) | JDBC(Java数据库连接) | JNDI(Java命名和目录接口) | RMI(远程方法调用) |
---|---|---|---|
RMI-IIOP(Internet ORB间协议远程方法调用) | Scripting(脚本) |
4)Other Base Libraries-其他基本库
Beans(JAVA可重用组件) | Security(安全API) | Serialization(序列化) | Extension Mechanism(扩展机制) |
---|---|---|---|
JMX(Java管理扩展) | XML JAXP(Java for XML处理) | Networking(网络) | Override Mechanism(覆盖机制) |
JNI(Java本地接口) | Date and Time(日期时间) | Input/Output(输入/输出) | Internationalization(国际化) |
5)lang and util Base Library-lang和util基本库
lang和util | Math(算术) | Collections(集合) | Ref Objects(引用对象) |
---|---|---|---|
Regular Expression(正则表达式) | Logging(日志) | Management(管理) | Instrumentation() |
Concurrency Utilities(并发实用程序) | Reflection(反射) | Versioning(版本控制) | Preferences API(首选项API) |
JAR(Java存档) | Zip(压缩) |
6)Java HotSpot Client and Server VM-Java HosSpot 客户端和服务端虚拟机
什么是虚拟机VM?
虚拟机(Virtual Machine),就是一台虚拟的计算机,它是一款用来执行一系列虚拟计算机指令的软件,大体上,虚拟机可以分为系统虚拟机和程序虚拟机。
系统虚拟机:完全是对物理计算机硬件的仿真(模拟),提供了一个可运行完整操作系统的软件平台,比如:VMware就是系统虚拟机。
程序虚拟机:为执行计算机程序而设计的虚拟机,比如我们这里要学习的Java虚拟机就属于程序虚拟机。
不同的操作系统它们的指令集都有差异,而通过JVM(Java虚拟机)在操作系统上制定一套数据结构和操作指令,JVM负责装载字节码到内存中,并把它翻译为对应平台的机器指令,以实现供硬件和操作系统的独立性。
JVM也有多种实现,比如:Oracle的JVM、IBM的JVM等,其中使用最广泛的还是Oracle的HotSpot JVM。
为什么叫HotSpot虚拟机?
HotSpot翻译过来是“热点”,正是因为它内部实现了热点代码探测功能,通过执行计数器找出使用频率较高的代码,然后通过JIT(即时编译)将这部分代码直接翻译为机器码,并保存下来,以提高执行效率。
Java平台标准版提供了Java虚拟机(VM)的两种实现:
-
Java HotSpot Client VM
客户端VM是通常用于客户端应用程序的平台的实现。对客户机VM进行了调整,以减少启动时间和内存占用。在启动应用程序时,可以使用-client命令行选项调用它。
-
Java HotSpot Server VM
服务器虚拟机是一种为最大程序执行速度而设计的实现,以牺牲启动时间和内存为代价。在启动应用程序时,可以使用-server命令行选项调用它。
简单的说:JRE = JVM+Java Library(Java标准类库)
2.3.2、什么是JDK
JDK,是英文Java Development Kit的缩写,即Java开发工具包,是用于开发Java应用程序和Applet程序的开发环境。
官方英文解释:
The JDK includes the JRE plus command-line development tools such as compilers and debuggers that are necessary or useful for developing applets and applications.
JDK包括JRE和命令行开发工具,如编译器和调试器,这些工具对于开发小程序和应用程序是必要的或有用的。
2.3.2.1、JDK的组成
1)Tools & Tool APIs-工具和工具API
名称 | 描述 |
---|---|
java | 运行编译后的Java程序 |
javac | 编译器,用于将Java源程序转成字节码 |
javadoc | 文档生成器 |
jar | 打包工具 |
javap | Java反汇编器 |
jdeps | Java类依赖分析器 |
Scripting | 可用于运行与Java平台交互的脚本 |
Security | 设置安全策略 |
Monitoring | 监视JVM性能统计信息 |
JConsole | 用于监视Java虚拟机的JMX兼容图形工具 |
VisaualVM | 可视化界面,用于查看Java应用程序在Java虚拟机(JVM)上运行时的详细信息,以及对这些应用程序进行故障诊断和分析。 |
JMC | JDK任务控制(JMC)是一套用于管理、监视、分析和排除Java应用程序故障的高级工具。JMC能够对代码性能、内存和延迟等方面进行高效和详细的数据分析,而不会引入通常与分析和监视工具相关的性能开销。 |
JFR | JFR的全称为Java Flight Recorder,用来记录Java应用程序在运行时的数据信息和各种发生的事件。 |
JPDA | 平台调试器架构 |
JVM TI | JVM工具接口,提供了一种检查状态和控制在Java虚拟机(JVM)中运行的应用程序执行的方法 |
IDL | 是一种分布式对象技术,可用来在Java语言中定义、实现和访问CORBA对象。 |
RMI | 远程方法调用 |
Java DB | 这是一个纯 Java 实现、开源的数据库管理系统 |
Deployment | 用于在web上部署java应用程序和小程序的实用程序 |
Internationalization | 创建可本地化的应用程序 |
Web Services | Java Web服务工具 |
Troubleshooting | 可用于特定的故障排除任务 |
上面一些Tools可以在JDK的bin目录下找到,并且还有一些其他的工具:
比如:Javah.exe可调用java过程的c过程,JDK8中已经被javac -h取代,并且在JDK10中移除了Javah.exe。
简单的说:JDK = JRE+Development Tool(Java 开发工具)
注:如果只需要运行java程序/Applet程序(是一种特殊的java程序,本身不能单独运行,需要嵌入在html中,借助浏览器/appletviewer解释执行),下载安装jre环境即可。如果要自行开发,需要下载jdk,djk中附带有jre环境。
JDK目录下的src.zip文件:是java提供的API类的源代码压缩文件。
3、JDK环境变量设置
3.1、什么是环境变量
在学习dos命令的时候,我们打开截图工具:snippingtool,使用win+R,再输入snippingtool即可,但并非所有可执行程序都能通过这种方式打开。
我们看到Snippingtool.exe在C:\windows\System32目录下,而QQ在C:\Program Files (x86)\Tencent\QQ\Bin\QQScLauncher.exe目录下。 他们有什么区别吗?我们看下环境变量:
C:\windows\System32,在系统环境变量中,当我们使用命令行运行一个命令的时候,操作系统会自动搜索当前目录以及PATH变量中的路径。
DOS命令分为内部命令和外部命令,内部命令是集成在COMMAND.COM中的,是计算机启动后就常驻内存的命令,在任何命令下都可以使用的;而外部命令是一个可以单独执行的文件,外部命令需要保证命令文件在当前目录中,如果我们同样希望在任何命令下可以执行一个外部命令,我们就可以把这个路径加到环境变量中。
环境变量:是为执行计算机指令提供的一个环境,一个让系统自动检索的路径。
3.2、环境变量设置
前面我们安装好了jdk,并且介绍了什么是环境变量,为了方便我们开发及使用JDK-Tools,我们给他设置一下环境变量。
1)步骤一
在系统变量里点击新建,变量名填写JAVA_HOME,变量值填写JDK的安装路径,比如:“C:\Program Files\Java\jdk1.8.0_341”了
2)步骤二
在系统变量里点击新建变量名填写CLASSPATH,变量值填写“.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME\lib\tools.jar ”。注意不要忘记前面的点和中间的分号。
注:在window中“ .”指的是当前路径,linux中也是,也就是说从当前目录开始查找class文件(CLASSPATH:告诉jvm要使用或者执行的class放在什么路径上)。
dt.jar是关于运行环境的类库,主要是swing包
tools.jar是关于一些工具类的类库
rt.jar包含了jdk的基础类库
3)步骤三
在系统变量里找到Path变量,这是系统自带的,不用新建。后加上“;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin”。注意前面的分号。
注:%JAVA_HOME% 即取JAVA_HOME=....的这个值,不写就是JAVA_HOME字符串了。设置了Path,可以在任何路径下都可以识别java/javac命令
4)步骤四
当我们在cmd中运行java和javac目录都正常时,我们的环境变量就配置完成了。
java -version 查看Java运行环境的版本;
javac -version 查看Java程序编译的版本;
4、第一个java程序
4.1、java和javac命令简介
4.1.1、java-运行java程序命令工具
【命令功能:】 java命令启动java应用程序。它通过启动Java运行时环境(JRE)、加载指定的类并调用该类的main()方法来执行java程序。
【命令格式:】 java [-options] classname [args...] 用于执行java类
或 java [-options] -jar jarfile [args...] 用于执行jar文件【常用选项:】
-server 选择 "server" VM,默认 VM 是 server.
-cp <目录和 zip/jar 文件的类搜索路径>
-classpath <目录和 zip/jar 文件的类搜索路径>用 ; 分隔的目录,JAR档案和ZIP档案列表,用于搜索类文件。
-verbose:[class|gc|jni] 启用详细输出
-version 输出产品版本并退出
-showversion 输出产品版本并继续
-esa | -enablesystemassertions 启用系统断言
-dsa | -disablesystemassertions 禁用系统断言
-javaagent:<jarpath>[=<选项>] 加载 Java 编程语言代理, 请参阅 java.lang.instrument
-splash:<imagepath> 使用指定的图像显示启动屏幕当然还有很多非标准选项、运行时选项、JIT编译选项等等:
-Xmnsize 设置JVM年轻代堆的初始大小和最大大小
-Xmssize 设置JVM堆的最小大小和初始大小
-Xmxsize 设置JVM最大允许分配的堆内存大小【使用技巧:javaw命令与java相同,只是javaw没有关联的控制台窗口。如果不希望出现命令提示窗口,请使用javaw。然而,如果启动失败,javaw启动器将显示一个包含错误信息的对话框。】
4.1.2、javac-编译命令工具
【命令功能:】 Java编程语言编译器,读取用Java编程语言编写的源文件,并将它们编译成字节码文件。
【命令格式:】javac <options> <source files>
【常用选项:】
-g 生成所有调试信息
-g:none 不生成任何调试信息
-g:{lines,vars,source} 只生成某些调试信息
-nowarn 不生成任何警告
-verbose 输出有关编译器正在执行的操作的消息
-deprecation 输出使用已过时的 API 的源位置
-classpath <路径> 指定查找用户类文件和注释处理程序的位置
-cp <路径> 指定查找用户类文件和注释处理程序的位置
-sourcepath <路径> 指定查找输入源文件的位置
-bootclasspath <路径> 覆盖引导类文件的位置
-extdirs <目录> 覆盖所安装扩展的位置
-endorseddirs <目录> 覆盖签名的标准路径的位置
-proc:{none,only} 控制是否执行注释处理和/或编译。
-processor <class1>[,<class2>,<class3>...] 要运行的注释处理程序的名称; 绕过默认的
搜索进程
-processorpath <路径> 指定查找注释处理程序的位置
-parameters 生成元数据以用于方法参数的反射
-d <目录> 指定放置生成的类文件的位置
-s <目录> 指定放置生成的源文件的位置
-h <目录> 指定放置生成的本机标头文件的位置
-implicit:{none,class} 指定是否为隐式引用文件生成类文件
-encoding <编码> 指定源文件使用的字符编码
-source <发行版> 提供与指定发行版的源兼容性
-target <发行版> 生成特定 VM 版本的类文件
-profile <配置文件> 请确保使用的 API 在指定的配置文件中可用
-version 版本信息
-help 输出标准选项的提要
-X 输出非标准选项的提要
-J<标记> 直接将 <标记> 传递给运行时系统
-Werror 出现警告时终止编译
@<文件名> 从文件读取选项和文件名
4.2、第一个java程序-输出hello world
1)Test.java
首先在D:\testJava目录,新建一个Test.java文件,在文件中写入:
public class Test{
public static void main(String[] args){
System.out.println("hello world!");
}
}
Test是一个类,一个java程序,由一个或多个类组成。一个程序只有一个main()主入口方法。
2)带包名的java类
package com.cn;
public class TestPackage{
public static void main(String[] args){
System.out.println("hello world!");
}
}