1、什么是常量?
本期我们正式开始进入 Java 的学习,在正式开始之前,我们需要简单的认识下 Java 中的常量。
Java常量的定义:在程序中永恒不变的值,同时也不能被改变的值我们称为常量。
1.1 Java常量分类:
整型常量:像我们计算机所能识别的二进制,以及我们生活中常用的十进制等等,都是整型常量,但我们要注意,我们为了区分不同的进制,八进制是以0开头,十六进制则以0x开头,当然表示十进制数不能用0开头!
浮点数常量:我们生活中用到的小数都可以算是浮点数常量,在 Java 中浮点数又为单精度浮点型和双精度浮点型,用 float 和 double 来表示,而且默认是 double,而且浮点常量还可以用指数来表示例如:4.9E-324
字符常量:在 Java 中也有字符常量,而且只用来表示单个字符,如果你看到是用一对英文单引号引起来的单个字符,那肯定就是字符常量了,但也不排除用转义序列来表示的特殊字符。
字符串常量:这个相信就很好理解了,字符串常量也就是用英文双引号引起的字符串例如:"hello world" ,同时你也可以不包括任何字符:"" 这样就为一个空字符串,也就是长度为0的字符串。
布尔常量:此常量主要就是用来区分真假的,在一个逻辑表达式中,他最终得出的结果也就是 true或者false,而且 Java 中并不存在 0 为假 非0 为真!
空常量(null):空常量主要用于表示对象的引用为空,而且他只有一个值:null
2、基本数据类型
在 Java 中我们一共有两类数据类型:基本数据类型和引用数据类型,但是我们今天主要是来认识基本的数据类型:
2.1 类型的基本认识:
- 字面常量值中,整数默认为 int 类型,浮点数默认为 double 类型
- 数据类型大小不会随着平台的改变而改变,这也体现出 Java 跨平台性
- 整型家族和浮点数家族不存在无符号数,都是有符号数
2.2 为什么会出现数据类型?
可能有的小伙伴以前没接触过C语言,一来就开始接触 Java,估计有很多小伙伴会觉得,整那么多数据类型干嘛?又难记,我搞一个笼统的类型,就用一两个数据类型就解决了多好,还省时省力。
那么这里我们就来讨论下为什么需要那么多的数据类型?
我不知道大家伙有没有带过帽子,我记得我路过商店的时候,有许多人在买帽子,每个人呢都会拿起帽子在戴在头上看一看,试试合不合适,有的人头大买大帽子,有的人头小买小帽子,那么这里问题来了!
如果张三的头很小,他买一个大帽子,可以吗?可以!但是不好看,戴着也不舒服,还浪费了帽子的充裕的空间,说不定还挡住眼睛。
如果张三的头很大,他买一个小帽子,可以吗?不可以!因为张三根本戴不进去!那不难受死了吗?除非张三愿意舍弃他的帅气的造型去剃光头!
那我们想想,数据类型有大有小,你一个很小的值放入一个 long 类型是不是会造成空间浪费?就比如我只需要打印 99乘法表,最大才是 81,那不白白浪费了空间吗?那如果我们有一个很大的值,比如 10000,我们就想把它放入 byte 类型中,放得下吗?放不下!有的人说编译器会自动截断!这 Java 语法可比 C语言严谨,还有的人说强制类型转换,那肯定可以,那就好比你只要舍得剃光头,就能戴上那顶帽子!
总结:有了不同了类型,确定了变量的大小,系统更容易分配空间,也可以更方便程序员用不同的类型去实现不同的需求防止空间浪费
3、变量和数据类型
3.1 什么是变量?
变量其实来源于数学,相信大家都听过一句话,x 自变量, 还有什么自变量越大函数值越小等,那么在计算中,变量是可以通过变量名来访问的,也就是 Java 中常说的标识符,我们定义一个变量的名字也就叫做标识符。既然是变量,那肯定是能被改变的量,但是也有例外,比如在纯函数语言Haskell 变量就有可能是不可变的,但是今天我们只讨论 Java。张三今天心情好,定义了一个字符串类型 String str = "I am happy!";突然有一天张三心情变差了,就把 str 字符串变量改成 str = "I am very unhappy!";这就是变量,你想变就能变。(字符串类型后续讲解,属于引用数据类型)
注:Java中变量要赋初值,不然编译会报错!
3.2 标识符的命名规则
【硬性规则】
- 标识符中可以包含数字,字母,下划线和 $ 符号等
- 标识符不能以数字开头,不能是关键字 if for 等...并且严格区分大小写
【建议遵守】
- 类名:每个单词的首字母大写(大驼峰)
- 方法名:首字母小写,后面每个单词首字母大写(小驼峰)
- 变量名:首字母小写,后面每个单词首字母大写(小驼峰)
- 建议不要使用下划线开头,反例:_price
- 禁止使用拼英!反例:jiage
- 不要过度缩写,要见名之意
目前就先建议这么多,后面碰到了我们再提一嘴,一个良好的编程规范对你我都好!
这里还想强调一点, Java 中的代码风格,左括号前是不换行的,右括号如果后面有 else 也是不换行的
3.3 整型家族变量
public class TestDemo { public static void main(String[] args) { int a = 10; System.out.println(Integer.MAX_VALUE); //打印 int 能存储的最大值 System.out.println(Integer.MIN_VALUE); //打印 int 能存储的最小值 short s = 20; System.out.println(Short.MAX_VALUE); //打印 short 能存储的最大值 System.out.println(Short.MIN_VALUE); //打印 short 能存储的最小值 long l = 30L; System.out.println(Long.MAX_VALUE); //打印 long 能存储的最大值 System.out.println(Long.MIN_VALUE); //打印 long 能存储的最小值 char c = 'w'; System.out.println(Character.MAX_VALUE); //打印 char 能存储的最大值(符号) System.out.println(Character.MIN_VALUE); //打印 char 能存储的最小值(符号) } }
这里我们有几点要注意:
- 这些变量类型在任何系统上的大小都不会改变
- int 的包装类为 Integer,short 的包装类为 Short,long 的包装类为 Long,char 的包装类为 Character 这些类不了解没没关系,后期会一一讲解
- 长整型后面建议加上l或L,第一为了与 int 区分,但更建议加大写L,小写 l 与 1 不好区分
- Java中 char 占两个字节,因为使用的是 Unicode 编码,表示的字符种类更多,包括中文。
- 如果使用 javac 编译的话,如果程序中有中文,可能会报错,此时我们在 javac 时加上 -encoding UTF-8 Test.java 就行了