3.变量

本文介绍了Java中的变量概念、使用方法和注意事项。详细阐述了变量的声明、赋值和不同数据类型,包括整型(byte, short, int, long)、浮点型(float, double)、字符型(char)和布尔型(boolean)。讨论了变量的存储和作用域,强调了变量的声明必须先于使用,并解释了自动类型转换和强制类型转换的规则。" 133150485,19694686,Python装饰器实现运行时安全检测,"['Python', '开发语言', '安全']

概念

我们的程序要被运行,一定被加载到内存中,不同的数据类型,会放在JVM机的不同空间,当程序运行时会通过变量名称来访问数据.变量相当于内存中一个数据存储空间的表示,你可以把变量看做是一个房间的门牌号,通过门牌号我们可以找到房间,而通过变量名可以访问到变量(值)。

1 变量的使用

  1. 声明变量
    int num1; // 声明
    int a; //这就是声明了一个变量,变量名是a
    float num1;// 这也声明了一个变量,表示一个float类型的小数,变量名是num1
  2. 赋值
    num1 = 30; //赋值
    在声明变量的时候,就给值。
    int a=45;//这就是初始化变量a
    注意: 对于局部变量(在方法中定义的变量,需要初始化后,才能使用)
  3. 使用
    System.out.println(“num1=” + num1) // 使用
  4. 注意:变量的声明和赋值,可以一句话 int num1 = 30;

2 变量使用注意事项

  1. 变量表示内存中的一个存储区域(不同的数据类型,占用的空间大小[字节]不一样)
  2. 该区域有自己的名称(变量名)和类型(数据类型)
  3. 变量必须先声明,后使用
  4. 该区域的数据可以在同一类型范围内不断变化
  5. 变量在同一个作用域内不能重名
  6. 变量=变量名+值+数据类型 (这就是变量的三要素),这一点请大家注意。

3 变量的类型

变量主要分两个大类:基本数据类型和应用数据类型.
基本数据类型有8个, 数值型[byte(1个字节), shor(2个字节),int(4个字节),long(8个字节) ],浮点数[小数, float (单精度度 4个字节), double(双精度 8个字节), float的表示的范围和精度小于double的]. char (2个字节, ‘大’ , ‘\t’) , 布尔类型( 在java中, 布尔类型只有两个值 true, false)
在java中,String 类型不是基本类型
引用类型 [类, 接口,数组等等]

如下图:
在这里插入图片描述

4整型类型

在这里插入图片描述
byte 3 和 short 3 的存储形式
在这里插入图片描述

整型使用细节

  1. Java各整数类型有固定的表数范围和字段长度,不受具体OS[操作系统]的影响,以保证java程序的可移植性。

  2. Java的整型常量(字面量, 1 ,45, 90)默认为 int 型,声明long型常量须后加‘l’或‘L’

  3. java程序中变量常声明为int型,除非不足以表示大数,才使用long

  4. bit: 计算机中的最小存储单位。byte:计算机中基本存储单元。[二进制再详细说,简单举例一个 byte 3 和 short 3 ]

5 浮点类型

Java的浮点类型可以表示一个小数,比如 123.4 ,7.8 ,0.12等等
在这里插入图片描述

  1. 浮点数在存放的形式为 符号位+指数位+尾数位
  2. 浮点数都是近似值,因此会有精度损失
  3. 如果希望精度较高,则选择使用double

使用细节

  1. 与整数类型类似,Java 浮点类型也有固定的表数范围和字段长度,不受具体OS的影响。
  2. Java 的浮点型常量默认为double型,声明float型常量,须后加‘f’或‘F’。
  3. 浮点型常量有两种表示形式
    十进制数形式:如:5.12 512.0f .512 (必须有小数点)
    科学计数法形式:如:5.12e2 [5.12 * 10^2 512 5.12E-2 [5.12/10^2 = 0.0512]
    通常情况下,应该使用double型,因为它比float型更精确。

6 字符类型

字符类型可以表示单个字符,字符类型是char,char是两个字节(可以存放汉字),多个字符我们成为字符串,在java中String这种,数据类型表示,但是String不是基本数据类型,而是类,类是复合数据类型[关于类我们后面详细讲解.

字符型数据在计算机中存储的是字符的ASCII 码值
字符型 存储到 计算机中,需要将字符对应的码值(整数)找出来
存储:字符’a’——>码值 (97)——>二进制 (1100001)——>存储()
读取:二进制(1100001)——>码值(97)——> 字符’a’——>读取(显示)

下面的是ASCII 码表:

字符类型使用细节

  1. 字符常量是用单引号(‘ ’)括起来的单个字符。例如:char c1 = ‘a’; char c2 = ‘中’; char c3 = ‘9’;
  2. Java中还允许使用转义字符‘\’来将其后的字符转变为特殊字符型常量。例如:char c3 = ‘\n’; // '\n’表示换行符
  3. 在java中,char的本质是一个整数,在输出时,是unicode码对应的字符。
    4)可以直接给char赋一个整数,然后输出时,会按照对应的unicode 字符输出 [’\u0061’ 97]
  4. char类型是可以进行运算的,相当于一个整数,因为它都对应有Unicode码.

7 布尔类型:boolean

基本介绍

布尔类型也叫boolean类型,booolean类型数据只允许取值true和false,无null
boolean类型占1个字节。
boolean 类型适于逻辑运算,一般用于程序流程控制:
1)if条件控制语句;
2)while循环控制语句;
3)do-while循环控制语句;
4)for循环控制语句
在java中boolean类型只能是true或者false ,没有其他取值.

8 基本数据类型转换

自动类型转换

当java程序在进行赋值或者运算时,精度小的类型自动转换为精度大的数据类型,这个就是自动类型转换。
自动转换表:
在这里插入图片描述

  1. 基本数据类型的转换分为两条线. 如上图.
  2. 精度小的(范围小)的可以自动的向精度大(范围大) 转换.
  3. char 和 (byte,short) 不发生自动转换
  4. boolean不参与类型的自动转换

细节说明

  1. 有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那种数据类型,然后再进行计算。
  2. 当我们把精度(容量)大 的数据类型赋值给精度(容量)小 的数据类型时,就会报错,反之就会进行自动类型转换。
  3. (byte, short) 和 char之间不会相互自动转换。
  4. byte,short,char 他们三者可以计算,在计算时首先转换为int类型。
  5. boolean 不参与转换
  6. 自动提升原则: 表达式结果的类型自动提升为 操作数中最大的类型
public class TypeAutoConvertDemo {
	public static void main(String[] args) { //输入快捷键 ctrl + ], 能定位对应的}
		char c1 = 'a';
		int num1 = c1;//OK char -> int
		long num2 = c1; //ok char -> long

		int num3 = 1;
		//int num4 = num3 + 1.1f; //错误 float -> int
		//double num4 = num3 + 1.1f; //float -> double
		//float num4 = num3 + 1.1f + 1.0; //错误 double -> float

		//(byte, short) 和 char之间不会相互自动转换

		byte b1 = 2;
		short s1 = b1; //ok byte->short
		//char c2 = b1; //错误, byte->char
		//char c3 = s1; // short -> char

		//byte,short,char  他们三者可以计算,在计算时首先转换为int类型

		byte b2 = 1;
		short s2 = 1;
		short s3 = b2 + s2; //错误 int -> short

	}
}

强制类型转换

自动类型转换的逆过程,将容量大的数据类型转换为容量小的数据类型。使用时要加上强制转换符 ( ),但可能造成精度降低或溢出,格外要注意。

  1. 当进行数据的大小从 大——>小,就需要使用到强制转换
  2. 强转符号只针对于最近的操作数有效,往往会使用小括号提升优先级
  3. char类型可以保存 int的常量值,但不能保存int的变量值,需要强转
  4. byte和short类型在进行运算时,当做int类型处理。
public class TypeForceConvertDemo {
	public static void main(String[] args) { //输入快捷键 ctrl + ], 能定位对应的}
		
		int num1 = (int)1.99; //强制 double -> int 赋给 num1
		System.out.println("num1=" + num1); //1, 会直接将小数部分拿掉
		

		int num2 = 11100;
		byte b1 = (byte)num2; // -128 --- 127
		System.out.println("b1=" + b1); 

		//强转符号只针对于最近的操作数有效,往往会使用小括号提升优先级

		int num3 = (int)(10 * 3.5 + 6 * 1.5); // 先计算 double -> 转成 int -> 赋给 num3
		System.out.println("num3=" + num3); 

		//当把一个常量值 , 赋给一个变量时,编译器先判断数据的范围是否超过char的范围
		//,如果没有超过,则接受, 如果超过,则报错
		
		char c1 = 1; // int -> char[为什么可以]
		int num4 = 1;

		//如果把一个变量赋给另外一个变量,则直接判断精度大小
		//char c2 = num4; //int -> char [不可以]
		char c3 = (char)num4; //int -> char -> 再赋给char [可以]

		//强调:当我们进行强制转换时,这个结果是强制转换后的类型,但是并不影响被强制转换的变量的类型
		char c4 = (char)num4; // num4仍然是int
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值