哈喽,各位读者老爷们大家好呀,long time no see!这里是小堇Java小课堂,在本课堂中我们将继续分享Java中的数据类型与变量,标识符,关键字等知识,那我们启程咯!

在上一篇博客当中,System.out.println("hello world");语句不论程序何时运行,输出的都是"hello world",其实"hello world"就是所说的字面变量。
常量即程序运行期间,固定不变的量称为常量。看下列代码示例:
- public class Main{
- public static void main(String[] args){
- System.out.println("100");
- System.out.println("10.5");
- System.out.println("ok");
- System.out.println("true");
- }
- }
这里我们输出的这些结果都称为字面变量。
字面变量分型:
1.字符串常量:使用" "包含起来的一切内容
2.整形常量:没有小数点的数,包括负数
3.浮点数常量:带有小数点的数
4.布尔常量:true与false
5.字符常量:使用' '包含起来的单个字符
6.空常量:null
注意:字符串,整形,浮点型,字符型,布尔型在Java中都成为数据类型
在Java中数据类型分为两类:基本数据类型与引用数据类型
基本数据类型有四类八种:
1.四类:整形,浮点型,字符型以及布尔型。
2.八种:
| 数据类型 | 关键字 | 内存占用 | 范围 |
| 字节型 | byte | 1字节 | -128——-127 |
| 短整型 | short | 2字节 | -32768——32767 |
| 整形 | int | 4字节 | -2^31——2^31-1 |
| 长整形 | long | 8字节 | -2^63——2^63-1 |
| 单精度浮点数 | float | 4字节 | 范围不关注 |
| 双精度浮点数 | double | 8字节 | 范围不关注 |
| 字符型 | char | 2字节 | 0——65535 |
| 布尔型 | boolean | 未明确规定 | true和false |
注意:
1.不论是64位系统还是32位系统int都占用4个字节的大小,long都占用8个字节的大小
2.整形和浮点数都是带有符号的
3.整形默认是int型,浮点数默认为double
4.字符串属于引用数据类型,后面会单独出一篇博客讲解
在程序中除了那些不会改变的量之外,有一些量可能经常会改变,对于这些经常改变的内容,Java中称为变量,而数据类型就是用来定义不同种类的变量的。
数据类型 变量名 = 初始值
eg:
- public class Main {
- public static void main(String[] args) {
- int n = 10;
- int m=30.7;
- double a=10.3;
- byte b=9;
- short c=88;
- boolean d=true;
-
- }
- }
- public class Day13 {
- public static void main(String[] args) {
- //方式一:在定义时给定初值
- int a=10;
- System.out.println(a);
- //方式二:在定义时没有给初始值,但使用前必须设置初值
- int b;
- b=20;
- System.out.println(b);
- //int型能表示的最大范围表示:
- System.out.println(Integer.MIN_VALUE);
- System.out.println(Integer.MAX_VALUE);
- //注意:在定义数据时,不要定义一个超过int范围的值
- int c=100000000000000000000000000;//程序报错
- long d=10L;//long定义的长整形变量
- byte e=1;
- short f=10;
-
- }
- }
注意事项:
1.int不论在何种系统下都是四字节
2.推荐使用方式一来定义数据
3.在定义设置初值时不要超过了int范围
4.变量在使用前需要赋初值
5.int的包装类型为Integer6.长整形变量在使用时初值一般在末位加上'L'或'l'
7.long的包装类型是Long
8.short的包装类型是Short
9.byte的包装类型是Byte
- public class Main {
- public static void main(String[] args) {
- int a=1;
- int b=2;
- System.out.println(a/b);//0
-
- double c=1.0;
- double d=2.0;
- System.out.println(c/d);//0.5
-
- double num=1.1;
- System.out.println(num*num);//1.2100000000000002
-
- float e=1.0f;
- float f=2.3F;
- System.out.println(e+f);//3.3
- }
- }
注意事项:
1.double在任何系统下都占8个字节
2.浮点数与整数在内存中存储方式不同,不能单纯使用2^n来计算
3.double的包装类型为Double
4.double类型的内存分布遵守IEEE754标准,尝试使用有限的空间表示可能无限的小数,势必会存在一些误差,因此浮点数是一个近似值而不是精确值
5.float占用四个字节一般工程上使用到浮点数都优先使用double
6.float的包装类型为Float
- public class Main{
- public static void main(String[] args) {
- char c1='a';//小写字母
-
- char c2='A';//大写字母
-
- char c3='9';//数字
-
- char c4='帅';
- }
- }
注意事项:
1.Java中使用单引号加单个字母的形式表示字符字面值
2.计算机中的字符本质上是一个整数,C语言中使用ASCLL表示,在Java中使用Unicode表示字符,因此一个字符占用两个字节,字符类型也包括中文
3.char的包装类型为Character
在执行javac时可能会出现未结束的字符文字这一错误,我们在javac运行时加上-encoding UTF-8即可,javac-encoding UTF-8 Test.java。
布尔类型常量用来表示真假,在Java中有着很广泛的使用,其中true表示真,false表示假,这里需要与传统的C/C++区分开(在C/C++中非0为真,0为假)。
- public class Main {
- public static void main(String[] args) {
- boolean c=true;
- System.out.println(c);
- c=false;
- System.out.println(c);
- }
- }
注意事项:
1.boolean的取值只有两种,true表示真和false表示假
2.Java中的boolean类型不能与int类型相互转换,不能用数字形式表示真假
3.在Java虚拟机中未明确表示boolean有几个字节,在Oracle公司的虚拟机实现中,boolean占1个字节
4.boolean的包装类型为Boolean
Java作为一个强类型编程语言,当不同类型之间的变量互相赋值的时候,会有较为严格的校验。
- public class Main {
- public static void main(String[] args) {
- long a=10;
- int b=20;
- a=b;//可以通过编译
- b=a;//编译失败
- }
- }
自动类型转换:代码不需经过任何处理,在代码编译时,编译器会自动进行处理。
特点:数据范围小的数转化为数据范围大的数会自动进行。
- public class Main {
- public static void main(String[] args) {
- long a=10;
- int b=20;
- a=b;//可以通过编译,a的范围比b更大,编译时会将b的类型提升为long
- b=a;//编译失败
-
- double f=3.14;
- float f2=4.5F;
- f=f2;//可以通过编译,f的范围比f2更大,编译时会将f2的类型提升为double
- f2=f;//编译失败
-
- byte d=10;
- int e=20;
- e=d;//可以通过编译,e的范围比d更大,编译时会将d类型提升为int
- d=e;//编译失败
- }
- }
特点:数据范围大的到数据范围小的
- public class Main {
- public static void main(String[] args) {
- long a=10;
- int b=20;
- a=b;//可以通过编译,a的范围比b更大,编译时会将b的类型提升为long
- b=(int)a;// 强制转换a为int型
-
- double f=3.14;
- float f2=4.5F;
- f=f2;//可以通过编译,f的范围比f2更大,编译时会将f2的类型提升为double
- f2=(float) f;//强制转换f为float型
-
- byte d=10;
- int e=20;
- e=d;//可以通过编译,e的范围比d更大,编译时会将d类型提升为int
- d=(byte) e;//强制转换e为byte型
- }
- }
注意事项:
1.不同数字类型之间赋值,只能将数据范围小的类型隐式转换为数据范围较大的数据
2.如果将数据范围大的数赋值给小的需要强制类型转换,但可能发生极度丢失
3.将一个字面值常量进行赋值的时候,Java会主动针对数字范围进行检查
4.强制类型转换不一定成功,不相干的类型不能相互转换
不同数据类型之间进行相互运算,数据类型小的会被提升到数据类型大的。
1.int与long之间运算,int会被提升为long
- public class Main {
- public static void main(String[] args) {
- long a = 10;
- int b = 20;
- long c = a + b;//编译成功,b自动转换为long类型参与运算
- int d = a + b;//编译失败
- }
- }
2.byte与byte之间的运算
- public class Main {
- public static void main(String[] args) {
- byte a=10;
- byte b=20;
- byte c=a+b;//编译失败
- int d=a+b;//编译成功
- byte e=(byte)(a+b);//编译成功
- }
- }
原因:byte和byte虽然是同类型,但他们在进行运算的时候都会被默认提升为int类型,再进行计算,得到的结果也是int型,这时候使用byte来接受就会编译失败。
另外,short,byte在进行运算时都会被提升为int型
在Java中使用String类定义字符串类型,比如:
- public class Main {
- public static void main(String[] args) {
- String s1="hello";
- String s2="world";
- System.out.println(s1);
- System.out.println(s2);
- System.out.println(s1+s2);
- }
- }
4.1int转成String
- public class Main {
- public static void main(String[] args) {
- int num=10;
- //方法一:
- String s1=num+"";
- //方法二:
- String s2=String.valueOf(num);
- }
- }
4.2String转成int
- public class Main {
- public static void main(String[] args) {
- String s="100";
- int num=Integer.parseInt(s);
- }
- }
在Java中,标识符是用来标识变量、方法、类等程序元素的名称。标识符必须遵循以下规则:
只能包含字母、数字、下划线和美元符号:标识符可以由字母(大小写均可)、数字、下划线(_)和美元符号($)组成。标识符的第一个字符不能是数字。
不能以数字开头:标识符的第一个字符不能是数字。
不能是 Java 的保留关键字:不能使用Java的保留关键字(例如:public、class、static等)作为标识符。
区分大小写:Java是大小写敏感的语言,因此大写字母和小写字母被视为不同的标识符。
没有长度限制:Java标识符的长度理论上没有限制,但通常会有一些约定俗成的规范,比如一些编码规范建议标识符长度不要超过某个特定的字符数。
一些常见的命名约定包括:
使用良好命名的标识符可以使代码更易读、易懂,并且有助于减少错误和提高代码的可维护性。
在Java中,关键字是预定义的具有特殊含义的单词,它们被用于定义语法结构、控制程序流程以及实现特定功能。关键字在编程中有着特殊的作用,不能被用作标识符(例如变量名、方法名等)。
以下是Java中的一些主要关键字及其作用:
abstract: 用于定义抽象类和抽象方法。抽象类是不能被实例化的类,抽象方法是只有方法声明而没有实现的方法,需要在子类中实现。
assert: 用于在代码中插入断言,用于测试条件是否为真。在开发和调试阶段用于检查代码中的假设。
boolean: 用于定义布尔类型,表示逻辑上的真或假。
break: 用于在循环语句(如for、while、do-while)和switch语句中跳出当前循环或者switch语句。
byte, short, int, long: 用于定义整数类型的数据。分别表示不同范围的整数。
case, default: 用于在switch语句中定义分支条件。
catch, finally: 用于异常处理,catch用于捕获异常并处理,finally用于无论是否发生异常都会执行的代码块。
char: 用于定义字符类型的数据。
class: 用于定义类。
const(已废弃): 用于定义常量。在Java 1.0版本中引入,但从Java 1.1开始被废弃。
continue: 用于跳过循环中的剩余代码,并继续下一次循环的执行。
default: 用于switch语句中的默认分支。
do, while: 用于实现do-while循环。
double, float: 用于定义浮点数类型的数据。
else, if: 用于在条件语句中定义分支。
enum: 用于定义枚举类型。
extends, implements: 用于类的继承和接口的实现。
final: 用于声明常量、类的最终实现或者方法的最终实现。
finally: 用于异常处理中的最终执行代码块。
float: 用于定义单精度浮点数类型的数据。
for: 用于实现for循环。
goto(不建议使用): 用于跳转到代码中的标签处。在Java中不推荐使用。
if: 用于实现条件判断。
implements: 用于实现接口。
import: 用于导入其他包中的类或者整个包。
instanceof: 用于判断一个对象是否是指定类的实例。
int: 用于定义整数类型的数据。
interface: 用于定义接口。
long: 用于定义长整型数据。
native(不常用): 用于标识方法的实现是由本地代码(如C或C++)实现的。
new: 用于创建对象或者数组。
package: 用于定义包。
private, protected, public: 用于定义访问权限。
return: 用于从方法中返回值。
short: 用于定义短整型数据。
static: 用于定义静态成员,静态方法,静态代码块。
strictfp: 用于确保浮点运算的结果在不同平台上保持一致。
super: 用于引用父类的成员。
switch: 用于实现多分支选择结构。
synchronized: 用于实现同步代码块或者方法,确保在多线程环境中的线程安全。
this: 用于引用当前对象。
throw: 用于抛出异常。
throws: 用于声明方法可能抛出的异常。
transient: 用于修饰不希望被序列化的成员变量。
try: 用于定义可能发生异常的代码块。
void: 用于定义方法的返回类型,表示该方法不返回任何值。
volatile: 用于标识变量可能会被多个线程同时访问,确保线程安全。
while: 用于实现while循环。
这些是Java中的一些关键字,它们具有特殊的语法含义,对于构建Java程序来说是必不可少的。