常量
常量的概述和使用
常量——在程序的执行过程中其值不发生改变的量。
-
Java中常量的分类
(1):字面值常量
(2):自定义常量(面向对象部分讲解) -
字面值常量的分类
(1): 字符串常量 用双引号括起来的内容 “HelloWorld” ,“Hello”
(2): 整数常量 所有整数 12,23
(3): 小数常量 所有小数 12.34,56.78
(4): 字符常量 用单引号括起来的内容 ‘a’,‘A’,‘0’ (注意事项:单引号中只能是单个字母,单个数字,单个符号)
(5): 布尔常量 较为特有,只有true和false
(6): 空常量 null(数组部分讲解) -
Java针对整数常量提供了4种表现形式(例;输出不同进制表现10的数据)
二进制:由0,1组成 以0b开头 (0b10)
八进制:由0,1,…7组成 以0b开头 (010)
十进制:由0,1,…9组成 整数默认是十进制的 (10)
十六进制:由0,1,…9,a,b,c,d,e,f(大小写均可) 以0x开头 (0x10)
//JDK1.7之后,通过前缀区分不同进制的数据
System.out.println(0b100);//二进制 以0b开头
System.out.println(0100);//八进制 以0b开头
System.out.println(100);//十进制 整数默认是十进制的
System.out.println(0x100);//十六进制 以0x开头
- 任意进制到十进制的转换——位权展开法
- 十进制到任意进制的转换——除基取余 直到商为0 余数反转 ;十进制到X进制这个基就是X
- 快速的进制转换法
有符号数据表示法
(理解计算机底层如何做运算——所有数据的运算都是采用补码进行的)
有符号数据表示法的几种方式:
- 原码
就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。 - 反码
正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。 - 补码
正数的补码与其原码相同;负数的补码是在其反码的末位加1。
变量
变量的概述
-
变量——在程序执行的过程中,在某个范围内其值可以发生改变的量(例如:苹果的价钱)
变量其实是内存中的一小块区域 -
变量——用来不断的存放同一类型的常量,并可以重复使用
变量定义格式——数据类型 变量名 = 变量值 -
数据类型——变量其实就是内存中的一小块区域。我们定义一个变量,其实就是开辟了一个内存空间。
java给我们提供了不同的数据类型,针对不同的数据类型,在内存中分配了不同大小的内存空间。 -
Java中数据类型的分类
(1): 基本数据类型
(2): 引用数据类型(后面讲解): 数组 , 类 , 接口 -
基本数据类
(1): 数值型
整数型 字节数 范围
byte 1(8bit) -128 ~ 127
short 2(16bit) -2^15 ~ 2^15 - 1
int 4(32bit) -2^31 ~ 2^31 - 1
long 8(64bit) -2^63 ~ 2^63 - 1
浮点数
float 4(32bit) -3.403*10^38 ~ 3.403*10^38
double 8(64bit) -1.798*10^308 ~ 1.798*10^308
(2): 字符型 char 2(16bit) 0 ~ 2^16 - 1 = 65535
(3): 布尔型 boolean 1
整数默认是int类型的 , 浮点数默认是 double类型的
long(值后加后缀L:long num2=1000L)
float(值后加后缀F:float f=3.14F)
char(值用单引号引起来 只能是一个字符:char ch=‘A’)
boolean(boolean flag=true;boolean flag2=false)
//定义不同类型的变量并且输出
//定义变量的格式:数据类型 变量名=值
//变量名的命名规范:通用规范 变量名一般小写 多个单词 首字母小写 name username userName
byte a=1;
a=20; //重新给变量赋值
byte c=127;
int num=10000;
long num2=1000L;//定义long类型的变量的时候,注意值得后面加上一个后缀L 表示这是一个long类型值
float f=3.14F;//定义float类型时,值得后面加上后缀F 表示这是一个float类型得值,不加语法报错
double d=3.14;
char ch='A'; //char 类型得值,要用单引号 引起来,只能是一个字符
boolean flag=true;
boolean flag2=false;
//通过变量名,输出该变量得值
System.out.println(a);
System.out.println(c);
System.out.println(s);
System.out.println(num);
System.out.println(num2);
System.out.println(f);
System.out.println(d);
System.out.println(ch);
System.out.println(flag);
System.out.println(flag2);
-
使用变量的注意事项
a:作用域问题
变量定义在哪一级大括号中,哪个大括号的范围就是这个变量的作用域。
相同的作用域中不能定义两个同名变量。
b:初始化值问题
没有初始化值不能直接使用
c:在一行上建议只定义一个变量
可以定义多个,但是不建议 -
Java语言中的字符char可以存储一个中文汉字:Java语言采用的是Unicode编码。
Unicode编码中的每个字符占用两个字节。所以,Java中的字符可以存储一个中文汉字。
//定义变量得一些注意事项 //作用域:域,范围 一对{} 所括起来得这对范围,我们称之为作用域
//1.在同一个作用域 里面不能定义两个同名变量
int a=100;
a=200; //重新赋值
//2.变量必须赋值才能使用
int b;
b=10;
//3.在一行上建议只定义一个变量
int e;
int f;
e=20;
f=20;
byte by=1;
byte by2=2;
//Unicode码——国际标准 汉字编码方式都遵守这个国际标准
//char类型两个字节; GBK编码一个汉字占两个字节; UTF-8编码一个汉字占三个字节
char ch='你'; //GBK
byte a=1;
char ch='a';
int r=a+ch;//r为98 //ASCII码表中 'a'对应97 1+97为98
//ASCII 值 'a' 97 'b' 98 'A' 65 '0' 48 '1' 49
数据类型转换之隐式转换
在运算中自动转换数据类型
(1): boolean类型不能转换为其他的数据类型
(2): byte,short,char —int— long—float—double
只有byte、short、char数据类型进行运算时,数据类型将自动转化为int类型。
若还有long、float、double类型存在时,将以byte,short,char—int—long—float—double顺序进行转换。
(3): byte,short,char之间不转换,他们参与运算首先转换为int类型
//整数默认是int类型 小数默认是 double类型
float f=3.14F;
double dd=3.14;
long num=1L;
/*
类型的自动提升:byte short char 在参与运算时,会自动提升为int 类型
如果还有 long float double 类型参与运算 则会相应的提升为 long float double
布尔类型不参与数学运算
byte short char 他们之间不转换
*/
byte b=3;
byte a=3;
int r=a+b; //byte r=a+b 变为int r=a+b//byte short char 在参与运算时 自动提升为int 类型
byte c=20;
long num=1L;
float f=1.1F;
double ss=c+num+f;//有 long float double 类型参与运算 相应的提升为 long float double
数据类型转换之强制转换
格式:目标数据类型 变量名=(目标数据类型)(被转换的数据);
尽量不要使用强制类型转化,因为可能存在损失精度的问题。
byte a=3;
byte b=127;
//int r=a+b;
//强制类型转换,把结果强制转换成某种类型,但是可能会有精度损失,因为会丢弃掉多余字节
short r=(short)(a+b);