Java的基础语法(上)
要学习一门程序设计语言,首先必须得学习它的语法,这部分内容对于大部分人来说是非常枯燥的,因为要记忆的内容非常多,但是要想学好 Java,就必须了解这部分的内容。语法格式只是学习时最基础的知识,在实际的开发中,需要根据程序的需要,使用恰当的格式去实现程序逻辑,所以语法一定要熟练。这部分内容对于具有 C/C++ 编程经验的程序员来说,只需要快速的浏览一下,注意其中的差异就行了。
注释
注释(comment)是对代码功能和用途的说明。在程序中编写适当的注释,将使程序代码更容易阅读,增强代码的可维护性。与大多数程序程序设计语言一样,Java 中的注释也不会出现在可执行程序(即 .class
文件)中。因此,可以在源程序中根据需要添加任意多的注释,而不用担心代码会膨胀。
单行注释
单行注释是最常用的注释方式,只需要在要注释的内容前面加上 //
即可。例如:
// hello world
注意:单行注释从两个斜线开始到本行结束都是注释的内容,注释内容不能换行。
多行注释
多行注释可以将任意多行的内容注释,一般用于说明比较复杂的内容,只需要将需要注释的内容用 /*
和 */
包围起来。例如:
/*
hello
world
*/
注意:多行注释不能嵌套使用。
文档注释
文档注释可以自动地生成文档,是 Java 的特色注释格式,这种注释以 /**
开头,以 */
结束。例如:
/**
@version v1.0
@author Lucky Light
*/
关键字
所谓关键字就是被 Java 语言赋予特殊含义,具有专门用途的单词,比如之前接触的 class,public,static等均为 Java 预设的关键字。组成关键字的字母全部都是小写,且不能用作常量、变量和其他标识符的名字。
常见关键字
关键字 | 关键字 | 关键字 | 关键字 |
---|---|---|---|
abstract | assert | boolean | break |
byte | case | catch | char |
class | const | continue | default |
do | double | else | enum |
extends | final | finally | float |
for | goto | if | implements |
import | instanceof | int | interface |
long | native | new | package |
private | protected | public | return |
short | static | strictfp | super |
switch | synchronized | this | throw |
throws | transient | try | void |
volatile | while |
注意:goto 与 const 是 Java 中的保留字,即没有赋予特殊含义却仍被 Java 占用的单词
标识符
标识符即标识的符号,指程序中一切自己指定的名称,例如后续语法中涉及到的变量名称、常量名称、数组名称、方法名称、参数名称、类名、接口名、对象名等等。
组成规则
- 英文大小写字母
- 数字
- 货币字符($)和下划线(_)
注意事项
- 数字不能开头
- 不可以使用关键字
- 严格区分大小写,不限制长度
- 起名时,尽量达到见名知意
标识符中常见的命名规则
- 类名使用 UpperCamelCase 风格,必须遵从驼峰形式,但以下情形例外:(领域模型 的相关命名)DO / DTO / VO / DAO 等。
正例:MarcoPolo / UserDO / XmlService / TcpUdpDeal / TaPromotion
反例:macroPolo / UserDo / XMLService / TCPUDPDeal / TAPromotion
- 方法名、参数名、成员变量、局部变量都统一使用 lowerCamelCase 风格,必须遵从驼峰形式。
正例: localValue / getHttpMessage() / inputUserId
- 常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚,不要嫌名字长。
正例: MAX_STOCK_COUNT
反例: MAX_COUNT
- 抽象类命名使用 Abstract 或 Base 开头;异常类命名使用 Exception 结尾;测试类命 名以它要测试的类的名称开始,以 Test 结尾。
- POJO 类中的任何布尔类型的变量,都不要加 is,否则部分框架解析会引起序列化错误。
反例:定义为基本数据类型 boolean isSuccess;的属性,它的方法也是 isSuccess(),RPC框架在反向解析的时候,“以为”对应的属性名称是 success,导致属性获取不到,进而抛出异常。
- 包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词。包名统一使用 单数形式,但是类名如果有复数含义,类名可以使用复数形式。
正例: 应用工具类包名为 com.alibaba.mpp.util、类名为 MessageUtils(此规则参考 spring的框架结构)
变量和常量
所谓变量,就是程序的运行过程中值会发生改变的量;所谓常量,就是程序运行过程中值不能发生改变的量。
在实际的程序中,可以根据数据在程序运行中是否发生改变,来选择应该是使用变量还是常量。
声明
由于 Java 语言是一种强类型的语言,所以变量和常量在使用以前必须首先声明,在程序中声明变量和常量的语法格式如下:
数据类型 变量或常量名称;
变量或常量名称是该变量或常量的标识符,需要符合标识符的命名规则,在实际使用中,该名称一般和变量或常量的用途对应,这样便于程序的阅读。例如:
int age;
赋值
变量和常量在使用前必须先赋值,给变量或常量赋值的格式为:
变量或常量名称 = 值;
赋值时,要求值的类型需要和声明变量或常量的数据类型一致。例如:
age = 18;
注意:=
表示赋值,将 =
右边的值赋给了左边的变量或常量。Java 中使用 ==
表示相等,等价于数学中的 =
。
综合使用
可以在声明变量或常量的同时,设定该变量或常量的值,语法格式如下:
数据类型 变量或常量名称 = 值;
例如:
int age = 18;
数据类型
Java 是一种强类型语言,这意味着必须为每一个变量声明一种数据类型,基于变量的数据类型,操作系统会进行内存分配并且决定什么将被储存在保留内存中。因此,通过给变量分配不同的数据类型,你可以在这些变量中存储整数,小数或者字字母。
在 Java 中,数据类型分为原生数据类型和引用数据类型。
原生数据类型
Java 支持 8 种原始数据类型。原始数据类型是由该语言预先定义的并用关键词命名的。
字节型(byte)
- 字节型是一种 8 位有正负的二进制整数,最小值是 -128(-2^7),最大值是 127(2^7-1),默认值为 0。
- 字节型数据类型主要是为了在大型数组内节省空间,主要是替代整数由于字节型比整数小 4 倍。
例如:
byte a = 100;
byte b = -50;
短整数(short)
- 短整数是一种 16 位有正负的二进制整数,最小值是 -32768(-2^15),最大值是 32767(2^15-1),默认值为 0。
- 短整数类型的数据也可以像字节型一样用于节省空间。短整数比整数小两倍
例如:
short a = 10000;
short b = -20000;
整数型(int)
- 整数型是一种 32 位有正负的二进制整数,最小值是 - 2,147,483,648(-2^31),最大值是 2,147,483,647(2^31 -1),默认值为 0。
- 整数型一般默认被应用于整数值除非担心内存不够用。
例如:
int a = 100000;
int b = -200000;
长整型(long)
- 长整型是一种 64 位有正负的二进制整数,最小值是 -9,223,372,036,854,775,808(-2^63),最大值是 9,223,372,036,854,775,807 (2^63 -1),默认值为0。
- 这种数据类型一般是在需要比整数型范围更大时应用。
例如:
long a = 1000000L;
long b = -20000000L;
浮点型(float)
- 浮点型数据是一种单精度的 32 位 IEEE 754 标准下的浮点数据,默认值是 0.0f。
- 浮点型数据主要是为了在大型浮点数字数组中节约内存。
- 浮点型数据不能用于如货币这样的精确数据。
例如:
float a = 234.5F;
双精度型(double)
- 双精度型数据是一种双精度的 64 位 IEEE 754 标准下的浮点数据,默认值是 0.0d。
- 这种数据类型主要是默认被用于表示小数的值,一般是默认的选择。
- 双精度型数据不能用于如货币这样的精确数据。
例如:
double a = 123.4;
布尔型(boolean)
- 布尔型数据代表一个信息比特。它只有两个可能的值:真(true)和假(false),默认值是假(false)。
- 这种数据类型用于真假条件下的简单标记。
例如:
boolean a = true;
字符型(char)
- 字符型数据是简单的 16 位 Unicode 标准下的字符,最小值是: '\u0000' (或 0),最大值是: '\uffff' (或 65,535 )。
- 字符型数据可以用来储存任意字母。
例如:
char a ='A';
原生数据类型的相互转换
在 Java 中,类型的转换随处可见。例如变量的定义、数值的计算以及方法的传递等等,类型转换在 Java 中具有重要的作用。在此,先简单介绍一下原生数据类型的相互转换。
要想理解数据类型的相互转换,首先必须知道以下两点:
- 在 Java 中各种原生数据类型所占内存的大小,如下表所示:
数据类型 | 所占的内存 |
---|---|
boolean | 未定 |
byte | 1字节 |
char | 2字节 |
short | 2字节 |
int | 4字节 |
long | 8字节 |
float | 4字节 |
double | 8字节 |
- 在 Java 中,整数的默认数据类型为 int,浮点数的默认数据类型为 double。
隐式类型转换
在 Java 中,隐式转换由系统自动进行,无需程序员干涉,且不会损失精度。规则如下表所示:
原类型 | 目的类型 |
---|---|
byte | short, int, long, float, double |
short | int, long, float, double |
char | int, long, float, double |
int | long, float, double |
long | float, double |
float | double |
例如:
byte + int
会自动转换成:
int + int
又如:
int + double
会转换成:
double + double
再如:
byte + char
会转换成:
int + int
显式类型转换
在 Java 中,显式类型转换又被称为强制类型转换,这种转换不会自动进行,需要由程序员显式指定,而且有可能损失精度。规则如下表所示:
原类型 | 目的类型 |
---|---|
byte | char |
short | byte, char |
char | byte, short |
int | byte, short, char |
long | byte, short, char, int |
float | byte, short, char, int, long |
double | byte, short, char, int, long, float |
例如:
int a;
要想将a转换成 byte 类型,需要这样写:
(byte) a;
如想将整个表达式的结果进行数据类型转换,必须将整个表达式用括号括起来。
例如:
int a;
int b;
byte c;
要想将 a + b
的结果赋值给 c
,则需要这样写:
c = (byte) (a + b);
引用数据类型
- 引用数据类型是由类的编辑器定义的。他们是用于访问对象的。这些变量被定义为不可更改的特定类型。例如:Employee, String 等等。
- 类对象和数组变量就是这种引用数据类型。
- 任何引用数据类型的默认值都为空。
- 一个引用数据类型可以被用于任何声明类型和兼容类型的对象。
例如:
String string = new String("hello world");
网友评论