单枪匹马你别怕,一腔孤勇又如何,这一路你可以哭,但不能怂。                 请关注:源码猎人

目录

简介

标识符命名规则

类变量(静态变量)

实例变量

局部变量

变量数据类型

基本类型之间的转换

常见面试题


简介

Java变量分为类变量、实例变量、局部变量。在Java语言中,所有的变量在使用前必须声明。定义变量就是要告诉编译器这个变量的数据类型,这样编译器才知道需要分配多少空间给它,以及它能存放什么样的数据。在程序运行过程中空间的值是变化的,这个内存空间就成为变量。为了便于操作,给这个变量取个名字,称为变量名。

变量名必须遵循标识符命名规则。

标识符命名规则

应以字母、下划线、美元符开头,后跟字母、下划线、美元符或数字,Java标识符大小写敏感,长度无限制

  1. java中能用作标识符的有:26个英文字母(大、小写),数字,下划线,美元符号$,但是不能以数字开头。
  2. 类名首个字母必须大写,多个单词组成的,每个单词首字母都要大写。
  3. 方法名一般首个字母小写(构造方法例外),多个单词组成方法名,后面单词首字母大写。
  4. 变量命名规则同方法名名。

不能使用java中的关键字做标识符

类变量(静态变量)

  1. 类变量也称为静态变量,在类中以static关键字声明,但必须在方法构造方法和语句块之外
  2. 无论一个类创建了多少个对象,类只拥有类变量的一份拷贝
  3. 静态变量除了被声明为常量外很少使用。常量是指声明为public/private,final和static类型的变量。常量初始化后不可改变
  4. 静态变量储存在静态存储区。经常被声明为常量,很少单独使用static声明变量
  5. 静态变量在程序开始时创建,在程序结束时销毁
  6. 与实例变量具有相似的可见性。但为了对类的使用者可见,大多数静态变量声明为public类型
  7. 默认值和实例变量相似。数值型变量默认值是0,布尔型默认值是false,引用类型默认值是null。变量的值可以在声明的时候指定,也可以在构造方法中指定。此外,静态变量还可以在静态语句块中初始化
  8. 静态变量可以通过:ClassName.VariableName的方式访问
  9. 类变量被声明为public static final类型时,类变量名称必须使用大写字母。如果静态变量不是public和final类型,其命名方式与实例变量以及局部变量的命名方式一致

实例变量

  1. 实例变量声明在一个类中,但在方法、构造方法和语句块之外
  2. 当一个对象被实例化之后,每个实例变量的值就跟着确定
  3. 实例变量在对象创建的时候创建,在对象被销毁的时候销毁
  4. 实例变量的值应该至少被一个方法、构造方法或者语句块引用,使得外部能够通过这些方式获取实例变量信息
  5. 实例变量对于类中的方法、构造方法或者语句块是可见的。一般情况下应该把实例变量设为私有。通过使用访问修饰符可以使实例变量对子类可见
  6. 实例变量具有默认值。数值型变量的默认值是0,布尔型变量的默认值是false,引用类型变量的默认值是null。变量的值可以在声明时指定,也可以在构造方法中指定
  7. 实例变量可以直接通过变量名访问。但在静态方法以及其他类中,就应该使用对象引用访问

局部变量

  1. 局部变量声明在方法、构造方法或者语句块中
  2. 局部变量在方法、构造方法、或者语句块被执行的时候创建,当它们执行完成后,变量将会被销毁
  3. 访问修饰符不能用于局部变量
  4. 局部变量只在声明它的方法、构造方法或者语句块中可见
  5. 局部变量是在栈上分配的
  6. 局部变量没有默认值,所以局部变量被声明后,必须经过初始化,才可以使用

变量数据类型

在Java中,变量分为两种:基本类型的变量和引用类型的变量。

其中,8种基本数据类型是Java语言内嵌的,在任何操作系统中都具有相同大属性,而引用数据类型是在Jawa程序中由编程人员自己定义的变量类型。

1、变量整数类型

整数类型变量用来存储整数数值,即没有小数部分的值。在Java中,为了给不同大小范围内的整数合理地分配存储空间,整数类型分为4种不同的类型:字节型(byte)、短整型(short),整型(int)和长整型(long)

类型 位数 范围 默认值
byte 8位(有符号) -2^7 ~ 2^7 - 1 0
short 16位(有符号) -2^15 ~ 2^15 - 1 0
int 32位(有符号) -2^31 ~ 2^31 - 1 0
long 64位(有符号) -2^63 ~ 2^63 - 1 0L或0l

计算机内存的最小存储单元是字节(byte),一个字节就是一个8位二进制数,即8个bit。它的二进制表示范围从00000000~11111111,换算成十进制是0~255,换算成十六进制是00~ff。

2、变量浮点数类型

浮点数类型变量用来存储小数数值。在Java中,浮点数类型分为两种:单精度浮点数( float)和双精度浮点数( double)。 double型所表示的浮点数比 float型更精确,两种浮点数所占存储空间的大小以及取值范围如下图所示。

类型 位数 范围 默认值
float 32位(符合IEEE 754) 1.4E-45 ~ 3.4028235E38 0.0f
double 64 位(符合IEEE 754) 4.9E-324 ~ 1.7976931348623157E308 .0d

在Java中,一个小数会被默认为 double类型的值,因此在为一个float类型的变量赋值时需要注意一点,所赋值的后面一定要加上字母F(或者小写f),而为 double类型的变量赋值时,可以在所赋值的后面加上字符D(或小写d),也可以不加。

3、变量布尔类型

boolean类型只有两个值true和false,默认值是 false

boolean与是否为0没有任何关系,但是可以根据想要的逻辑进行转换

4、变量引用类型

引用数据类型非常多,大致包括:类、 接口类型、 数组类型、 枚举类型、 注解类型、 字符串型,简单来说,所有的非基本数据类型都是引用数据类型

只要是引用数据类型变量,其具体内容都是存放在堆中的,而栈中存放的是其具体内容所在内存的地址;在方法中定义的非全局基本数据类型变量,调用方法时作为参数是按数值传递的,而引用数据类型变量,调用方法时作为参数是按引用传递的

基本类型之间的转换

boolean类型与所有其他7种类型都不能进行转换。

在Java中,对于其他7中数值类型,它们之间都可以进行转换,但是可能会存在精度损失或者其他一些变化。转换分为自动转换和强制转换,对于自动转换(隐式)无需任何操作,而强制类型转换需要显式转换,即使用转换操作符(type)。

取值范围从小到大一次排序如下:

byte short=char int long float double

自动转换:

取值范围小的类型向取值范围大的类型转换时可以自动转换。

因为较大的类型(如int)要保存较小的类型(如byte),内存总是足够的,不需要强制转换。

int 可以直接赋值给 byte、short、char 等数据类型,而不需要强制转换,只要不超过该类型的表示范围都能自动转换。

在自动类型转化中,除了以下几种情况可能会导致精度损失以外,其他的转换都不能出现精度损失。

int--> float
long--> float
long--> double
float -->double

除了可能的精度损失外,自动转换不会出现任何运行时异常。

强制类型转换:

取值范围大的类型向取值范围小的类型转换时必须强制转换

强制转换采用转换操作符(type)。严格地说,将byte转为char不属于强制转换,因为从byte到char的过程其实是byte-->int-->char,所以widening和narrowing都有。强制转换除了可能的精度损失外,还可能使模(overall magnitude)发生变化。

在超范围强转时,需要对目标类型范围取余得到结果。

将浮点类型赋给整数类型的时候,会发生截尾(truncation)。也就是把小数的部分去掉,只留下整数部分。此时如果整数超出目标类型范围,一样将对目标类型的范围取余数。

基本数据类型转换规则:

  1. boolean类型与所有其他7种类型都不能进行转换
  2. 整数直接量可以直接赋值给byte、short、char,但不能超取值范围。
  3. byte、short、char型数据参与运算时,先一律转换为int再运算。

常见面试题

1、int强转byte时需要注意什么?

首先,int强转byte一定是发生在int值超过byte范围,这时需要int%byte取到结果。

例如:

byte number = (byte)257;

257超出了byte的[-128,127]的范围,所以将257除以byte的范围256(-128到127的范围)取余数得到1;

byte number = (byte)200;

需要注意的是,此时除了256取余数应该为-56,而不是200.

其他类型强转也是一样的道理

2、说一说常量和变量的区别?

常量指的是在程序运行期间不变的数据,而变量可以根据程序需要修改值。

常量定义格式为:

final 常量名 = 值或static final 数据类型 常量名 = 值

常量名一般全部大写,而变量一般使用驼峰格式。

聊聊你不知道的Java变量转型相关推荐

  1. Java数据类型及变量作业_day02、Java变量与数据类型

    02_Java变量与数据类型 第二章 变量与数据类型 变量 变量的概述 变量是指内存中的一个存储区域,该区域要有自己的名称(变量名).类型(数据类型),该区域的数据可以在同一数据类型的范围内不断变化值 ...

  2. 【JAVA基础知识总结】JAVA对象转型之上转型对象与下转型对象

    2019独角兽企业重金招聘Python工程师标准>>> JAVA对象转型分为两种:一种叫向下转型,而另一种是向上转型(父类对象的引用或者叫基类对象的引用指向子类对象,这就是向上转型) ...

  3. Java变量和运算符详解

    Java变量和运算符 已在思维导图中对变量知识框图进行整理! 使用markdown进行详细记录 分以下几点进行介绍: 变量基本原理 基本类型和引用类型变量 变量使用和注意事项 运算符 1. 变量基本原 ...

  4. NDK开发 - C/C++ 访问 Java 变量和方法

    上一篇有提到 JNI 访问引用数组,涉及了 C/C++ 访问 Java 实例的方法和变量.虽然在之前的开发中,并没有用到 C/C++ 范围 Java 层数据,但是这部分内容还是很有用的. 传送门:ND ...

  5. java 变量与常量_详解Java变量与常量

    一.常量 用final修饰(也称最终变量) 常量在声明时必须赋初值,赋值后不能再修改值 常量名通常用全大写字母表示 声明时需要添加final或static final类型修饰符,例如: private ...

  6. 【JVM】Java变量的种类(提高版)

    · Java变量按数据类型分,有:①基本数据类型:②引用数据类型: · Java变量按声明位置分,有:①成员变量:②局部变量: 见下图: 一.按数据类型分 1.1.基本数据类型 8种基本数据类型是Ja ...

  7. 怎么在js中取java变量的值

    通过<%=java变量%>的方式赋值给js变量. 1.定义一个java变量 <%String a = "222";//定义一个string类型的java变量 %& ...

  8. java不可变量有哪些_5.Java变量

    5.Java变量 所有的程序都使用变量临时存储各种数据, 在Java语言中变量必须在程序中被定义(或声明)后才能使用, 必须为每个变量确定一个具体类型.Java中变量分为基础类型变量和引用类型变量. ...

  9. 资深算法工程师万宫玺:Java工程师转型AI的秘密法宝——深度学习框架Deeplearning4j | 分享总结

    资深算法工程师万宫玺:Java工程师转型AI的秘密法宝--深度学习框架Deeplearning4j | 分享总结 本文作者:杨文 2018-01-02 11:03 导语:一文读懂深度学习框架Deepl ...

最新文章

  1. Eclipse 调试器(引用IT168)
  2. Facebook AI的多任务多模态的统一Transformer
  3. 超全 Python IDE 武器库大总结,优缺点一目了然!
  4. sketch如何做设计稿交互_做交互设计不可不知的十大原则
  5. Node.js和NoSQL开发比特币加密货币应用程序(下)
  6. 一张图看透JavaScript原型关系:__proto__(对象原型)和prototype(函数原型)
  7. java死循环_java小白关于while死循环时处理办法的一发求助帖
  8. MyBatis 插件原理与自定义插件-用代理模式我们就要解决几个问题
  9. New template: condition
  10. python基础之元组定义进阶操作、字典定义进阶操作
  11. Redis 服务器安装
  12. Hyper-V 3 限定虚拟机可用的CPU利用率
  13. Mac双系统中Windows无法使用苹果鼠标键盘等问题的解决方法
  14. 基于 Flink SQL CDC的实时数据同步方案
  15. Ubuntu上安装NS3(最详细的图文介绍)
  16. st计算机编程语言,初学ST语言,有了这篇ST编程语言的相关知识就容易多了~
  17. IllegalArgumentException :argument type mismatch
  18. 华为云空间联系人是不是机主_电脑上整理华为云空间联系人数据
  19. ISO26262解析(四)——FMEDA
  20. 关于向量的点积和叉乘

热门文章

  1. oracle读bfile,在fileopen时候ORA-22285报不存在
  2. oracle请求http接口
  3. 【数字图像处理】前期准备工作,库的安装(skimage库的安装!)
  4. 读jQuery 权威指南[5]-插件
  5. HCIA/HCIP使用eNSP模拟VRRP配置实验(接入层 汇聚层 核心层 VLAN OSPF VRRP STP DHCP的综合应用)
  6. python第六周项目华容道_华容道游戏(中)
  7. 数据集大小与模型性能的敏感性分析
  8. 安卓前端车牌识别技术
  9. AVI视频格式分析-封装格式
  10. avi文件格式详解(三)