Java入门-Java语言概述

news2024/11/25 13:23:56

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和utilMath(算术)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打包工具
javapJava反汇编器
jdepsJava类依赖分析器
Scripting可用于运行与Java平台交互的脚本
Security设置安全策略
Monitoring监视JVM性能统计信息
JConsole用于监视Java虚拟机的JMX兼容图形工具
VisaualVM可视化界面,用于查看Java应用程序在Java虚拟机(JVM)上运行时的详细信息,以及对这些应用程序进行故障诊断和分析。
JMCJDK任务控制(JMC)是一套用于管理、监视、分析和排除Java应用程序故障的高级工具。JMC能够对代码性能、内存和延迟等方面进行高效和详细的数据分析,而不会引入通常与分析和监视工具相关的性能开销。
JFRJFR的全称为Java Flight Recorder,用来记录Java应用程序在运行时的数据信息和各种发生的事件。
JPDA平台调试器架构
JVM TIJVM工具接口,提供了一种检查状态和控制在Java虚拟机(JVM)中运行的应用程序执行的方法
IDL是一种分布式对象技术,可用来在Java语言中定义、实现和访问CORBA对象。
RMI远程方法调用
Java DB这是一个纯 Java 实现、开源的数据库管理系统
Deployment用于在web上部署java应用程序和小程序的实用程序
Internationalization创建可本地化的应用程序
Web ServicesJava 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!");
 
    }
 
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/13827.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C# 自定义控件

一 自定义控件 1 自定义控件的三种方式&#xff1a; 1&#xff09;复合控件&#xff1a;将标准控件组合起来 class YourControl:UserControl{}2) 扩展控件&#xff1a;继承于标准控件 class YourControl:Button{}3) 自定义控件&#xff1a;完全地自定义一个控件 class You…

CSSStyleSheet 对象(css 样式表)- 你不知道的有趣功能

1.概念 CSSStyleSheet 对象 代表着&#xff0c;css文件被浏览器解析后生成的css样式表。 CSS 样式表由 CSS 规则组成&#xff0c;可以通过 CSSRule 对象操作每条规则。CSSStyleSheet 对象允许您查询、插入和删除样式表规则。 例如&#xff1a;好玩儿的尝试&#xff08;改变页…

基于经验论述:实现k-NN算法

以兰普威尔小镇为例,那里的人们为他们的两支球队——兰普威尔红队和兰普威尔蓝队——而疯狂。红队已经存在很长时间了,人们很喜欢这支队伍。 但是后来,一些外地来的富翁买下了红队的最佳射手,成立了一支新的球队——蓝队。令多数红队球迷不满的是,这位最佳射手将继续带领蓝…

数据结构与算法_BST树_BST树的定义及删除操作

先写BST树的定义及特点&#xff0c;然后记录BST数的删除操作。 1 BST定义及特点 BST数是一棵特殊的二叉树&#xff0c;如何能得到一颗二叉搜索树呢&#xff1f;下面一个有序序列&#xff0c;经过二分搜索&#xff0c;得到的就是一颗BST树。根节点就是当前一轮要搜索的中间节点…

Cell子刊:器官再生,这种病可以让受损的肝脏再生

麻风病是由麻风杆菌引起的一种慢性传染病&#xff0c;主要病变在皮肤和周围神经。它是世界上最古老和最顽固的疾病之一&#xff0c;但引起它的细菌也可能具有令人惊讶的生长和再生重要器官的能力。器官再生是治疗疾病、损伤或衰老功能障碍的理想策略&#xff0c;尽管体外模型、…

linux-adnroid 键值枚举与注释

一、概述 没有找到直接的linux 键值枚举的注释。在android 官网linux-android健码网页里找到了这个映射关系。因为android列的比较多。去掉冗余摘取主要对比和注释进表格。 二、术语摘抄解释 HID 用法、Linux 键码和 Android 键码 系统根据抽象层使用几个不同的标识符来引用…

【服务器数据恢复】5节点Lustre分布式文件系统RAID5数据恢复案例

服务器数据恢复环境&#xff1a; 5台服务器节点&#xff0c;每台服务器节点配置一组RAID5&#xff0c;每组6块硬盘&#xff0c;其中1块设置为热备盘。 系统环境为Lustre分布式文件系统&#xff0c;5台服务器共同存储全部的数据文件。 服务器故障&检测&#xff1a; 机房漏水…

你被裁了需要知道的一些细节

前言 就在上周&#xff0c;得知自己要被裁了&#xff0c;理由是公司在疫情下的经济性裁员&#xff0c;在这里总结一下关于裁员过程中需要注意的一些细节。 关于工作交接 要在收到书面通知之后&#xff0c;再进行工作交接&#xff0c;否则可能面临的风险是公司卸磨杀驴。 关…

C++初阶 List的模拟实现

作者&#xff1a;小萌新 专栏&#xff1a;C初阶 作者介绍&#xff1a;大二学生 希望能和大家一起进步 本篇博客简介&#xff1a;模拟STL中List的实现 List的模拟实现本篇博客目标节点类的实现构造函数迭代器类的实现迭代器类模拟实现的意义迭代器类的三个参数说明构造函数运算…

zabbix自定义模板,邮件报警,代理服务器,自动发现与自动添加及snmp

内容预知 1.自定义监控内容 监控案例1&#xff1a;登录人数检测 具体步骤 步骤一&#xff1a;在客户端创建自定义 key 步骤二&#xff1a;在 Web 页面创建自定义监控项模板 &#xff08;1&#xff09;创建模板 &#xff08;2&#xff09;创建应用集&#xff08;用于管理…

《数据结构》顺序表ArrayList

《数据结构》顺序表ArrayList 文章目录《数据结构》顺序表ArrayList什么是顺序表:模拟实现顺序表(以int类型为例)详解ArrayList:ArrayList实现的接口:ArrayList的构造方法:对源码的解析:ArrayList的方法ArrayList的扩容机制ArrayList的缺陷什么是顺序表: 顺序表是用一段物理地…

【Hack The Box】windows练习-- acute

HTB 学习笔记 【Hack The Box】windows练习-- acute &#x1f525;系列专栏&#xff1a;Hack The Box &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f4c6;首发时间&#xff1a;&#x1f334;2022年11月17日&#x1f334; &#x1f…

并发入门组件AQS源码解析(未完善)

必要掌握技术 阻塞&#xff0c;唤醒与中断 阻塞与唤醒 LockSupport的park使用的是Parker->park() synchronized的wait&#xff0c;synchronized的monitorenter使用的是ParkEvent->park()&#xff0c; 而LockSupport的unpark&#xff0c;Parker->unpark() synchroni…

员工离职后,账号权限怎么自动化回收?

最近一则离职员工报复前东家的新闻引人注目。起因是该员工被公司辞退后怀恨在心&#xff0c;于是用自己的笔记本电脑入侵了前公司的服务器&#xff0c;进入了该公司的法国站、英国站、德国站三个亚马逊店铺&#xff0c;进行了大幅调低商品价格、主动向客户发起退款、调高广告预…

1525_AURIX TC275 BootROM上

全部学习汇总&#xff1a; GitHub - GreyZhang/g_TC275: happy hacking for TC275! 这一次看一个全新的章节&#xff0c;BootROM&#xff0c;这是我之前只听过但是没有接触过的一个功能。 1. BootROM包含的三个主要的功能&#xff1a;启动软件、引导加载程序、测试固件。 2. 启…

UI设计都有哪些设计原则,分享三个给你

是什么使一个好UI设计容易阅读&#xff1f;是什么让用户轻松浏览&#xff1f;设计师如何创造一个闪亮的UI&#xff1f;任何软件产品的关键部分都是用户界面。 ​好的UI设计&#xff0c;用户甚至会忽略它。如果做得不好&#xff0c;就会成为用户使用产品的绊脚石。为了更有效地设…

数字化车间认定条件

一、申报数字化车间的奖励&#xff1a; 聊城市为了支持企业开展智能制造。对新获认定的国家级智能制造示范工厂、智能制造优秀场景&#xff0c;分别给予最高100万元、50万元一次性奖励&#xff1b;对新获认定的省级智能制造系统解决方案供应商、智能制造标杆企业、智能工厂、数…

因误删文件导致CentOS7开机卡死无法进入图形登录界面

目录 1、背景 2、解决步骤 1、背景 这几天在清理电脑&#xff0c;需要删除虚拟机&#xff0c;为此写下了Linux系统下卸载VMware Workstation软件_nanke_yh的博客-CSDN博客&#xff0c;但是同时怕有残留&#xff0c;自己全局搜索了vm&#xff0c;删除了部分带有vm的文件。删除…

【GridMask】《GridMask Data Augmentation》

arXiv-2020 文章目录1 Background and Motivation2 Related Work3 Advantages / Contributions4 GridMask5 Experiments5.1 Image Classification5.2 Object Detection on COCO Dataset5.3 Semantic Segmentation on Cityscapes5.4 Expand Grid as Regularization6 Conclusion&…

MongoDB之完整入门知识(集合操作、文档基本CRUD操作、文档分页查询、索引等相关命令)

MongoDB完整入门知识一、相关概念1、简介2、体系结构3、安装网址二、MongoDB基本常用命令1、Shell连接&#xff08;mongo命令&#xff09;2、选择和创建数据库2.1 选择和创建数据库的语法格式&#xff08;如果数据库不存在&#xff0c;则自动创建&#xff09;2.2 查看有权限查看…