一. 常量
- 定义
- 在程序执行过程中其值不可以发生改变
- 常量就是指我们生活中用的数值,字母等
- 常量无法被改变,一旦改变,其意义也随之被改变
2.分类
- 字面值常量
- 自定义常量(面向对象部分再学习)
3.字面值常量的分类
- 字符常量 : 用单引号括起来的内容
- 字符串常量 : 用双引号括起来的内容
- 整数常量 : 所有的整数
- 小数常量 : 所有的小数
- 布尔常量 : 比较特殊, 只有true 和 false
- 空常量 : null(数组部分会讲到)
4.演示
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);}}
二. 变量
- 定义
- 在程序执行的过程中,在某个范围内可以发生改变
- 也就是说,其值是可以被改变的,在不同时期,同一个变量可以代表不同的值
- 有了变量之后,我们使用起来就非常灵活
2.格式
- 数据类型 变量名 = 变量值
3.意义
- 用来不断的存放同一类型的数据,并可以反复使用
- 从这里我们可以理解,变量的类型是固定的,其值时候可以被改变了
- 有了变量之后, 我们才能定义方法,才有了编程
4.演示
public class TestDemo {public static void main(String[] args) {//定义一个整数型变量iint i = 10;System.out.println(i);//更改变量i的值i = 15;System.out.println(i);}}
5.测试题
- 交换两个变量的值
三. 定义变量的注意事项
1.作用域
- 在java中一对{ }就是一个作用域
- 同一个作用域不能使用相同的变量名
- 演示
public static void main(String[] args) {int a = 1; //出现错误,当下面有代码需要使用到变量a的时候, jvm不知道用哪一个int a = 2;System.out.println(a);}
2.初始化值
- 局部变量在使用之前必须要先赋值
- 没有具体的值,使用起来是没有意义的
- 演示
public static void main(String[] args) {int a;//这里会报错, 如果没有值, 操作a是没有意义的System.out.println(a);}
3.一条语句可以定义多个相同类型的变量
- 演示
public static void main(String[] args) {//只定义变量不赋值int a,b,c;//定义变量并赋值int d =5,f=5;}
4.测试题
- 下列代码是否成立
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数据强类型语言,对于每一种数据都定义了明确的具体数据类型.以便于虚拟机分配不同大小的内存空间
2.java中数据类型的分类
- 基本数据类型
- 引用数据类型(面向对象部分讲解)
![3962aa6f260bfc5b7927e30ea4fbfab9.png](https://img-blog.csdnimg.cn/img_convert/3962aa6f260bfc5b7927e30ea4fbfab9.png)
3.基本数据类型
![6108fe61235594a36ebb08ce00649154.png](https://img-blog.csdnimg.cn/img_convert/6108fe61235594a36ebb08ce00649154.png)
- char 占两个字节 0~65535(没有负数)
- boolean 理论上是占八分之一个字节
4.注意事项
java中整数型默认的是int ,浮点型默认的是double , double的精度比float要高,所以如果我们将double转成float可能会造成丢失精度的问题.所以我们在给float类型的变量赋值时,要用f标明数值的类型
5.演示
public static void main(String[] args) {//定义byte型变量bbyte b = 4;System.out.println(b);//定义 short型变量 sshort s = 10;System.out.println(s);//定义int型变量iint i = 10;System.out.println(i);//定义long型变量 llong l = 100;System.out.println(l);//定义 float型变量 ffloat f = 1.0f;System.out.println(f);//定义double型变量ddouble d = 2.0;System.out.println(d);//定义boolean型变量bboolean flg = true;System.out.println(flg);//定义char型变量chchar ch = 'a';System.out.println(ch);}
五. 数据类型的转换
- 定义
- 数据类型的转换就是将一种数据类型转换为另外一种数据类型
- 不同的数据类型之间是无法进行运算的
2.隐式转换
- 所有隐式转换就是不需要程序员过多的干预, 编译器可以帮我自动做的事情
- 这种情况,只要在编译器确定万无一失的情况下才会放行,比如小的数据类型转成大的数据类型
- 示例
public static void main(String[] args) {//将byte型转成int型byte b = 10;int a = 4;int c = a+b;System.out.println(c);}
3.强制转换
- 当转换时有风险存在,编译器不会帮我们做这些事情,就需要我们手动进行转换,这时我们称之为强制转换
- 强制转换存在风险, 一定要确保可行再转换
- 格式
- (要转换的类型)原数据
- 演示
public static void main(String[] args) {int i = 1000;byte b ;//将int型转换成byteb = (byte)i;}
4.注意事项
- 当我们定义byte类型的变量并赋值的时候, 其实后面的数值是int的型, 也就是说其实是将大的类型转到小的类型上去, 但是这里编译器依然没有报错, 那是因为编译器在编译的时候会尝试将判定数值的大小,如果数值没有超过变量类型的限定, 就可以存放
- 演示
public static void main(String[] args) { byte b = 10;//数值10是int型的 没有超过byte的范围 //这里会报错 byte by = 128;//数值128是int型的, 超过了byte的范围}
5.测试题
- 判断下列代码是否成立
public static void main(String[] args) {int i = 100l+100;}
六. char数据类型
- 编码表
- 计算机语言将我们平时用到的字符都存放到一个表中,对应着数字
2.char是否可以存储一个中文?
- 可以, 因为java使用的是Unicode编码,Unicode编码中的每个字符占用两个字节,中文也是两个字节
七. 算术运算符
- 定义
- 就是对常量和变量进行操作的符号
2.分类
- + :在java种有三种作用,正数,加法运算,字符串连接
- - :表示数值相减
- * :表示数值相乘
- / :表示数值相除
- % :表示取余数 结果的正负由左边的数值决定
- ++ :自增 对原来的数据进行+1
- --:自减 对原来的数据进行-1
3.演示
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--);}
4.注意事项
- ++i表示先运算i自身,然后再赋值, i++表示先赋值, 再运算自身
- 在运算中, 我们必须将i++或者++i当作是一个整体来看,切莫和i本身混为一谈
- 很多书籍和视频中都对i++和++i做了详细的描述, 说道i++执行四步,++i执行三步. 但是在java中没有这样的说话, 基本看不出效果. 编译器自身肯定会做优化的
5.测试题
- 求 a, b, c最后的值
public static void main(String[] args) {int a = 10;int b = 10;int c = 10;a = b++;c = --a;b = a--;System.out.println(a);System.out.println(b);System.out.println(c);}
预测结果
public static void main(String[] args) {int a = 1;a = a++;System.out.println(a);int b = a++ * ++a;System.out.println(b);}
八. 赋值运算符
- 定义
- 将数值传递给一个变量
2.分类
- = : 将值传递给左边
- += : 将左右两遍的值相加,结果再传递给左边
- -= : 将左右两遍的值想减,结果再传递给左边
- *= : 将左右两遍的值想乘,结果再传递给左边
- /= : 将左右两遍的值想除,结果再传递给左边
- %= : 将左右两遍的值想摩,结果再传递给左边
3.演示
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);}
4.测试题
- 判断以下程序是否成立
public static void main(String[] args) {int a ;a += 10;System.out.println(a);}
九. 关系运算符
- 定义
- 一般我们也称之为判断运算符, 就是用来判断运算符两边的值的关系,结果只能是boolean
2.分类
- == : 判断两边是否相等
- != : 判断两遍是否不相等
- > : 判断左边是否大于右边
- >= : 判断左边是否大于等于右边
- < : 判断左边是否小于右边
- <= : 判断左边是否小于等于右边
- instanceof : 判断两遍的类型是否相等
3.演示
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);}
4.测试题
- 预测结果
public static void main(String[] args) {int a = 10;int b = 20;boolean flg = a+b > a; //这个公式一定成立吗?System.out.println(flg);}
十. 逻辑运算符
- 定义
- 逻辑运算符关联两个boolean结果, 结果还是一个boolean值
2.分类
- & : 同时 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, 虚拟机就不会再查看另外一边了
3.演示
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);}
4.注意事项
- 短路与和短路或运算符前后是否都执行, 主要看第一个条件
十一. 位运算符
- 定义
- 对数值进行二进制的位运算
- 在位运算中 0 为假, 1为真
2.分类
- & : 有0则为0
- | : 有1则为1
- ^ : 相同为0 , 不同为1
- ~ : 按位取反
- >> : 有符号右移
- << : 有符号左移
- >>> : 无符号右移
3.演示
public static void main(String[] args) {int a = 10; //二进制表现为 1010int b = 5; //二进制表现为 0101System.out.println(a&b); System.out.println(a|b);System.out.println(a^b);System.out.println(~a);System.out.println(a>>1);//右移一位 相当于除以2System.out.println(a<<1);//左移一位,相当于乘以2System.out.println(a>>>1);//无符号位移,缺失的首位补0}
4.注意事项
- 一个数异或同一个数两次,结果还是本身
5.测试题
- 不借助第三个变量的前提下交换两个整数变量的值
十二. 三元运算符
- 格式
- boolean ? 结果1 : 结果2;
- boolean为true,返回结果1,否则返回结果2
2.演示
- 获取两个数中最大的值
public static void main(String[] args) {int a = 10;int b = 20;//如果a大于b的话,结果为真,就返回aint max = a > b ? a : b;System.out.println(max);}
十三. 从键盘获取数据
- 步骤
- 导入 java.util.Scanner;
- 创建Scanner对象 Scanner sc = new Scanner(System.in);
- 调用nextInt()方法获取一个整数 sc.nextInt();
2.演示
//导入类import java.util.Scanner;public class TestDemo {public static void main(String[] args) {//创建键盘录入对象,打开键盘通道Scanner sc = new Scanner(System.in);//调用方法获取一个整数int i = sc.nextInt();System.out.println(i);//关闭键盘通道sc.close();}}
作业
第一题
- 那一句话是错误的, 为什么?
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中域的域嵌套的情况下, 变量的重名问题? 哪些是可以使用相同变量名的,哪些是不能使用相同变量名的?