【跟小嘉学习JavaWeb开发】第三章 从数据类型说起
系列文章目录
【跟小嘉学习JavaWeb开发】第一章 开发环境搭建
【跟小嘉学习JavaWeb开发】第二章 Java 程序设计概述
【跟小嘉学习JavaWeb开发】第三章 从数据类型说起
文章目录
- 系列文章目录
- @[TOC](文章目录)
- 前言
- 一、注释
- 1.1、注释
- 1.1.1、单行注释
- 1.1.2、多行注释
- 1.1.2、文档注释
- 二、标识符
- 2.1、标识符
- 2.2、关键字(保留字)
- 2.3、命名规范
- 2.3.1、驼峰命名法
- 2.3.1.1、小驼峰命名法(Camel Case)
- 2.3.1.2、大驼峰命名法(帕斯卡命名法)
- 2.3.2、匈牙利命名法(Hungarian Notation)
- 2.3.3、下划线命名法(Snake Case)
- 2.3.4、短横线命名法(Kebab Case)
- 三、数据类型
- 3.1、数据类型
- 3.1.1、基本数据类型
- 3.1.1.1、整数类型:byte、short、int、long;
- 3.1.1.2、浮点类型:float、double
- 3.1.1.3、布尔类型:boolean
- 3.1.1.4、字符类型:char
- 3.1.1.5、数据类型占用内存空间以及存储范围
- 3.1.1.6、基本数据类型默认值
- 3.1.1.7、溢出和精度问题
- 3.1.1.7.1、溢出
- 3.1.1.7.2、精度问题
- 3.1.2、引用数据类型
- 3.1.2.1、字符串
- 3.1.2.2、数组
- 3.1.2.3、类(class)
- 3.1.3、数据类型转换
- 3.1.2.4、接口(interface)
- 3.1.3、数据类型转换
- 3.1.3.1、自动数据类型转换
- 3.1.3.2、强制数据类型转换
- 四、变量和与常量
- 4.1、变量
- 4.2、常量
- 五、Java的跨平台特性
- 5.1、java为什么可以跨平台?
- 5.2、64位与32位java虚拟机上同种数据类型所占内存大小是否一致?
- 总结
文章目录
- 系列文章目录
- @[TOC](文章目录)
- 前言
- 一、注释
- 1.1、注释
- 1.1.1、单行注释
- 1.1.2、多行注释
- 1.1.2、文档注释
- 二、标识符
- 2.1、标识符
- 2.2、关键字(保留字)
- 2.3、命名规范
- 2.3.1、驼峰命名法
- 2.3.1.1、小驼峰命名法(Camel Case)
- 2.3.1.2、大驼峰命名法(帕斯卡命名法)
- 2.3.2、匈牙利命名法(Hungarian Notation)
- 2.3.3、下划线命名法(Snake Case)
- 2.3.4、短横线命名法(Kebab Case)
- 三、数据类型
- 3.1、数据类型
- 3.1.1、基本数据类型
- 3.1.1.1、整数类型:byte、short、int、long;
- 3.1.1.2、浮点类型:float、double
- 3.1.1.3、布尔类型:boolean
- 3.1.1.4、字符类型:char
- 3.1.1.5、数据类型占用内存空间以及存储范围
- 3.1.1.6、基本数据类型默认值
- 3.1.1.7、溢出和精度问题
- 3.1.1.7.1、溢出
- 3.1.1.7.2、精度问题
- 3.1.2、引用数据类型
- 3.1.2.1、字符串
- 3.1.2.2、数组
- 3.1.2.3、类(class)
- 3.1.3、数据类型转换
- 3.1.2.4、接口(interface)
- 3.1.3、数据类型转换
- 3.1.3.1、自动数据类型转换
- 3.1.3.2、强制数据类型转换
- 四、变量和与常量
- 4.1、变量
- 4.2、常量
- 五、Java的跨平台特性
- 5.1、java为什么可以跨平台?
- 5.2、64位与32位java虚拟机上同种数据类型所占内存大小是否一致?
- 总结
前言
我们在之前的章节讲解了第一个Java 程序——hello World 组成。接下来我们要讲解Java 程序设计的基本概念,我们将详细讲解变量、注释、标识符等这些基础概念,这些概念几乎是所有编程语言都会讲解的。
一、注释
1.1、注释
我们今后的工作之中经常需要给我们的程序代码添加注释,以便于代码的阅读和长期维护。在 Java 之中存在三中注释:单行注释、多行注释、文档注释。
1.1.1、单行注释
单行注释以 // 注释内容 形式存在
1.1.2、多行注释
多行注释以 /* 注释内容*/
1.1.2、文档注释
文档注释 以 /** 文档注释特定标记*/,这种注释往往可以结合开发工具使用。
public class Main { // [单行注释] 定义程序执行主类public static void main(String[] args) { // [单行注释] 程序的执行的起点,主方法/** [单行注释] 以下的程序代码是在屏幕上进行一些提示信息的输出,如果有需要则可以在里面进行多行的定义*/System.out.println("Hello, World!");}
}
既然所有的注释文字不会自动进行代码的编译处理,所以在实际项目开发之中可以将一些暂时不需要的代码通过注释的形式。让其失效,这种形式要比直接删除代码更高效。
二、标识符
2.1、标识符
在任何一个程序里面都一定会有大量的名称进行一些特定结构的声明,例如:在 Java 程序里面一直强调,每一个程序都是一个类,那么所有的就有一定要有类的名称,类名称就是一个标识符。所有的程序编译器都是依据这个名称来进行代码结构管理的,既然要进行管理,对于名称就有它的命名要求。
在 Java 之中所有的标识符由字母、数字、下划线(_)、美元符号($)所组成,其中不能使用数字开头,不能使用 Java 关键字(保留字)进行标识符的定义
顺便说一下:正常的标识符里面一般都要求具有严格的意义,例如:你在程序里面定义了a、b、c一系列的标识符,这些标识符的意义不太明确,阅读起来是比较困难的,另外对于标识符中定义的($) 也不要去直接使用,因为其有特殊的含义,所以一般来说,标识符的组成就是字母、下划线、数字所组成,建议使用字母开头。
如果你使用了错误的标识符,所有语法上的错误都可以在程序编译的时候自动进行错误提示。
2.2、关键字(保留字)
任何的编程语言里面都会提供有大量的关键字,这些关键字往往都具备有特殊的含义,Java 中的关键字会随着每次版本的更新而有所扩充。

对于以上的关键字或保留字没有必要去背诵,一般来说比较好用的代码编辑器都会有一些关键字有所提示。

对于我们使用 IDEA来说,所有这些带有特殊颜色(蓝色、粉色、黄色)的单词都是关键字或保留字。
- 很多语言里面都有许多相同的关键字:for、if、else、switch、while;
- Java 有两个未使用的关键字:goto、const;
- 有三个特殊含义的标记(严格来讲不属于关键字):null、true、flase;
- JDK1.4之后扩充了 assert 关键字,用于断言操作;
- JDK1.5之后扩充了 enum 关键字,用于进行枚举类型的定义;
- JDK 10之后扩充了 var 关键字,用于进行匹配类型变量的定义;
- JDK 13之后扩充了 yield 关键字,用于进行局部返回;
除了以上的标识符的定义要不之外,实际上 Java 支持使用 Unicode 字符进行标识符的定义。
package org.xiaojia;public class Main { // [单行注释] 定义程序执行主类public static void main(String[] args) { // [单行注释] 程序的执行的起点,主方法int 年龄 = 18;System.out.println("年龄" + 年龄);}
}
但是正常的开发者一般都不会采用这样的形式来进行标识符的定义;
2.3、命名规范
所谓命名规范就是标识符的命名方法,常见的命名方法有:小驼峰命名法(Camel Case)、大驼峰命名法(帕斯卡命名法)、匈牙利命名法(Hungarian Notation)、下划线命名法(Snake Case)、短横线命名法(Kebab Case);
一般情况下,建议项目或者团队需要统一的命名规则,例如 Linux 内核常用下划线法、Windows Api多用匈牙利命名法;
2.3.1、驼峰命名法
2.3.1.1、小驼峰命名法(Camel Case)
规则:首单词全小写,后续单词首字母大写,无分隔符(如 userName、getUserInfo)。
用途:变量、函数名;
2.3.1.2、大驼峰命名法(帕斯卡命名法)
规则:所有单词首字母均大写(如 StudentInfo、CalculateAverage)。
用途:结构体、枚举、类名(C++)。
2.3.2、匈牙利命名法(Hungarian Notation)
规则:变量名前缀标明类型或作用域(如 iCount 表示整型,lpszStr 表示长指针字符串)。
用途:早期Windows编程中用于增强类型可读性,现代使用较少。
2.3.3、下划线命名法(Snake Case)
规则:单词全小写,以下划线分隔(如 user_name、get_user_info)。
用途:广泛用于变量、函数名,尤其在Unix/Linux环境或传统C代码中。
2.3.4、短横线命名法(Kebab Case)
规则:单词全小写,以短横线分隔(如 user-name、get-user-info)。
用途:多用于文件名或URL,C语言不支持
三、数据类型
3.1、数据类型
在Java 程序的内部对于数据类型实际上分为两大类型:基本数据类型(所有的操作都是采用值传递)和引用数据类型(进行内存的数据操作,给的内存使用权)。

3.1.1、基本数据类型
Java 是强数据类型语言,变量必须先声明其类型再使用;
3.1.1.1、整数类型:byte、short、int、long;
整型数的三种形式 二进制、八进制、十六进制
- 二进制:使用
0b或0B开头,0-1 字符组成的整数 - 八进制: 使用
0开头 0-17字符组成的整数 - 十六进制:使用
0x或0X开头,0-9 字符组成的整数
package org.xiaojia;public class Main {public static void main(String[] args) {byte i1 = 0x11;byte i2 = 0X11;byte i3 = 0b11;byte i4 = 0B11;byte i5= 017;byte i6 = 111;}
}
byte数据类型通常用于网络数据传输、IO读取、编码转换上。int描述的是整型:long描述的长整型:用在文件大小描述、日期时间描述上。
3.1.1.2、浮点类型:float、double
- float:单精度浮点
- double:双精度浮点
3.1.1.3、布尔类型:boolean
boolean:The boolean data type has only two possible values: true and false. Use this data type for simple flags that track true/false conditions. This data type represents one bit of information, but its “size” isn’t something that’s precisely defined.
- boolean a=true;//这个a在JVM中占4个字节即:32位。
- boolean[] b = new boolean[10];//数组时,每一个boolean在JVM中占一个字节。
3.1.1.4、字符类型:char
主要用于描述字符的处理;
3.1.1.5、数据类型占用内存空间以及存储范围
| 类型 | 占用空间 | 表示的范围 |
|---|---|---|
| byte | 1 字节 | -128-127 |
| short | 2 字节 | -32768-32767 |
| int | 4 字节 | -2147483648-2147483647 |
| long | 8 字节 | -263-263-1 |
| float | 4 字节 | |
| double | 8 字节 | |
| char | 2 字节 | 0-65535 |
3.1.1.6、基本数据类型默认值
| 类型 | 默认值 |
|---|---|
| byte | 0 |
| short | 0 |
| int | 0 |
| long | 0L |
| float | 0.0f |
| double | 0.0d |
| char | ‘\u0000’ |
| boolean | false |
3.1.1.7、溢出和精度问题
3.1.1.7.1、溢出
所有的数据存储都是通过二进制形式来保存的,所有的数据保存都有其对应的上限和下限。如果数据存储的大小超过了上限了就溢出了。
package org.xiaojia;public class Main {public static void main(String[] args) {byte b = (byte) (127+1); // 这是强制类型转换 后面也会讲解到System.out.println(b);}
}
此时我们可以看到程序的输出结果 为 -128,因为 byte 的正数最大只有127 超过了 byte 的存储上限导致符号位变为了1,所以变成了负值。
3.1.1.7.2、精度问题
package org.xiaojia;public class Main {public static void main(String[] args) {System.out.println(0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1);}
}
此时我们可以看到输出结果为
0.9999999999999999
原因:
- 1、有些十进制浮点数转成二进制数时不能精确表示,有些浮点计算会得到准确的结果,因为某些计算的二进制与 十进制之间能够准确转换。
- 2、根据IEEE 754标准,浮点数在计算机内部存储时主要分为符号位(sign)、指数(exponent)部分、尾数(fraction)部分:
那么,这个数就是:(−1)sign×2exponent×fraction2 - 3、例如十进制的0.5可以表示成(−1)0×2−1×1.0 。
以32位的单精度浮点数(float)为例,它的符号位占一位(bit),指数部分占8位,尾数部分占23位。
以存储十进制的0.1为例,首先把0.1转换成二进制数。然而我们会发现十进制的0.1转换成二进制是一个无限循环小数:0.0001100110011001100…
可是,尾数只有23位,只能截取二进制小数的前23位存储。这时,误差就产生了。
当再次把这个浮点数转换成十进制数时,由于损失了一些二进制位,转换回来的十进制数自然也就与原来的不同了。
3.1.2、引用数据类型
默认值:null
3.1.2.1、字符串
在Java 之中使用使用 String 类来表示定义字符串。后面章节会详细讲解
3.1.2.2、数组
3.1.2.3、类(class)
使用 class 关键字来定义类。这一部分内容后续在面向对象在详细讲解
3.1.3、数据类型转换
3.1.2.4、接口(interface)
使用 interface 关键字来定义接口类。这一部分内容后续在面向对象在详细讲解
3.1.3、数据类型转换
3.1.3.1、自动数据类型转换
表数范围小的可以向表数范围大的进行自动类型转换,转换方向图如下所示。
3.1.3.2、强制数据类型转换
(数据类型)变量或表达式
注:
a.高精度向低精度类型转换的时候,有可能出现精度丢失
b.只能在继承层次内进行类型转换
c.在将超类转换成子类之前,应该使用instanceof进行检查
四、变量和与常量
变量和常量是在整个程序之中主要使用到的数据存储形式。
4.1、变量
所有可以修改的内容就是变量
4.2、常量
所有不可修改的内容就叫做常量
package org.xiaojia;public class Main { public static void main(String[] args) {// 这里的10 就是字面量常量 无法修改的System.out.println(10);}
}
五、Java的跨平台特性
5.1、java为什么可以跨平台?
java通过实现JVM(java Java Virtual Machine)来实现跨平台,不同平台用相同的JVM原理来实现,所以java编译的字节码可以运行在不同平台的。
5.2、64位与32位java虚拟机上同种数据类型所占内存大小是否一致?
因为JVM不同的平台用的是相同的原理,所以java同种数据类型所占内存大小在不同的平台上相同
总结
本章节,我们初步讲解程序的基本概念包括注释、标识、变量、常量、数据类型等。
