概念:变量是内存中一块存储空间 是数据存储的基本单元 数据存储的容器
内存和外存
电脑
硬盘
内存条
先将硬盘中的程序的数据加载到内存中进行运算
见图示
酒店 内存
房间 变量
房间号 变量名
房间的类型 变量的数据类型
房间里住人放的东西 变量值
java是强类型的编程的语言(变量的数据类型 和变量里存放的数据类型必须保持一致)
变量的三要素:变量名 数据类型 变量值
变量的声明:
语法: 数据类型 变量名;
eg: int a;
变量的赋值
语法: 变量名 = 变量值;
变量的访问:可以直接通过变量名访问
见案例
注意:在访问变量的时候 千万不可以为变量名加 “ ”
案例:
public class Hello{
public static void main(String[] args){
//1 声明
int a;
//2 赋值
a = 5;
//3.访问一个变量
System.out.println(a);
}
}
案例:当一个变量被定义 如果没有赋值那么不能使用
public class Hello{
public static void main(String[] args){
int a ;
System.out.println(a);//报错
}
}
案例:变量值的改变
public class Hello{
public static void main(String[] args){
int a;
a = 30;
a = 50;
System.out.println(a);
}
}
案例:变量不能重复定义
public class Hello{
public static void main(String[] args){
int a;
a = 30;
int a;
a = 50;
}
}
==================================================================
总结:
变量定义的所有方式
第一种:先声明 再赋值
语法:
数据类型 变量名;//声明
变量名 = 变量值;//赋值
如:
int a;
a = 30;
第二种:声明的同时并赋值
语法:
数据类型 变量名 = 变量值;
如:
int a = 40;
第三种:同时声明多个相同类型的变量(可以在声明的同时为部分变量赋值)
语法:
数据类型 变量1,变量2,变量3,变量4 = 43,变量n;
如:
public class Hello{
public static void main(String[] args){
int a,b = 10,c;//声明了三个变量
a = 20;
c = 30;
System.out.println(a);
System.out.println(b);
System.out.println(c);
}
}
字节:
8bit = 1Byte
1024Byte = 1KB
1024KB = 1MB
1024MB = 1GB
1024GB = 1TB
1024TB = 1PB
1024PB = 1EB
1024EB = 1ZB
十进制
249
2*10^(3-1) + 4* 10^(2-1) +9*10^(1-1)
1001 ---->
1*2^(4-1)+0*2^(3-1)+0*2^(2-1)+1*2^(1-1) = 9
11111111 = 255
00000000 = 0
整数类型(4种)
所占空间 数据表示范围
byte 1B -128 --- 127
short 2B -32768 -- 32767
int 4B -2147483648 -- 2147483647
long 8B 不要求
字面值:可以给一个数据类型变量赋的值
注意:
1.整数类型中的字面值类型 默认是int类型
2.在定义long类型的变量时 必须在字面值后加L/l 建议大写的L
案例:
public class Hello{
public static void main(String[] args){
byte b = 127;
System.out.println(b);
short s = 32766;
System.out.println(s);
int i = 2147483647;
System.out.println(i);
long l = 2147483648L;
System.out.println(l);
}
}
小数类型(浮点类型)
字节 范围
float (单精度) 4B 不用记
double (双精度) 8B 不用记
注意:
1.float类型的变量定义时,需要在字面值后加F/f 建议F
2.小数类型的字面值的默认类型时double
3.double类型的变量在定义时可以在字面值后加D/d 也可以不加
案例:
public class Hello{
public static void main(String[] args){
float f = 3.4F;
System.out.println(f);
double d = 45.6D;
System.out.println(d);
}
}
面试题:
int类型占4B float 也占4B 那么这两个数据类型的变量所表示的数据范围哪个大
答案:float和double类型采用的是科学计数法,其值是一个近似值 ,float类型所表示的数据范围要远远大于int double类型所表示的数据范围远远大于long
案例:
public class Hello{
public static void main(String[] args){
float f = 2147483648F;
System.out.println(f);
}
}
面试题:
1/0
int a = 1;
int b = 0;
System.out.println(a/b);//报错
public class Hello{
public static void main(String[] args){
float a = 1F;
float b = 0F;
System.out.println(a/b);//infinity 无限的
}
}
字符类型
字节 范围
char 2B 0-65535
赋值形式:
第一种: 'A'
第二种: 65 ---> A 97--->a 48---->0
第三种:unicode 编码 十六进制的 '\u0041' ---->A
案例:
public class Hello{
public static void main(String[] args){
char c1 = 'A';
char c2 = 97;
char c3 = '\u0041';
System.out.println(c1);
System.out.println(c2);
System.out.println(c3);
}
}
转义字符:
常用的转义字符
\t tab 制表符
\n 换行
\\ \
\' '
\" "
案例:
public class Hello{
public static void main(String[] args){
char c = '\'';
System.out.println(c);
}
}
布尔类型
字节 字面值
boolean 不同的系统分配的字节数不一样 true false
注意:
true千万不要写成 ture
案例:
public class Hello{
public static void main(String[] args){
boolean b = false;
System.out.println(b);
}
}
无数种
String 字符串
语法:
数据类型 变量名 = 变量值;
如:
String s = "abcdefg";
注意:字符串类型的变量在赋值的时候 必须用" " 将字符串的内容括起来
案例:
public class Hello{
public static void main(String[] args){
String s = "abcdefghijk";
System.out.println(s);
}
}
案例:
public class Hello{
public static void main(String[] args){
byte b = 127;
int i = b;
System.out.println(i);
}
}
==================================================================
自动类型提升要求:
1.数据类型之间是可以兼容
2.目标类型范围要大于源类型
byte-->short--->int---->long--->float---->double
char-->int---->long---->float----double
案例:
public class Hello{
public static void main(String[] args){
long l = 2147483648L;
float f = l;
System.out.println(f);
}
}
===============================================================
强制类型转换
要求:
1.两种数据类型是相互兼容的
2.目标类型范围小于源类型
注意:强制类型转换时可能会出现数据错误
强制类型转换语法:
目标类型变量名 = (目标数据类型)源数据类型变量名;
如:
案例:
public class Hello{
public static void main(String[] args){
int i = 128;
byte b =(byte)i;
System.out.println(b);
}
}
概念:表达式是由 变量 字面值 运算符 组成的式子
注意:每个表达式都有一个值
案例:
public class Hello{
public static void main(String[] args){
byte b = 20;
b = (byte)(b + 1);
System.out.println(b);
}
}
当表达式中出现数据类型不一致的情况会在运算的时候进行数据类型提升
规则:
1.当表达式中有double数据,表达式的值的类型为double
2.反之如果表达式中有float类型,表达式的值的类型为float
3.再反之如果表达式中由long类型,表达式的值的类型为long
4.其余情况表达式的值都为int类型
案例:
public class Hello{
public static void main(String[] args){
float d = 12.5F;
int i = 3;
long a = i+d;
System.out.println(a);
}
}
+
-
*
/ 取商
% 取模 取余数
案例:
public class Hello{
public static void main(String[] args){
int a = 5;
int b = 2;
System.out.println(a/b);//商2余1 结果 2
System.out.println(a%b);// 余数 结果为 1
}
}
注意:
+ 除了数学运算 还有功能是 字符串连接符
当+作为字符串连接符的时候 任何字面值和变量和它所拼接的结果都为字符串
案例:
public class Hello{
public static void main(String[] args){
String s = "战三";
System.out.println(3+4+s);//7张三
System.out.println(s+3+4);//张三34
}
}
=
+=
-=
*=
/=
%=
案例:
public class Hello{
public static void main(String[] args){
int i = 4;
i+=3;//----> i = i+3;
i*=3;// i = i*3
}
}
注意:赋值运算符不进行自动类型提升
public class Hello{
public static void main(String[] args){
byte b = 3;
//b = b+1; 错误的
b+=1; //正确的
System.out.println(b);
}
}
++
--
自增自减运算符可以放在变量的前和后,表达式的结果是不同的
自增自减运算符都是在原来的基础上进行+1/-1操作
规则:
++a表达式的值为 a 加1之后的值
a++表达式的值为 a 没有 加1的值
无论++在前还是在后 都是对a变量的值加1
--a表达式的值为 a 减1之后的值
a--表达式的值为 a 没有 减1的值
无论--在前还是在后 都是对a变量的值减1
a的值
表达式的值
案例:
public class Hello{
public static void main(String[] args){
int a = 5;
//a的值 6 7 6
//表达式的值 5 7 6
int b = (a++)+(++a)+(--a);
System.out.println(b);// 18
System.out.println(a);//6
}
}
案例:
public class Hello{
public static void main(String[] args){
int a = 5;
//a的值 6 5 4 5 4
//表达式的值 5 6 4 5 5
int b = (a++)+(a--)-(--a)-(++a)+(a--);
System.out.println(b);// 7
System.out.println(a);// 4
}
}
>
<
>=
<=
!=
==
关系运算符组成的式子叫做布尔表达式
案例:
public class Hello{
public static void main(String[] args){
int a =5;
int b = 6;
System.out.println(a!=b);//true
}
}
&:如果两边布尔表达式的值都为true 表达式的值才为true 其余都为false
&&:短路与 当前面的布尔表达式的值为false 就不执行&&后的语句
案例:
public class Hello{
public static void main(String[] args){
int a =5;
int b =6;
// false true
boolean f = (a>b)&&(++a<b);
System.out.println(a);//5
System.out.println(f);//false
int c = 5;
int d = 6;
boolean f = (a>b)&(++a<b);
System.out.println(a);//6
System.out.println(f);//false
}
}
|:如果|两边 都为false时 整个表达式的值才为false 其余为true
||:短路或
!
案例:
public class Hello{
public static void main(String[] args){
int a =5;
int b =6;
boolean f = (a<b)||(++a<b);
System.out.println(a);//5
System.out.println(f);//true
}
}
案例:
public class Hello{
public static void main(String[] args){
boolean f =false;
System.out.println(!f);
}
}
格式:
布尔表达式?值1:值2;
原理:当布尔表达式的值为true 整个三元运算符的表达式的值取值1 反之取值2
案例:
public class Hello{
public static void main(String[] args){
int a = 5;
int b = 4;
int c = a>b?a:b;
String s = a>b?"a>b":"a;
System.out.println(s);
}
}
注意:值1和值2的数据类型必须相同 而且不能是语句
[外链图片转存失败(img-oqQqjAJm-1562048861914)(F:\166课件\image\2019-06-04_182119.png)]
System.out.println(f);//true
}
}
案例:
public class Hello{
public static void main(String[] args){
boolean f =false;
System.out.println(!f);
}
}
##### 三元运算符
```java
格式:
布尔表达式?值1:值2;
原理:当布尔表达式的值为true 整个三元运算符的表达式的值取值1 反之取值2
案例:
public class Hello{
public static void main(String[] args){
int a = 5;
int b = 4;
int c = a>b?a:b;
String s = a>b?"a>b":"a