Java学习之路03---标识符、关键字、变数概念

架构图


前言

Java程序是一系列对象的集合,而对象之间透过彼此之间调用方法来达到开发目的,因此在认识Java程序前需要特别注意几个专有名词:

  1. 类(class): 一个抽象的模板,例如人,他有身高、体重等属性,有说话、跳舞等动作
  2. 对象(object): 一个类的实例,例如美国人、欧洲人等
  3. 方法(method): 包在类当中的函数,可以代表该类的行为,例如人会说话。一个类可以拥有多个方法
  4. 实例变数(Instance variables): 每个类都有专属的变数,并且可以拥有多种不同变数

接着来看看一个简单的java程序,其中标识符是对所有需要名字的组成部分的通称,关键字是java为了特殊目的保留的字段,不开放给开发者使用,变数是一个用来储存变动数值的内存记忆体名称

如果有学过其他程序语言的朋友应该可以看到几分相似之处:

标识符

Java标识符是package,class,interface,method或变数名的总称。而好的命名必须要能明确反映出作用。不过在在正确命名前我们需要了解那些命名是合法的哪些又是非法的

合法命名

例如以下的例子,可以使用英文大小写(大小写有别)、数字、下滑线、美元符等特殊字元

  • Hello
  • hello
  • hello123
  • _hello_
  • haha$$$haha
  • Public(首字母大写)
  • Void

非法命名

但是但是,知道可以用英文字母、数字、特殊字元来表示并不代表没有限制,例如不能以数字开头、避免使用关键字予保留字、名称之间不能有空白等

  • class
  • void
  • 1hello
  • abc 123

关键字

关键字是对编译器有特殊用意的词,这些关键字代表的意思会在後面介绍,我们先熟悉几个常见的就可以
例如

  • package
  • public
  • class
  • static
  • void

保留字是虽然现在没有作为关键字,但是在以後版本说不定会进行更新,例如等

  • goto(危险的家伙)
  • const

不管是关键字还是保留字,在做标识符命名时应该避免使用

下面的表格是常见的关键字表,不用特别去背,用到的时候自然会记得,或者看编辑器是否有highlight就知道了

abstract boolean break byte case catch
char class continue default do double
else extends false final finally float
for if implements import native int
interface long instanceof new null package
private protected public return short static
super switch synchronized this throw throws
transient true try void volatile while

变数

变数是用来储存不断改变数值的一小块记忆体区块的总称,我们在编写java程序时需要注意三个重点,分别是

int i=10;
  • 变数类型(int)
  • 变数名(i)
  • 变数值(10)

因为变数也是标识符的一种,因此他的命名也具有相同的规范性,同时变数的命名有专属於它的一套特别规则

驼峰命名法
假如变数只有单一一个词,那麽变数名必须要全部小写
例如: age

若该变数名是由两个单词组成那麽第一个单词小写,第二个单词首字母大写
例如: lastDay

好的单词需要简短有力,让其他开发者一看就知道它代表的意思,并且可以清楚区分他是类、方法或是变数

class命名规则

Pascal命名法
Pascal命名法是针对类的命名法,他要求首字母必须大写
例如:

package com.imooc;

public class Hello{

	public static void main(String[] args) {
		int a = 10;
		System.out.println(a);
	}
}

基本变数类型

java主要的变数类型大概可以用下图来表示,本篇将会大致介绍基本变数类型的基础,详细变数的操作会在後篇提及

基本变数类型的学习重点在於变数存储范围以及变数存储代表的含意,学习使用不同变数类型目的在於依照场合使用最适合变数

变数在使用前一定要进行初始化

下表示java不同变数类型的范围以及含意:

变数类型 意思 占用位元组
byte 字节型 1
short 短整数型 2
int 整数型 4
long 长整数型 8
float 单经度浮点数 4
double 双精度符点数 8
char 字元型 2
boolean 布林型 1

可以将储存范围小的变数赋值给储存范围大的变数,反过来则不行,学过相关程序语言的朋友应该也理解这个概念

float f=123.23f;
double d;
d=f;

整数

整数的范围
整数类型依照储存大小从小到大分别为,储存范围如下表:

类型 最小值 最大值
byte -128 127
short -32768 32767
int -2,147,483,648 2,147,483,647
long -9,223,372,036,854,775,808 9,223,372,036,854,775,807

整数的表达方式
在java程序中可以用简单的8, 10, 16进位来表达整数值

  • 8进制: 0开头
    • 012
    • 079
    • 067
  • 10进制
    • 123
    • 78
  • 16进制: 0x开头
    • 0x3c
    • 0xabc
    • 0xabcL/0xabcl(long类型限定後缀)
byte
  • 变数长度为1个byte
  • 主要用来代替整,节约空间用
  • 有符号
byte b1 = 127;
byte b2 = -128;
short
  • 变数长度为2个bytes
  • short类型也可以用来代替整数,节约空间
  • 有符号
short s1 = 123;
short s2 = -321;
int
  • 变数长度为4个bytes
  • 一般整型常数预设为int类型
  • 最常见的整数类型
  • 有符号
int i = 2147483647;
int i = 0;
long
  • 变数长度为8个bytes
  • 通常用来储存非常长的整数(大型系统)
  • 需要在变数後面加上後缀
  • 有符号
long i = 2147483648; // 没有後缀的情况下,预设是int类型,编译会出错
long l = 123456L; // 後缀L或l可以代表long类型,不过通常会写大写以免l与1混淆

byte与short不用加上後缀
在java中常数预设是int类型,也就是说整数范围在-2,147,483,648~2,147,483,647
如果使用long赋值时整数值超出,就要告诉编译器这个常数是long型。相反的byteshort的范围均在int之内,所以不需要增加後缀来增加常数表达长度,不过要注意赋值时不要超过宣告的变数范围,不然就要使用转型

浮点数

具有小数点的变数类型,常用於高精度计算,如果没有特定後缀,预设会将浮点数类型宣告成double,这点要特别注意

float f1 = 123.456; // 错误,应该改成
float f2 = 123.456f;
double d1 = 123.456d // 大小写没有限制
double d2 = 123.456D;

储存范围如下表:

类型 最小数 最小精度 最大正整数
float -3.40E+38 1.4E-45 3.40E+38
double -1.79E+308 4.9e-324 1.79E+308

科学记号表示法
我们可以使用科学记号来表示浮点数

double d1 = 1.3e10;
double d2 = 1.3E10;

特殊表达方法

char c=.5; // c=0.5
float
  • 单精度的32位元浮点数
  • 要注意浮点数不能用来表示精准的值
  • 可以用float类型来节省double类型记忆体空间
float f1 = 0.239f;
float f2;
f2 = 0.239F;
double
  • 双精度64位元浮点数
  • 同样不能用来表达精确值
  • double类型是表达范围最广的变数类型
double d1 = 9453.9453d;
double d2;
d2 = 5942.5942D;
浮点数最精确值与最小值混淆点

有些书上会把最小值最精确值搞混,将float最小值写成1.4E-45,不过既然是有符号类型,那最小值一定是负数,这不就矛盾了吗

於是打开Float.class看看里面的定义,果然找到一个常数MIN_VALUE,看了一下注解对它的解释该常数表示的最小正浮点数,也可以解释成float可以多精准。右侧的注解又提到大小为1.4e-45f跟书中最小值定义一样,还好有看注解,不然真的会被搞懵


由此可知真正的最小值应该是最大值取负,最大值在Float.class也可以找到MAX_VALUE这个值,大小是3.40E+38double的话就去参考Double.class就可以了

浮点的二进位表示方法可以参考之前写的文章

最後把这些常数定义打印出来,double check跟所学的没问题

字元类型

char类型是16bits无符号变数类型,它表示Unicode字元,其范围为0~65535

类型 最小值 最大值
char 0 65535

在使用char类型数据赋值时应注意需使用' '单引号,但不能使用" "双引号

char c="h"; // c: Am I a joke to you?
char c='h' // 正确

整数表示

char c1='A'; // 可以用以下方法表示
char c2=0101; // 8进位
char c3=65; // 10进位
char c4=0x41; // 16进位

Unicode编码方法
根据Unicode Table的对应数做字面量的赋值

char a='\u0041' // 'A'

超出范围需要casting

char a = 65535; // 正常范围
char b = (char)65536 // 超出范围,需要进行casting

跳脱字元
字元中有代表特殊含意的跳脱字元,当跳脱字元放在字元阵列时,它会对後续的字元做特殊操作。常见的跳脱字元如下表

跳脱字元 含意
\' 单引号字元
\\ 反斜线字元
\t tab空行
\r Enter
\n 换行字元
\b Backspace
\0 null

字串类型

字串类型的变数,可以用来直接接收字串,注意字串类型要用两个双引号包起来

String s1 = "I Like Java!";

另外字串类型变数也可以用Unicode编码方式给值,例如我们可以将

String s1 = "ABC";

替换成

String s1="\u0041\u0042\u0043";

另外宣告字串类型後,要对它进行初始化操作,就算是是空字串,也要执行初始化

String s1=""; // 宣告时即初始化
String s2;
s2 = ""; // 宣告後再进行赋值

布林类型

java相对於C/C++不同,布林类型变数值只能是truefalse,不能是0或1。布林变数类型常用来做条件判断用

boolean b=true;
if(b) {
	System.out.print("boolean="+b);
}

<<:  Java 开发 WEB 的好平台 -- Grails -- (4) 建立第一个 Controller

>>:  更新网格交易机器人

LIFF APP 串接发送认证码 API

今天要结合前两天的成果,完成 LIFF APP 串接 发送认证码 API 的功能 目标 要完成的功能...

[SQL]取20天的平均

天啊.怎麽做啊? 同事用了一个聪明的作法, XD 这麽简单,怎麽没想到呢?脑袋卡卡! 我们先来做一下...

ASP.NET MVC 从入门到放弃(Day10) -C# get set 自动属性介绍

接着来讲讲get set部分.... public class A { public string ...

【Day18】电子商务与行销篇-线上客服

#odoo #开源系统 #数位赋能 #E化自主 实体通路与电子商务最大的差异,应该就是实体通路很明确...

系统分析师的养成之路—如何培养商业思维篇

前一篇我分享了系统分析师必须要有商业思维才有能力真正对你所服务的客户提供正确且完整的解决方案!但是,...