Java学习-02 Java基础语法学习

Java学习-02 Java基础语法学习

任何复杂的程序代码,都离不开基础语法,学习任何一门语言,都要学习其语法,这样我们的基础才打的牢固,就像房子的地基对于房子稳固的重要性一样。而良好的编程习惯,能让别人更容易看懂你的代码,理解你的意思,也更加的美观和优雅。

1、Java基本数据类型

​ 在说数据类型之前,我们要想一想为什么会有这个概念。首先,为了理解这个概念,我们先从变量说起,那么什么是变量?

​ 见名知意,变量就是可以改变的量,在计算机中,变量就是系统为程序分配的一块内存单元,用来存储各种类型的数据。由于该存储单元中的数据可以发生改变,因此得名为"变量"。

​ 变量分类:

  • 按所属的数据类型划分:

    • 基本数据类型变量
    • 引用数据类型变量
  • 按被声明的位置划分:

    • 局部变量:方法或语句块内部定义的变量
    • 成员变量:方法外部、类的内部定义的变量

​ 特别注意:类的外面不能有变量的声明

​ 由于变量记录的数据内容大小不同, 导致所需的存储单元大小不同,在 Java 语言中使用数据类型的概念加以
描述 ,数据类型就是一组数据和对其所能进行的操作的集合。

​ 字节是计算机信息技术用于计量存储容量的一种计量单位,作为一个单位来处理的一个二进制数字串,是构成信息的一个小单位。Java 中的字节是八位的字节,即它包含八位的二进制数。因此一个字节可以存储的数值范围为0-255,共2^8 = 256个数字 。

​ Java的数据类型可分为基本数据类型和引用数据类型:

在这里插入图片描述
基本数据类型:

类型 占用内存 值范围(含边界值) 默认值
整数型(int) 4 字节 -2 147 483 648 ~ 2 147 483 647(稍大于 20 亿) 0
短整数型(short) 2 字节 -32 768 ~ 32 767 0
长整数型(long) 8 字节 -9 223 372 036 854 775 808L ~ 9 223 372 036 854 775 807L 0
字节型(byte) 1 字节 -128 ~ 127 0
浮点型(float) 4 字节 -3.40292347E+38-3.40292347E+38 0.0f
双 精 度 型(double) 8 字节 -1.79769313486231570E+308-1.79769313486231570E+308 0.0d
布尔型(boolean) 1 字节 true 或 false false
字符型(char) 2 字节 ‘ \u0000 - u\ffff ’ ‘\u0000 ’

数据类型之间的相互转换:

boolean 类型不能转换成任何其它数据类型

自动类型转换:容量小的类型自动转换成容量大的数据类型

byte,short,int -> float ->long ->double

byte,short,int 不会互相转换,它们三者在计算时会转换成 int 类型

强制类型转换:容量大的类型转换成容量小的数据类型时,要加上强制转换符

long I = 100L;

int i = (int)I;

有可能造成精度降低或数据溢出,使用时要小心。这个就类似你不能把满满的一瓶2.5L的可乐,倒进一个250ml的杯子一样,肯定会洒出来。

另外需要注意的是,Java中默认的整数数值型是int,浮点数数值型是double,所以会出现,有的人这样写会报错的原因:

long a = 100;

float b = 100.0;

在后边加上L和F即可:

long a = 100L;

float b = 100.0F;

2、Java标识符

Java 对包、类、方法、参数和变量等要素命名时使用的字符序列称为标识符。规则如下:

  • 由字母、数字、下划线(_)和美元符号($)组成。
  • 不能以数字开头。
  • 区分大小。
  • 长度无限制。
  • 不能是 Java 中的保留关键字。

标识符命名习惯:见名知意。

Java中的关键字:

Java 中有一些赋予特定的含义,有专门用途的字符串称为关键字(keyword),全部是小写。
在这里插入图片描述
保留字:没有定义用途,但保留备用:goto、const。

3、Java运算符

3.1、算数运算符

在这里插入图片描述

需要注意的是 ++ 和 --,存在i++,++i的写法,它们的区别是:

++:

  • 如果是变量前缀:先对此变量加 1,再执行其他的操作。
  • 如果是变量后缀:先执行当前语句的其他操作,再对此变量加 1

–:

  • 如果是变量前缀:先对此变量减 1,再执行其他的操作。
  • 如果是变量后缀:先执行当前语句的其他操作,再对此变量减 1
3.2、赋值运算符

在这里插入图片描述

3.3、关系运算符

关系运算符的作用是比较两边的操作数,结果总是 boolean 型的。
在这里插入图片描述

3.4、逻辑运算符

逻辑运算符用于对 boolean型结果的表达式进行运算,运算结果总是 boolean 型。

在这里插入图片描述
需要注意的是短路与,短路或,它们的判断规则是和与、或一样的。不同的在于,与、或会判断两侧的结果,再给出最终结果,而短路与和短路或则是,只要第一个条件能给出最终判断,就不会去看第二个条件了。比如:需要两侧都为真才为真,对于 false&true,会判断&两侧的是不是true,再给出结论false,而短路与,看到左侧为false时,就直接给出结论为false,不会去看右侧,短路或也是一样的道理。

3.5、字符串连接运算符

String s=“He” + “llo”; 结果"Hello"
"+“除了可用于字符串相连接,也能将字符串与其它的数据类型相连成一个新的字符串。需要注意的是,只要+号一侧为字符串,那么就是按照字符串拼接,而不是数学上的加法操作。
如:String s=“x” + 123; 结果"x123”

再比如:String s = 1+1+1+“1”+“1”+1+1;结果为"31111"

3.6、三目运算符

X ? Y : Z
X 为 boolean 类型表达式,先计算 x 的值,若为 true,整个三目运算的结果为表达式 y 的值,否则整个运算结果为表达式 z 的值。
例:
int score = 75;
String type = score >=60 ? “及格” : “不及格”;

3.7、操作符优先级

运算符的优先次序
表达式的运算按照运算符的优先顺序从高到低进行,同级运算符从左到右进行:

img

4、转义字符

转义字符 意义 ASCII码值(十进制)
\n 换行,将当前位置移到下一行开头 010
\r 回车 ,将当前位置移到本行开头 013
\t 水平制表(HT) (跳到下一个TAB位置) 009
\\ 代表一个反斜线字符’’’ 092
代表一个单引号(撇号)字符 039
" 代表一个双引号字符 034

5、命名规范

参见阿里云新发布的《Java开发手册(泰山版)》,这里给出命名风格的规约:

  1. 【强制】代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。
    反例:_name / name / n a m e / n a m e / n a m e name / name_ / name / name

  2. 【强制】所有编程相关的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。
    说明:正确的英文拼写和语法可以让阅读者易于理解,避免歧义。注意,纯拼音命名方式更要避免采用。
    正例:ali / alibaba / taobao / cainiao/ aliyun/ youku / hangzhou 等国际通用的名称,可视同英文。
    反例:DaZhePromotion [打折] / getPingfenByName() [评分] / int 某变量 = 3

  3. 【强制】类名使用 UpperCamelCase 风格,但以下情形例外:DO / BO / DTO / VO / AO /
    PO / UID 等。
    正例:ForceCode / UserDO / HtmlDTO / XmlService / TcpUdpDeal / TaPromotion
    反例:forcecode / UserDo / HTMLDto / XMLService / TCPUDPDeal / TAPromotion

  4. 【强制】方法名、参数名、成员变量、局部变量都统一使用 lowerCamelCase 风格。
    正例: localValue / getHttpMessage() / inputUserId

  5. 【强制】常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚,不要嫌名字长。
    正例:MAX_STOCK_COUNT / CACHE_EXPIRED_TIME
    反例:MAX_COUNT / EXPIRED_TIME

  6. 【强制】抽象类命名使用 Abstract 或 Base 开头;异常类命名使用 Exception 结尾;测试类命名以它要测试的类的名称开始,以 Test 结尾。

  7. 【强制】类型与中括号紧挨相连来表示数组。
    正例:定义整形数组 int[] arrayDemo;
    反例:在 main 参数中,使用 String args[]来定义。

  8. 【强制】POJO 类中的任何布尔类型的变量,都不要加 is 前缀,否则部分框架解析会引起序列化错误。
    说明:在本文 MySQL 规约中的建表约定第一条,表达是与否的值采用 is_xxx 的命名方式,所以,需要在
    设置从 is_xxx 到 xxx 的映射关系。
    反例:定义为基本数据类型 Boolean isDeleted 的属性,它的方法也是 isDeleted(),框架在反向解析的时
    候,“误以为”对应的属性名称是 deleted,导致属性获取不到,进而抛出异常。

  9. 【强制】包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词。包名统一使用单数形式,但是类名如果有复数含义,类名可以使用复数形式。
    正例:应用工具类包名为 com.alibaba.ei.kunlun.aap.util、类名为 MessageUtils(此规则参考 spring 的
    框架结构)

  10. 【强制】避免在子父类的成员变量之间、或者不同代码块的局部变量之间采用完全相同的命名,使可读性降低。
    说明:子类、父类成员变量名相同,即使是 public 类型的变量也是能够通过编译,而局部变量在同一方法
    内的不同代码块中同名也是合法的,但是要避免使用。对于非 setter/getter 的参数名称也要避免与成员变
    量名称相同。
    反例:

public class ConfusingName {
	public int stock;
	// 非 setter/getter 的参数名称,不允许与本类成员变量同名
	public void get(String alibaba) {
		if (condition) {
			final int money = 666;
			// ...
		}
		for (int i = 0; i < 10; i++) {
			// 在同一方法体中,不允许与其它代码块中的 money 命名相同
			final int money = 15978;
			// ...
		}
	}
}
class Son extends ConfusingName {
    // 不允许与父类的成员变量名称相同
    public int stock;
}

  1. 【强制】杜绝完全不规范的缩写,避免望文不知义。
    反例:AbstractClass“缩写”命名成 AbsClass;condition“缩写”命名成 condi,此类随意缩写严重降低了代码的可阅读性。

  2. 【推荐】为了达到代码自解释的目标,任何自定义编程元素在命名时,使用尽量完整的单词组合来表达。
    正例:在 JDK 中,对某个对象引用的 volatile 字段进行原子更新的类名为:AtomicReferenceFieldUpdater。
    反例:常见的方法内变量为 int a;的定义方式。

  3. 【推荐】在常量与变量的命名时,表示类型的名词放在词尾,以提升辨识度。
    正例:startTime / workQueue / nameList / TERMINATED_THREAD_COUNT
    反例:startedAt / QueueOfWork / listName / COUNT_TERMINATED_THREAD

  4. 【推荐】如果模块、接口、类、方法使用了设计模式,在命名时需体现出具体模式。
    说明:将设计模式体现在名字中,有利于阅读者快速理解架构设计理念。
    正例: public class OrderFactory;
    public class LoginProxy;
    public class ResourceObserver;

  5. 【推荐】接口类中的方法和属性不要加任何修饰符号(public 也不要加),保持代码的简洁性,并加上有效的 Javadoc 注释。尽量不要在接口里定义变量,如果一定要定义变量,确定与接口方法相关,并且是整个应用的基础常量。
    正例:接口方法签名 void commit();
    接口基础常量 String COMPANY = “alibaba”;
    反例:接口方法定义 public abstract void f();
    说明:JDK8 中接口允许有默认实现,那么这个 default 方法,是对所有实现类都有价值的默认实现。

  6. 接口和实现类的命名有两套规则:
    1)【强制】对于 Service 和 DAO 类,基于 SOA 的理念,暴露出来的服务一定是接口,内部的实现类用
    Impl 的后缀与接口区别。
    正例:CacheServiceImpl 实现 CacheService 接口。
    2)【推荐】如果是形容能力的接口名称,取对应的形容词为接口名(通常是–able 的形容词)。
    正例:AbstractTranslator 实现 Translatable 接口。

  7. 【参考】枚举类名带上 Enum 后缀,枚举成员名称需要全大写,单词间用下划线隔开。
    说明:枚举其实就是特殊的常量类,且构造方法被默认强制是私有。
    正例:枚举名字为 ProcessStatusEnum 的成员名称:SUCCESS / UNKNOWN_REASON。

  8. 【参考】各层命名规约:
    A) Service/DAO 层方法命名规约
    1) 获取单个对象的方法用 get 做前缀。
    2) 获取多个对象的方法用 list 做前缀,复数结尾,如:listObjects。
    3) 获取统计值的方法用 count 做前缀。
    4) 插入的方法用 save/insert 做前缀。
    5) 删除的方法用 remove/delete 做前缀。
    6) 修改的方法用 update 做前缀。
    B) 领域模型命名规约
    1) 数据对象:xxxDO,xxx 即为数据表名。
    2) 数据传输对象:xxxDTO,xxx 为业务领域相关的名称。
    3) 展示对象:xxxVO,xxx 一般为网页名称。
    前缀。
    2) 获取多个对象的方法用 list 做前缀,复数结尾,如:listObjects。
    3) 获取统计值的方法用 count 做前缀。
    4) 插入的方法用 save/insert 做前缀。
    5) 删除的方法用 remove/delete 做前缀。
    6) 修改的方法用 update 做前缀。
    B) 领域模型命名规约
    1) 数据对象:xxxDO,xxx 即为数据表名。
    2) 数据传输对象:xxxDTO,xxx 为业务领域相关的名称。
    3) 展示对象:xxxVO,xxx 一般为网页名称。
    4) POJO 是 DO/DTO/BO/VO 的统称,禁止命名成 xxxPOJO。

猜你喜欢

转载自blog.csdn.net/deemo_hui/article/details/107494799