一. 常量
-
定义
- 在程序执行过程中其值不可以发生改变
- 常量就是指我们生活中用的数值,字母等
- 常量无法被改变,一旦改变,其意义也随之被改变
-
分类
- 字面值常量
- 自定义常量(面向对象部分再学习)
-
字面值常量的分类
- 字符常量 : 用单引号括起来的内容
- 字符串常量 : 用双引号括起来的内容
- 整数常量 : 所有的整数
- 小数常量 : 所有的小数
- 布尔常量 : 比较特殊, 只有true 和 false
- 空常量 : null(数组部分会讲到)
-
演示
public class TestDemo { public static void main(String[] args) { //字符常量 System.out.println('a'); //字符串常量 System.out.println("你好"); //数值常量 System.out.println(10); //小数常量 System.out.println(10.1); //布尔型常量 System.out.println(true); //空常量 无法直接打印null 编译器认为是不合适的 String s = null; System.out.println(s); } }
二. 变量
-
定义
- 在程序执行的过程中,在某个范围内可以发生改变
- 也就是说,其值是可以被改变的,在不同时期,同一个变量可以代表不同的值
- 有了变量之后,我们使用起来就非常灵活
-
格式
- 数据类型 变量名 = 变量值
-
意义
- 用来不断的存放同一类型的数据,并可以反复使用
- 从这里我们可以理解,变量的类型是固定的,其值可以被改变
- 有了变量之后, 我们才能定义方法,才有了编程
-
演示
public class TestDemo { public static void main(String[] args) { //定义一个整数型变量i int i = 10; System.out.println(i); //更改变量i的值 i = 15; System.out.println(i); } }
-
测试题
- 交换两个变量的值
三. 定义变量的注意事项
-
作用域
-
在java中一对{ }就是一个作用域
-
同一个作用域不能使用相同的变量名
-
演示
public static void main(String[] args) { int a = 1; //出现错误,当下面有代码需要使用到变量a的时候, jvm不知道用哪一个 int a = 2; System.out.println(a); }
-
-
初始化值
-
局部变量在使用之前必须要先赋值
-
没有具体的值,使用起来是没有意义的
-
演示
public static void main(String[] args) { int a; //这里会报错, 如果没有值, 操作a是没有意义的 System.out.println(a); }
-
-
一条语句可以定义多个相同类型的变量
-
演示
public static void main(String[] args) { //只定义变量不赋值 int a,b,c; //定义变量并赋值 int d =5,f=5; }
-
-
测试题
-
下列代码是否成立
public static void main(String[] args) { { int a = 10; } int a = 5; }
-
下列代码是否成立
public static void main(String[] args) { double d = 1.0; System.out.println(d); }
-
下列代码是否成立
public static void main(String[] args) { double a = 1.0 , double b = 2.0; }
-
四. 数据类型
-
定义
- 在我们编程语言中,可以基本分为程序代码和数据,程序代码主要就是为了操作数据而生的.所以,为了防止发生混乱,那么我们就有必要将代码和数据区分开来,便于计算机和程序员理解使用
- 我们知道数据是存储于内存,或者其他存储器上的.我们如果想要存储数据,那么就必须先要在内存中开辟一块空间.可是数据大小都不一样,虚拟机到底开辟多大的一片地方才够用呢?空间小了,数据放不下,空间大了,就会造成内存的浪费.所以,我们就规定了几种类型,来存放不同长度的数据
- java数据强类型语言,对于每一种数据都定义了明确的具体数据类型.以便于虚拟机分配不同大小的内存空间
-
java中数据类型的分类
-
基本数据类型
-
引用数据类型(面向对象部分讲解)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NiTbqD94-1596639270971)(java数据类型关系.png)]
-
-
基本数据类型
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PlpddKma-1596639270974)(基本数据类型的长度.png)]
- char 占两个字节 0~65535(没有负数)
- boolean 理论上是占八分之一个字节
-
注意事项
- java中整数型默认的是int ,浮点型默认的是double , double的精度比float要高,所以如果我们将double转成float可能会造成丢失精度的问题.所以我们在给float类型的变量赋值时,要用f标明数值的类型
-
演示
public static void main(String[] args) { //定义byte型变量b byte b = 4; System.out.println(b); //定义 short型变量 s short s = 10; System.out.println(s); //定义int型变量i int i = 10; System.out.println(i); //定义long型变量 l long l = 100; System.out.println(l); //定义 float型变量 f float f = 1.0f; System.out.println(f); //定义double型变量d double d = 2.0; System.out.println(d); //定义boolean型变量b boolean flg = true; System.out.println(flg); //定义char型变量ch char ch = 'a'; System.out.println(ch); }
五. 数据类型的转换
-
定义
- 数据类型的转换就是将一种数据类型转换为另外一种数据类型
- 不同的数据类型之间是无法进行运算的
-
隐式转换
-
所有隐式转换就是不需要程序员过多的干预, 编译器可以帮我自动做的事情
-
这种情况,只要在编译器确定万无一失的情况下才会放行,比如小的数据类型转成大的数据类型
-
示例
public static void main(String[] args) { //将byte型转成int型 byte b = 10; int a = 4; int c = a+b; System.out.println(c); }
-
-
强制转换
-
当转换时有风险存在,编译器不会帮我们做这些事情,就需要我们手动进行转换,这时我们称之为强制转换
-
强制转换存在风险, 一定要确保可行再转换
-
格式
- (要转换的类型)原数据
-
演示
public static void main(String[] args) { int i = 1000; byte b ; //将int型转换成byte b = (byte)i; }
-
-
注意事项
-
当我们定义byte类型的变量并赋值的时候, 其实后面的数值是int的型, 也就是说其实是将大的类型转到小的类型上去, 但是这里编译器依然没有报错, 那是因为编译器在编译的时候会尝试将判定数值的大小,如果数值没有超过变量类型的限定, 就可以存放
-
演示
public static void main(String[] args) { byte b = 10;//数值10是int型的 没有超过byte的范围 //这里会报错 byte by = 128;//数值128是int型的, 超过了byte的范围 }
-
-
测试题
-
判断下列代码是否成立
public static void main(String[] args) { int i = 100L+100; }
-
六. char数据类型
- 编码表
- 计算机语言将我们平时用到的字符都存放到一个表中,对应着数字
- char是否可以存储一个中文?
- 可以, 因为java使用的是Unicode编码,Unicode编码中的每个字符占用两个字节,中文也是两个字节
七. 算术运算符
-
定义
- 就是对常量和变量进行操作的符号
-
分类
- + :在java种有三种作用,正数,加法运算,字符串连接
- - :表示数值相减
- * :表示数值相乘
- / :表示数值相除
- % :表示取余数 结果的正负由左边的数值决定
- ++ :自增 对原来的数据进行+1
- -- :自减 对原来的数据进行-1
-
演示
public static void main(String[] args) { int a = 1; int b = 2; //加 System.out.println(a+b); //减 System.out.println(a-b); //乘 System.out.println(a*b); //除 System.out.println(a/b); //摩以 System.out.println(a%2); //自增 System.out.println(a++); //自减 System.out.println(a--); }
-
注意事项
- ++i表示先运算i自身,然后再赋值, i++表示先赋值, 再运算自身
- 在运算中, 我们必须将i++或者++i当作是一个整体来看,切莫和i本身混为一谈
- 很多书籍和视频中都对i++和++i做了详细的描述, 说道i++执行四步,++i执行三步. 但是在java中没有这样的说法, 基本看不出效果. 编译器自身肯定会做优化的
-
测试题
-
求 a, b, c最后的值
public static void main(String[] args) { int a = 10; int b = 10; int c = 10; a = b++; // b++ 留下10 , b = 11 a= 10 c = --a; // --a 留下9 , a = 9 c = 9 b = a--; // a-- 留级9 , a = 8 b = 9 System.out.println(a); System.out.println(b); System.out.println(c); }
-
预测结果
public static void main(String[] args) { int a = 1; //a = a++; //temp = 1 a = 2 int b = a++; //temp = 1 a = 2 b = 1 a = b; System.out.println(a); int b = a++ * ++a; System.out.println(b); }
-
八. 赋值运算符
-
定义
- 将数值传递给一个变量
-
分类
- = : 将值传递给左边
- += : 将左右两遍的值相加,结果再传递给左边
- -= : 将左右两遍的值想减,结果再传递给左边
- *= : 将左右两遍的值想乘,结果再传递给左边
- /= : 将左右两遍的值想除,结果再传递给左边
- %= : 将左右两遍的值想摩,结果再传递给左边
-
演示
public static void main(String[] args) { int a = 10; System.out.println(a); //加等于 a += 5; System.out.println(a); //减等于 a-=6; System.out.println(a); //乘等于 a*=10; System.out.println(a); //除等于 a/=5; System.out.println(a); //摩等于 a%=2; System.out.println(a); }
-
测试题
-
判断以下程序是否成立
public static void main(String[] args) { int a ; a += 10; //a = a + 10; System.out.println(a); }
-
九. 关系运算符
-
定义
- 一般我们也称之为判断运算符, 就是用来判断运算符两边的值的关系,结果只能是boolean
-
分类
- == : 判断两边是否相等
- != : 判断两遍是否不相等
- > : 判断左边是否大于右边
- >= : 判断左边是否大于等于右边
- < : 判断左边是否小于右边
- <= : 判断左边是否小于等于右边
- instanceof : 判断两遍的类型是否相等
-
演示
public static void main(String[] args) { System.out.println(1==1); System.out.println(1!=1); System.out.println(1>1); System.out.println(1>=1); System.out.println(1<1); System.out.println(1<=1); }
-
测试题
-
预测结果
public static void main(String[] args) { int a = 10; int b = 20; boolean flg = a+b > a; //这个公式一定成立吗? System.out.println(flg); }
-
十. 逻辑运算符
-
定义
- 逻辑运算符关联两个boolean结果, 结果还是一个boolean值
-
分类
- & : 同时 true & true = true true & false = flase
- | : 或 true| true = true true | false = true false | false = false
- ^ : 异或(相同为假不同为真) true ^ true = false false ^ false = false rue ^ false = true
- ! : 非 !true = false !false = true
- && : 同时, 短路与, 两遍只要有一边的值为fasle , 虚拟机就不会再查看另外一边了
- || : 或, 短路或, 两边只要有一遍的值为true, 虚拟机就不会再查看另外一边了
-
演示
public static void main(String[] args) { boolean b ; //& 同时 b = true&true; System.out.println(b); b = true&false; System.out.println(b); // | 或者 b = true | false; System.out.println(b); b = false | false; System.out.println(b); // ^ 异或, 相同为假 不同为真 b = true ^ true; System.out.println(b); b = true ^ false; System.out.println(b); // ! 非 非真即假,非假即真 b = !true; System.out.println(b); b = !false; System.out.println(b); // && 同时 如果前边是false, 后面就不再验证 b = false && true; System.out.println(b); // || 或者 如果前边是true ,后面就不再验证了 b = true || false; System.out.println(b); }
-
注释事项
- 短路与和短路或运算符前后是否都执行, 主要看第一个条件
十一. 位运算符(了解)
-
定义
- 对数值进行二进制的位运算
- 在位运算中 0 为假, 1为真
-
分类
- & : 有0则为0
- | : 有1则为1
- ^ : 相同为0 , 不同为1
- ~ : 按位取反
- >> : 有符号右移
- << : 有符号左移
- >>> : 无符号右移
-
演示
public static void main(String[] args) { int a = 10; //二进制表现为 1010 int b = 5; //二进制表现为 0101 System.out.println(a&b); System.out.println(a|b); System.out.println(a^b); System.out.println(~a); System.out.println(a>>1);//右移一位 相当于除以2 System.out.println(a<<1);//左移一位,相当于乘以2 System.out.println(a>>>1);//无符号位移,缺失的首位补0 }
-
注意事项
- 一个数异或同一个数两次,结果还是本身
-
测试题
- 不借助第三个变量的前提下交换两个整数变量的值
总结:
-
常量
- 生活中的文字符号
-
变量
- 一个可以代表不同值得符号
- 数据类型 变量名;
- 当要使用一个变量名的时候, 要看有没有其他变量正在使用这个名称
- 真正使用变量的时候,这个变量必须要有值
- 一条语句中可以定义多个相同类型的变量 (不要当傻逼)
-
数据类型
- 数据类型 : 基本数据类型 引用数据类型
- 基本数据类型 : byte short int long float double char boolean
- byte的范围 : -128 – 127
-
类型转换
- 隐式转换(小–>大) 强制转换(大–>小)
- 如果是直接赋值的情况 (byte b = 10) ,可以
- 强转有风险, 使用需谨慎
-
运算符
- 算数 : + - * / % ++ –
- 赋值: = += -= *= /= %=
- 关系: == != > >= < <=
- 逻辑: & | ! ^ && ||
- 位运算: & | ~ ^ >> << >>>
作业
-
第一题
- 哪一句话是错误的, 为什么?
public static void main(String[] args) { byte b1=3,b2=4,b; b=b1+b2; b=3+4; }
-
第二题
- 下面哪一话是错的, 为什么?
public static void main(String[] args) { byte b = 10; b++; b = b + 1; //运行期
-
第三题
- 使用三个整数, 求出三个整数中最大的那个并打印
-
第四题
- 判断flg的结果
public static void main(String[] args) { boolean flg = false | (true & (false^true)); }
-
扩展题
- 求出 j 的结果 , 写出运算步骤
public static void main(String[] args) { int i=3,j; j=(i++)+(i++)+(++i); System.out.println(j); }
-
扩展题
- 思考, java中域的域嵌套的情况下, 变量的重名问题? 哪些是可以使用相同变量名的,哪些是不能使用相同变量名的?