Java中的数据类型与变量

引言:

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

数据类型与变量

1.字面变量

在上一篇博客当中,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中都成为数据类型

2.数据类型

在Java中数据类型分为两类:基本数据类型与引用数据类型

基本数据类型有四类八种:

1.四类:整形,浮点型,字符型以及布尔型。

2.八种:

数据类型关键字内存占用范围
字节型byte1字节-128——-127
短整型short2字节-32768——32767
整形int4字节-2^31——2^31-1
长整形long8字节-2^63——2^63-1
单精度浮点数float4字节范围不关注
双精度浮点数double8字节范围不关注
字符型char2字节0——65535
布尔型boolean未明确规定true和false

 注意:

1.不论是64位系统还是32位系统int都占用4个字节的大小,long都占用8个字节的大小

2.整形和浮点数都是带有符号的

3.整形默认是int型,浮点数默认为double

4.字符串属于引用数据类型,后面会单独出一篇博客讲解

3.变量

3.1变量概念

在程序中除了那些不会改变的量之外,有一些量可能经常会改变,对于这些经常改变的内容,Java中称为变量,而数据类型就是用来定义不同种类的变量的。

3.2语法格式

数据类型 变量名 = 初始值 

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;}
}

3.3整形变量

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的包装类型为Integer

6.长整形变量在使用时初值一般在末位加上'L'或'l'

7.long的包装类型是Long

8.short的包装类型是Short

9.byte的包装类型是Byte

 3.4浮点数变量

public class Main {public static void main(String[] args) {int a=1;int b=2;System.out.println(a/b);//0double c=1.0;double d=2.0;System.out.println(c/d);//0.5double num=1.1;System.out.println(num*num);//1.2100000000000002float 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

 3.5字符型变量

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。 

3.6布尔型变量

布尔类型常量用来表示真假,在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

3.7类型转换

Java作为一个强类型编程语言,当不同类型之间的变量互相赋值的时候,会有较为严格的校验。

public class Main {public static void main(String[] args) {long a=10;int b=20;a=b;//可以通过编译b=a;//编译失败}
}
3.7.1自动类型转换(隐式转换)

自动类型转换:代码不需经过任何处理,在代码编译时,编译器会自动进行处理。

特点:数据范围小的数转化为数据范围大的数会自动进行。 

public class Main {public static void main(String[] args) {long a=10;int b=20;a=b;//可以通过编译,a的范围比b更大,编译时会将b的类型提升为longb=a;//编译失败double f=3.14;float f2=4.5F;f=f2;//可以通过编译,f的范围比f2更大,编译时会将f2的类型提升为doublef2=f;//编译失败byte d=10;int e=20;e=d;//可以通过编译,e的范围比d更大,编译时会将d类型提升为intd=e;//编译失败    }
}
3.7.2强制类型转换(显示转换)
强制类型转换:当进行操作时,代码需要经过一定的格式处理,不能自动完成。

特点:数据范围大的到数据范围小的 

public class Main {public static void main(String[] args) {long a=10;int b=20;a=b;//可以通过编译,a的范围比b更大,编译时会将b的类型提升为longb=(int)a;// 强制转换a为int型double f=3.14;float f2=4.5F;f=f2;//可以通过编译,f的范围比f2更大,编译时会将f2的类型提升为doublef2=(float) f;//强制转换f为float型byte d=10;int e=20;e=d;//可以通过编译,e的范围比d更大,编译时会将d类型提升为intd=(byte) e;//强制转换e为byte型}
}

注意事项:

1.不同数字类型之间赋值,只能将数据范围小的类型隐式转换为数据范围较大的数据

2.如果将数据范围大的数赋值给小的需要强制类型转换,但可能发生极度丢失

3.将一个字面值常量进行赋值的时候,Java会主动针对数字范围进行检查

4.强制类型转换不一定成功,不相干的类型不能相互转换 

3.8类型提升

不同数据类型之间进行相互运算,数据类型小的会被提升到数据类型大的。

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型

4.字符串类型

在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);}
}

5.标识符·

在Java中,标识符是用来标识变量、方法、类等程序元素的名称。标识符必须遵循以下规则:

  1. 只能包含字母、数字、下划线和美元符号:标识符可以由字母(大小写均可)、数字、下划线(_)和美元符号($)组成。标识符的第一个字符不能是数字。

  2. 不能以数字开头:标识符的第一个字符不能是数字。

  3. 不能是 Java 的保留关键字:不能使用Java的保留关键字(例如:public、class、static等)作为标识符。

  4. 区分大小写:Java是大小写敏感的语言,因此大写字母和小写字母被视为不同的标识符。

  5. 没有长度限制:Java标识符的长度理论上没有限制,但通常会有一些约定俗成的规范,比如一些编码规范建议标识符长度不要超过某个特定的字符数。

一些常见的命名约定包括:

  • 使用有意义的名称:标识符应该能够清晰地表达其所代表的含义,使得代码易于理解和维护。
  • 遵循驼峰命名法:在驼峰命名法中,除了第一个单词外,其余单词的首字母大写,例如:myVariable、calculateTotal。
  • 类名通常以大写字母开头,方法和变量名通常以小写字母开头,常量名通常全部大写。

使用良好命名的标识符可以使代码更易读、易懂,并且有助于减少错误和提高代码的可维护性。

6.关键字

在Java中,关键字是预定义的具有特殊含义的单词,它们被用于定义语法结构、控制程序流程以及实现特定功能。关键字在编程中有着特殊的作用,不能被用作标识符(例如变量名、方法名等)。

以下是Java中的一些主要关键字及其作用:

  1. abstract: 用于定义抽象类和抽象方法。抽象类是不能被实例化的类,抽象方法是只有方法声明而没有实现的方法,需要在子类中实现。

  2. assert: 用于在代码中插入断言,用于测试条件是否为真。在开发和调试阶段用于检查代码中的假设。

  3. boolean: 用于定义布尔类型,表示逻辑上的真或假。

  4. break: 用于在循环语句(如for、while、do-while)和switch语句中跳出当前循环或者switch语句。

  5. byte, short, int, long: 用于定义整数类型的数据。分别表示不同范围的整数。

  6. case, default: 用于在switch语句中定义分支条件。

  7. catch, finally: 用于异常处理,catch用于捕获异常并处理,finally用于无论是否发生异常都会执行的代码块。

  8. char: 用于定义字符类型的数据。

  9. class: 用于定义类。

  10. const(已废弃): 用于定义常量。在Java 1.0版本中引入,但从Java 1.1开始被废弃。

  11. continue: 用于跳过循环中的剩余代码,并继续下一次循环的执行。

  12. default: 用于switch语句中的默认分支。

  13. do, while: 用于实现do-while循环。

  14. double, float: 用于定义浮点数类型的数据。

  15. else, if: 用于在条件语句中定义分支。

  16. enum: 用于定义枚举类型。

  17. extends, implements: 用于类的继承和接口的实现。

  18. final: 用于声明常量、类的最终实现或者方法的最终实现。

  19. finally: 用于异常处理中的最终执行代码块。

  20. float: 用于定义单精度浮点数类型的数据。

  21. for: 用于实现for循环。

  22. goto(不建议使用): 用于跳转到代码中的标签处。在Java中不推荐使用。

  23. if: 用于实现条件判断。

  24. implements: 用于实现接口。

  25. import: 用于导入其他包中的类或者整个包。

  26. instanceof: 用于判断一个对象是否是指定类的实例。

  27. int: 用于定义整数类型的数据。

  28. interface: 用于定义接口。

  29. long: 用于定义长整型数据。

  30. native(不常用): 用于标识方法的实现是由本地代码(如C或C++)实现的。

  31. new: 用于创建对象或者数组。

  32. package: 用于定义包。

  33. private, protected, public: 用于定义访问权限。

  34. return: 用于从方法中返回值。

  35. short: 用于定义短整型数据。

  36. static: 用于定义静态成员,静态方法,静态代码块。

  37. strictfp: 用于确保浮点运算的结果在不同平台上保持一致。

  38. super: 用于引用父类的成员。

  39. switch: 用于实现多分支选择结构。

  40. synchronized: 用于实现同步代码块或者方法,确保在多线程环境中的线程安全。

  41. this: 用于引用当前对象。

  42. throw: 用于抛出异常。

  43. throws: 用于声明方法可能抛出的异常。

  44. transient: 用于修饰不希望被序列化的成员变量。

  45. try: 用于定义可能发生异常的代码块。

  46. void: 用于定义方法的返回类型,表示该方法不返回任何值。

  47. volatile: 用于标识变量可能会被多个线程同时访问,确保线程安全。

  48. while: 用于实现while循环。

这些是Java中的一些关键字,它们具有特殊的语法含义,对于构建Java程序来说是必不可少的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/13013.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

红蓝对抗 网络安全 网络安全红蓝对抗演练

什么是红蓝对抗 在军事领域,演习是专指军队进行大规模的实兵演习,演习中通常分为红军、蓝军,演习多以红军守、蓝军进攻为主。类似于军事领域的红蓝军对抗,网络安全中,红蓝军对抗则是一方扮演黑客(蓝军&…

pytest教程-46-钩子函数-pytest_sessionstart

领取资料,咨询答疑,请➕wei: June__Go 上一小节我们学习了pytest_report_testitemFinished钩子函数的使用方法,本小节我们讲解一下pytest_sessionstart钩子函数的使用方法。 pytest_sessionstart 是 Pytest 提供的一个钩子函数&#xff0c…

Anaconda下载安装

看到这篇文章的同学们,说明你们是要下载Anaconda,这篇文章讲的就是下载安装教程。 Anaconda下载网址: Download Now | Anaconda 根据我们需要的系统版本下载,我的电脑是window,所以选择第一个,如下图&am…

javaEE进阶——SpringBoot与SpringMVC第一讲

文章目录 什么是springMVCSpringMVC什么是模型、视图、控制器MVC和SpringMVC的关系SpringMVC的使用第一个SpringMVC程序RestController什么是注解 那么RestController到底是干嘛的呢?RequestMapping 如何接收来自请求中的querystryingRequestParamRequestMapping(&q…

运用MongoDB Atlas释放开发者潜能同时把控成本

在当下的商业环境中,不可预测性已经成为常态,工程团队负责人必须在把控不可预测性和优化IT成本的双重挑战下谋求平衡。 咨询公司德勤2024 MarginPLUS调查收集了300多位企业负责人的见解,报告中重点介绍了面对动荡的全球经济环境,…

电子邮箱是什么?付费电子邮箱和免费电子邮箱有什么区别?

注册电子邮箱前,有付费电子邮箱和免费电子邮箱两类选择。付费的电子邮箱和免费的电子邮箱有什么区别呢?区别主要在于存储空间、功能丰富度和售后服务等方面,本文将为您详细介绍。 一、电子邮箱是什么? 电子邮箱就是线上的邮局&a…

labelimg删除用不到的标签(yolo格式)以及 下载使用

问题:当我们标注完成新的类别后后直接删除classes.txt中不需要的类别之后再次打开labelimg会闪退,如何删除不需要的标签并且能够正确运行呢?(yolo格式) 原因:当我们打开labelimg进行标注的时候&#xff0c…

LVM - Linux磁盘逻辑卷管理器概念讲解、实践及所遇到的问题

1、lvm概念 逻辑卷管理器(LogicalVolumeManager)本质上是一个虚拟设备驱动,是在内核中块设备和物理设备之间添加的一个新的抽象层次,它可以将几块磁盘(物理卷,PhysicalVolume)组合起来形成一个存储池或者卷组(VolumeGroup)。LVM可以每次从卷组中划分出不同大小的逻辑卷(Logi…

【C语言】必备Linux命令和C语言基础

🌟博主主页:我是一只海绵派大星 📚专栏分类:嵌入式笔记 ❤️感谢大家点赞👍收藏⭐评论✍️ 目录 一、文件和目录相关命令 Linux 的文件系统结构 文件系统层次结构标准FHS pwd命令 ls 列目录内容 文件的权限 c…

STC8增强型单片机开发【热敏电阻】

目录 一、引言 二、热敏电阻概述 三、STC8增强型单片机简介 四、基于STC8单片机的热敏电阻测温系统 五、热敏电阻测温系统的优化与扩展 提高测量精度 扩展系统功能 六、 温度计算步骤 通过ADC采样计算出热敏电阻位置的电压 通过欧姆定律计算热敏电阻的阻值 通过阻值…

栈和队列经典面试题详解

目录 题目一:20. 有效的括号 - 力扣(LeetCode) 题目二:225. 用队列实现栈 - 力扣(LeetCode) 题目三:232. 用栈实现队列 - 力扣(LeetCode) 题目四:622. 设…

软件压力测试怎么做

随着信息技术的迅猛发展,软件在各行各业的应用越来越广泛,其稳定性、可靠性和性能表现也受到了越来越多的关注。在这样的背景下,软件压力测试显得尤为重要。本文将详细介绍软件压力测试的概念、目的、方法以及实施步骤,帮助读者更…

浅析扩散模型与图像生成【应用篇】(二十五)——Plug-and-Play

25. Plug-and-Play: Diffusion Features for Text-Driven Image-to-Image Translation 该文提出一种文本驱动的图像转换方法,输入一张图像和一个目标文本描述,按照文本描述对输入图像进行转换,得到目标图像。图像转换任务其实本质上属于图像编…

对于接口的安全性测试,这几点你掌握了吗?

接口防刷 1.为什么会有人要刷接口? 牟利:黄牛在 12306 网上抢票再倒卖。 恶意攻击竞争对手:如短信接口被请求一次,会触发几分钱的运营商费用,当量级大了也很可观。 压测:用apache bench 做压力测试。 …

管仲故乡是颍川,何分颍上或颍下

第一仲父管仲,故乡在哪里?依然像许多名人故里一样存在争议,但是这个争议却很不一般,引出了一个大话题。 管子是安徽颍上县人,《史记》记载: “管仲,颍上人也。”颍上县有管鲍祠,是安徽省重点文物…

亚阈值电流镜

相同电流情况下,由于亚阈值区的gm较大,造成由于阈值电压Vth的失配造成的失配会更大,所以要规避过大的gm,选取较大的过驱动电压。 相同电流情况下,W/L的尺寸选的较小一点,或者说L一定时,W不要取得过大。 Q:Vgs一定的情况下,特别小,几乎小于Vth,一定是亚阈值电流镜吗。…

单位内部防泄密策略与技术实践

在信息时代,企业内部数据安全至关重要,尤其是涉及核心竞争力的重要文件,员工的不当操作或恶意泄露都可能给企业带来重大损失。本文将从制度建设、技术防护、以及日常管理三个方面入手,探讨如何构建一套行之有效的内部防泄密体系&a…

yolov8使用与训练步骤

第一:安装miniconda 网址:Index of /anaconda/miniconda/ 登录网址后 在网页按ctrF 输入:搜py38 Miniconda3-py38_22.11.1-1-Windows-x86_64.exe 52.5 MiB 2022-12-23 07:57 下载进行安装 安装过程中记得加环境变量这个项。 第二…

独家|暴雨推出基于国产X86芯片的四路服务器

伴随着智慧计算时代的到来和企业数字化转型的深入,人工智能、大数据、虚拟化等创新技术在应用普及的过程中,也在不断地细分和深化,使得企业的业务系统日趋复杂,数据量、数据类型更加庞大,对计算平台的性能要求“水涨船…

【强化学习】DQN类算法的一些理解

一、DQN算法为什么要使用两个网络? DQN算法通常包含两个网络:一个是评估网络training_network,另一个是目标网络target_network。这两个网络的结构和初始权重是相同的,但它们的权重是不同步更新的。使用两个网络的原因是为了稳定…