java 语言基本特点
Java是一种面向对象的编程语言,但是Java不仅仅是对象编程。 本教程是介绍Java语言基础的非面向对象的功能和语法的第一篇。 您将学习如何在Java程序中使用注释,标识符,类型,文字和变量。 您还将学习为什么以及如何记录代码,以及Java对Unicode的支持如何影响源代码和编译。
Java 12中的模块和var
请注意,本教程中的示例已针对Java 12更新,包括Java模块功能( module-info.java
)及其10个受限关键字。 我还将向您展示如何使用var
声明局部变量。 有关Java 12的更多信息,请参见Java语言规范:Java SE 12 Edition 。
从头开始学习Java
您刚开始使用Java吗? Java 101系列中的第一个教程将指导您完成下载和安装Java 12以及编写第一个Java程序的过程。
注释:记录Java代码的三种方法
假设您在一家大公司的IT部门工作。 您的老板指示您编写一个包含数千行源代码的程序。 几个星期后,您完成程序并部署它。 几个月后,用户开始注意到该程序偶尔会崩溃。 他们向您的老板抱怨,老板命令您修理它。 问题是,自创建该项目以来,您就一直在其他项目上工作,而您不记得为什么要像以前那样编写代码。
这是一种常见的情况,并且压力很大。 您可以通过使用有意义的描述记录源代码来避免这种压力。 尽管经常被忽视,但是记录代码是软件开发中最重要的任务之一。 编写有据可查的代码是专业的标志,它将为您和其他开发人员节省大量时间。
在Java中,可以使用注释功能将文档嵌入到源代码中。 注释是分隔的文本块,对人类有意义,但对编译器无意义。 编译源代码时,Java编译器会忽略所有注释,并且不会为它们生成字节码。 Java支持单行,多行和Javadoc注释。
单行注释
单行注释跨越一行。 它以//
开头并一直到当前行的末尾。 编译器会忽略//
至该行末尾的所有字符。 以下示例显示了单行注释:
System.out.println((98.6 - 32) * 5 / 9); // Output Celsius equivalent of 98.6 degrees Fahrenheit.
单行注释对于指定给定代码行背后的意图的简短,有意义的描述很有用。
从Java 9开始,您可以使用jshell
尝试单行和其他类型的注释。 这是一个例子:
jshell> // single-line comment
jshell>
关于jshell
Java Shell( jshell
)是在Java SE 9中引入的,可以替代Java编译器( javac
)和Java应用程序启动器( java
)。 在本系列文章的整个过程中,我们将使用它来尝试新的Java语言功能。 请参阅“ Java 101:从头开始学习Java ”以开始使用jshell
。
多行注释
多行注释跨越多行。 它以/*
开头,以*/
结束。 从/*
到*/
所有字符都将被编译器忽略。 以下示例显示了多行注释:
/*
An amount of $2,200.00 is deposited in a bank paying an annual
interest rate of 2%, which is compounded quarterly. What is
the balance after 10 years?
Compound Interest Formula:
A = P(1+r/n) nt
A = amount of money accumulated after n years, including interest
P = principal amount (the initial amount you deposit)
r = annual rate of interest (expressed as a decimal fraction)
n = number of times the interest is compounded per year
t = number of years for which the principal has been deposited
*/
double principal = 2200;
double rate = 2 / 100.0;
double t = 10;
double n = 4;
System.out.println(principal * Math.pow(1 + rate / n, n * t));
如您所见,多行注释对于记录多行代码很有用。 或者,您可以为此使用多个单行注释:
// Create a ColorVSTextComponent object that represents a component
// capable of displaying lines of text in different colors and which
// provides a vertical scrolling capability. The width and height of
// the displayed component are set to 180 pixels and 100 pixels,
// respectively.
ColorVSTextComponent cvstc = new ColorVSTextComponent(180, 100);
您还可以使用多行注释来注释掉不想编译但仍要保留以备将来使用的代码块:
/*
if (!version.startsWith("1.3") && !version.startsWith("1.4"))
{
System.out.println("JRE " + version + " not supported.");
return;
}
*/
如果嵌套多行注释,则编译器将报告错误。 例如,当编译器遇到/* This /* nested multiline comment (on a single line) */ is illegal */
时,它会输出一条错误消息/* This /* nested multiline comment (on a single line) */ is illegal */
。 不要嵌套多行注释。
用jshell多行注释
在jshell
输入多行(或Javadoc)注释时,您会注意到一些有趣的jshell
。 注释未完成时,每次按Enter时,此工具都会显示一个...>
继续提示:
jshell> /*
...> Multiline comment
...> */
jshell>
Javadoc注释
Javadoc注释是特殊的多行注释。 它以/**
开头,以*/
结束。 从/**
到*/
所有字符都将被编译器忽略。 以下示例显示了Javadoc注释:
/**
* Application entry point
*
* @param args array of command-line arguments passed to this method
*/
public static void main(String[] args)
{
// TODO code application logic here
}
此示例的Javadoc注释描述了main()
方法。 在/**
和*/
之间夹有该方法和@param
Javadoc标记 (对javadoc
工具的@
前缀指令)的描述。
考虑以下常用的Javadoc标签:
-
@author
标识源代码的作者。 -
@deprecated
标识不应再使用的源代码实体(例如,方法)。 -
@param
标识方法的参数之一。 -
@see
提供了一个另见参考。 -
@since
标识实体最初起源的软件版本。 -
@return
标识方法返回的值的类型。 -
@throws
记录了从方法抛出的异常。
尽管它们被编译器忽略,但是Javadoc注释由javadoc
处理,它将Javadoc注释编译为基于HTML的文档。 例如,以下命令为假设的Checkers
类生成文档:
javadoc Checkers
生成的文档包括一个描述文档起始页的索引文件( index.html
)。 例如,图1显示了Java SE 12运行时库API文档中的起始页。
Java中的Unicode
Unicode是一种计算行业标准,用于一致地编码,表示和处理世界上大多数书写系统中表示的文本。 Unicode使用字符编码来编码字符以进行存储。 两种常用的编码是UTF-8和UTF-16 。 在本教程中,您将看到Java对Unicode的支持如何影响源代码和编译。
标识符:在Java代码中命名类,方法等
在任何编程语言中,开发人员都必须能够命名实体,以便在代码中引用它们。 Java为此提供了标识符功能。 标识符只是源代码实体的名称。
标识符由字母(AZ,az或任何字母的等效大写/小写字母)组成; 数字(0-9或任何数字系统中的等效数字); 标点符号(例如下划线); 和货币符号(例如美元符号)。 标识符名称必须以字母,货币符号或标点符号开头。 此外,它不能从一行换行到下一行。
以下是有效标识符的一些示例:
-
i
-
count2
-
loanAmount$
-
last_name
-
$balance
-
π
(希腊字母Pi-3.14159)
许多字符序列不是有效的标识符。 请考虑以下示例:
-
5points
,因为它以数字开头 -
your@email_address
,因为它包含一个@
符号 -
last name
,因为它包含空格
Java中的大小写很重要
Java是区分大小写的语言 ,这意味着区分大小写的标识符被视为单独的标识符。 例如, age
和Age
是单独的标识符。
保留字
可以选择几乎任何有效的标识符来命名类,方法或其他源代码实体。 但是,Java保留了一些特殊用途的标识符。 这些被称为保留字 。 Java保留以下标识符:
表1. Java中的保留字
抽象 | 断言 | 布尔值 | 打破 | 字节 |
案件 | 抓住 | 烧焦 | 类 | const |
继续 | 默认 | 做 | 双 | 其他 |
枚举 | 延伸 | 假 | 最后 | 最后 |
浮动 | 对于 | 去 | 如果 | 实施 |
进口 | 实例 | 整型 | 接口 | 长 |
本机 | 新 | 空值 | 包 | 私人的 |
受保护的 | 上市 | 返回 | 短 | 静态的 |
严格的 | 超 | 开关 | 已同步 | 这个 |
扔 | 抛出 | 短暂的 | 真正 | 尝试 |
虚空 | 易挥发的 | 而 |
当编译器检测到在其使用上下文之外正在使用这些保留字中的任何一个时,输出错误消息。 例如,作为类或方法的名称。 Java也保留但不使用const
和goto
。
关键字与文字
Java的大多数保留字也称为关键字 。 这三个例外是false
, null
和true
,它们是文字的示例。 您很快就会了解有关文字的更多信息。
Java 9和Java 10中的保留字更改
每次Java更新都会对语言进行更改和改进。 最近的更新包括对Java保留字的更改。
从Java SE 9开始,下划线( _
)被保留并且被视为关键字。 使用单个下划线命名任何内容都是错误的。 (可以使用多个下划线进行命名,但您可能不应该这样做。)
Java SE 9还引入了modules以及10个受限关键字:
-
open
-
module
-
requires
-
transitive
-
exports
-
opens
-
to
-
uses
-
provides
-
with
Java编译器仅在module-info.java
文件的上下文中才将这些标识符视为关键字。 在此文件之外,它们是可用于命名任意项目的普通标识符。 (您将在本系列的后面部分中学习有关模块的更多信息。)
Java SE 10引入了var
作为局部变量声明和lambda形式参数的类型。 编译器将var
视为具有特殊含义的标识符,但它不被视为保留字。 您不能使用var
来命名类,但可以使用var
来命名方法(尽管您可能不应该这样做)。 稍后我们将详细讨论var
。
类型:在Java代码中对值进行分类
Java应用程序处理字符,整数,浮点数,字符串和其他类型的值。 相同种类的所有值都具有某些特征。 例如,整数没有小数,而字符串是具有长度概念的字符序列。
Java提供了用于对值进行分类的类型功能。 类型是一组值,它们在内存中的表示形式以及一组用于操纵这些值(通常将它们转换为其他值)的操作。 例如, 整数类型描述了一组不带小数部分的数字,一个二进制补码表示形式(我将在稍后解释二进制补码 )以及产生新整数的加减运算。
Java是一种强类型语言
在Java等强类型语言中,每个变量,表达式等都具有编译器已知的类型。 此功能可帮助编译器在编译时检测与类型相关的错误,而不是使这些错误在运行时出现,因为在运行时可能难以找到起点。 (您将在本教程的后面部分了解有关变量的更多信息,本系列的下一篇教程将介绍表达式。)
Java支持基本类型,引用类型和数组类型。
原始类型
基本类型是一种由语言定义的类型,其值不是对象。 Java支持一些原始类型:
- 布尔型
- 字符
- 字节整数
- 短整数
- 整数
- 长整数
- 浮点
- 双精度浮点
您将在Java程序中频繁使用基本类型,因此花点时间考虑一下每个类型。
原语的问题
一些开发人员希望Java不支持基元类型,而其他开发人员则认为基元具有独特的特殊用途。 了解有关原始类型以及将原始语言保留在Java语言中的案例的更多信息。
布尔型
布尔类型描述true / false值。 JVM规范指示存储在数组中(稍后讨论)的布尔值表示为内存中的8位(二进制数字)整数值。 此外,当它们出现在表达式中时,这些值表示为32位整数。 Java提供了AND,OR和NOT操作来处理布尔值。 同样,其boolean
保留字标识源代码中的布尔类型。
翻译自: https://www.infoworld.com/article/2925720/elementary-java-language-features.html
java 语言基本特点