课程内容
1、变量剩余内容
2、运算符
3、键盘录入
4、分支结构
变量剩余内容
变量的注意事项
1、变量是有作用域(起作用的范围)的。变量在哪个大括号中声明定义的,作用域就在哪个大括号中。
1、声明定义:带着数据类型的变量名称,就是在声明定义变量
2、使用:不带着数据类型的变量名称,就是在使用变量
3、在某个作用域中一旦出现了同名变量的声明,就会报错
4、某个变量的作用域结束之后,就不能继续使用这个变量了
2、变量必须先赋值,后使用
3、变量可以赋值和声明分离
4、同类型的变量,可以在一个语句中,声明多个,每个声明之间使用都好分隔,格式如下:
数据类型 变量名1 = 变量值1, 变量名2, 变量名3, 变量名4 = 变量值4, 变量名5;
例如:int a, b, c = 20, d = 100, e = 666;
建议不要这么写
代码示例
class Demo01_变量注意事项 {
public static void main(String[] args) {
//对变量的声明
int a = 10;
//对变量的使用
System.out.println(a);
//编译报错
//int a = 20;
{
int b = 100;
System.out.println(b);
}
//编译报错,b的作用域已经结束
//System.out.println(b);
int c;
//变量必须先赋值后使用
//System.out.println(c);
int d;
d = 100;
System.out.println(d);
int x, y, z = 888;//可以在同一行声明多个相同数据类型的变量
System.out.println(z);
}
}
数据类型转换之隐式转换(自动转换)
1、当小范围的数据的数据类型,和大范围的数据的数据类型,这两种数据类型的数据,在互相运算时,会先把小范围类型的数据,提升为大范围类型,然后再进行运算;运算的结果,还是大范围的数据类型。
2、数据类型范围排行
byte < short = char < int < long < float < double
3、注意事项:
byte、short、char、int在相互运算时,不是转换成较大范围的数据类型,而是统统转换为int
代码示例
class Demo02_隐式转换 {
public static void main(String[] args) {
int i = 100;
long g = 1000;
//int result = i + g;编译报错,因为相加结果是long
byte b = 10;
short s = 20;
//byte r = b + s;编译报错,因为相加结果是int
}
}
数据类型转换之强制转换
1、从大范围类型的数据,转成小范围类型的数据的过程,就是强制转换
2、强制转换的格式:
转换后的类型 转换后的变量 = (要转成的类型)需要转换的变量
3、注意事项:
强制转换的运算结果,可能和正确结果不一致
代码示例
class Demo03_强制转换 {
public static void main(String[] args) {
int i = 100;
long g = 1000;
long lResult = i + g;
int result = (int)lResult;
System.out.println(result);
byte b1 = 10;
byte b2 = 20;
byte b = (byte)(b1 + b2);
System.out.println(b);
byte by1 = 126;
byte by2 = 3;
byte by = (byte)(by1 + by2);
System.out.println(by);
}
}
字符
1、使用单引号引起来的单个的字母、汉字、数字以及其他的特殊符号,使用char关键字表示。
2、计算机中存储、计算任何数据,都是使用数字的形式来去完成,字符类型也需要变成数字来进行存储和计算。字符到数字的过程,称为【编码】,给计算机去处理;从数字到字符的过程,称为【解码】,用于给人类阅读。
3、数字和字符相互转换的对应规则、对应映射关系,称为【编码表】、【字符集】
4、英文状态的所有符号,都可以通过ASCII码表来找到对应的数字。
5、ASCII码表图示:
6、其他语言的国家也需要使用计算机,例如欧洲ISO8859-1、GB2312、GBK
7、为了统一编码形式,出现万国码Unicode,统一使用2个字节来表示一个字符,表示范围是0-65535
8、改进Unicode为UTF-8,使用1-3个字节来表示一个字符,其中1个字节表示一个英文状态的字符,3个字节表示一个中文状态的字符
9、无论是哪种编码形式,都兼容ASCII编码表(对于数字0-127,所有的编码表对应的字符都是一样的),所以在英美编程不会碰到任何乱码,但是在其他语言的国家,都会碰到乱码的情况
10、Java语言中,使用的编码形式Unicode表示字符,声明一个字符类型,统一使用2个字节表示
11、Java中的字符类型,使用char,可以使用’uxxxx’表示一个字符,u表示使用Unicode编码值,xxxx表示使用4个十六进制数表示Unicode码值(一个十六进制数可以表示为4个二进制数,4个十六进制数正好就是16个二进制数,char类型使用两个字节,16二进制位位)
代码示例
class Demo04_字符类型 {
public static void main(String[] args) {
char c1 = 'a';
System.out.println(c1 + 0);
char c2 = 'a';
System.out.println(c2 + 5);
char c3 = (char)(c2 + 5);
System.out.println(c3);
char c4 = '呵';
System.out.println((int)c4);
char c5 = (char)21621;
System.out.println(c5);
char c6 = 'u0061';
System.out.println(c6);
char c7 = 'u5475';
System.out.println(c7);
}
}
字符串类型
1、是一种引用数据类型,变量中存储的是字符串的地址,而不是字符串本身
2、声明字符串类型变量,使用的单词是一个jdk中定义好的类型,不是一个关键字,String
3、字符串类型的拼接:
1、使用“+”来拼接字符串
2、任意数据类型都可以和字符串进行拼接,先把其他的数据类型转换成字符串类型,然后再和另外一个字符串拼接,结果是一个更长的字符串
代码示例
class Demo05_字符串类型 {
public static void main(String[] args) {
//声明一个字符串类型的变量
String str = "HelloWorld";
System.out.println(str);
String str1 = "Hello";
String str2 = "Java";
System.out.println(str1 + str2);
System.out.println("我的年龄是" + 66);
System.out.println("正确与否:" + false);
int a = 1001;
int b = 2002;
//a = 100, b = 200
System.out.println("a = " + a + ", b = " + b);
}
}
字符串练习
代码示例
class Demo06_字符串练习 {
public static void main(String[] args) {
System.out.println("5 + 5 = " + 5 + 5);
System.out.println("5 + 5 = " + "5" + 5);
System.out.println("5 + 5 = 5" + 5);
System.out.println("5 + 5 = 5" + "5");
System.out.println("5 + 5 = 55");
}
}
变量练习
定义两个变量,分别int a = 10; int b = 20;
写代码,交换两个变量的值。
代码示例
class Demo07_变量交换 {
public static void main(String[] args) {
int a = 10;
int b = 20;
//打印两个变量的值
System.out.println("a = " + a + ", b = " + b);
//交换两个变量的值,声明一个第三方变量
int temp = a;
a = b;
b = temp;
//打印交换之后的两个变量的值
System.out.println("a = " + a + ", b = " + b);
int x = 10;
int y = 20;
System.out.println("x = " + x + ", y = " + y);
x = x + y;
y = x - y;
x = x - y;
System.out.println("x = " + x + ", y = " + y);
//使用位运算符交换(m连续^两次n,结果还是m)
int m = 10;
int n = 20;
System.out.println("m = " + m + ", n = " + n);
m = m ^ n;
n = m ^ n;
m = m ^ n;
System.out.println("m = " + m + ", n = " + n);
System.out.println(10 ^ 20 ^ 20);
}
}
运算符
概述
1、运算符:用于运算常量和变量的符号,就是运算符
2、分类:
算数运算符
赋值运算符
比较运算符
逻辑运算符
位移运算符
三元运算符
基本的算数运算符
1、用于做基本的数字运算的符号
2、+ - * / %
3、+:
1、表示正数
2、表示普通的加法
3、表示字符串的拼接
4、-:
1、表示负数
2、用于减法
5、/:
1、整数除以整数,运算结果还是整数,是除法之后的商
2、如果需要得到小数结果,那么需要将其中一个操作数,写成double类型
6、%:取余运算符、取模运算符
1、两个整数相除,不要得到的商,运算结果是相除的余数
2、运算的结果的符号,只和%前面的操作数的正负有关
3、作用:1、判断一个数字的奇偶;2、获取一个整数各个位上的数字
代码示例
class Demo08_普通的算数运算符 {
public static void main(String[] args) {
System.out.println(7 / 2);
System.out.println(7.0 / 2);
System.out.println(7 / 2.0);
System.out.println(7 % 2);
System.out.println((-7) % 2);
System.out.println(7 % (-2));
System.out.println((-7) % (-2));
//获取135各个位上的数字
int n = 135;
int ge = n % 10;
int shi = n / 10 % 10;
int bai = n / 100;
System.out.println("个位是:" + ge + ", 十位是:" + shi + ", 百位是:" + bai);
}
}
++、--算数运算符
1、++:自增运算符
2、操作的数据:只有变量
3、效果:在某个变量的基础上,自增1
4、注意事项:
1、++可以写在变量的前面、也可以写在变量的后面,单独使用的时候,没有任何区别
2、如果a++或者++a作为一个表达式,作为一个运算结果来输出、计算的时候,就有区别了:a++先取出原来a的值,然后a再去自增;++a先把a的值自增,然后再取出自增之后的值。
代码示例
class Demo09_自增运算符 {
public static void main(String[] args) {
int a = 10;
a++;//a = a + 1
System.out.println(a);
++a;
System.out.println(a);
int x = 10;
System.out.println(x++);//10,取到的是自增之前的x
System.out.println(x);//x毕竟是自增了,所以打印的结果是11
int y = 100;
System.out.println(++y);//101,获取的是自增之后的y
System.out.println(y);//101
}
}
练习
声明两个变量,分别为int x = 10;
int y = (++x) + (x--) + 10 * (--x);
不要运行代码,判断代码执行完之后,x和y分别是多少
代码示例
class Demo10_自增运算符练习 {
public static void main(String[] args) {
int x = 10;
int y = (++x) + (x--) + 10 * (--x);
// 11 11 9
// x=11 x=10 x=9
System.out.println("x = " + x + ", y = " + y);
}
}
赋值运算符
1、用于给变量赋值的操作符号,就是赋值运算符
2、作用:把符号右边的值,给了左边的变量
3、分类:
基本的赋值运算符:=
扩展的赋值运算符:+= -= *= /= %=
先将符号左右两边的数据进行算数运算,将运算的结果,赋值给符号左边的变量
4、注意事项:
赋值运算符也是运算符,也有运算结果,运算结果就是赋值之后的变量的值
代码示例
class Demo11_赋值运算符 {
public static void main(String[] args) {
int a = 10;
System.out.println(a);
System.out.println(a = 20);
int b = 100;
b += 10;
System.out.println(b);
int c = 200;
c -= 100;//c = c - 100
System.out.println(c);
int d = 1000;
System.out.println(d *= 2);
int e = 7;
System.out.println(e %= 2);
}
}
比较运算符
1、用于比较数据是否相等以及大小关系的运算符
2、== != > < >= <=
3、分类:
比较相等的运算符:== != 可以比较任意数据类型
比较大小的运算符:> < >= <= 可以比较数值类型:整数、小数和字符
4、运算结果:
比较的结果全都为boolean类型,要么是true,要么是false
代码示例
class Demo12_比较运算符 {
public static void main(String[] args) {
System.out.println(2 == 3);//false
System.out.println(2 != 3);//true
System.out.println(2 == 2);//true
System.out.println(2 != 2);//false
System.out.println(12.34 == 12.35);//false
System.out.println('a' == 'b');//false
System.out.println('a' == 97);//true
System.out.println(true == false);//false
System.out.println("Hello" == "World");//false
System.out.println(3 > 3);//false
System.out.println(3 >= 3);//true
System.out.println('a' > 'A');//true
}
}
逻辑运算符
1、用于处理逻辑数据的运算符
2、逻辑数据:boolean类型的数据
3、罗列:& | ^ ! && ||
4、&:逻辑与,全真为真,否则为假
true & true true
true & false false
false & true false
false & false false
5、|:逻辑或,全假为假,否则为真
true | true true
true | false true
false | true true
false | false false
6、^:逻辑异或,相同为假,不同为真
true ^ true false
true ^ false true
false ^ true true
flase ^ false false
7、!:逻辑非,遇真为假,遇假为真
!true false
!false true
代码示例
class Demo13_逻辑运算符 {
public static void main(String[] args) {
boolean tickets = true;
boolean onTime = false;
boolean result1 = tickets & onTime;
System.out.println(result1);
boolean road1 = false;
boolean road2 = true;
boolean result2 = road1 | road2;
System.out.println(result2);
boolean age4 = true;
boolean age14 = true;
boolean result3 = age4 ^ age14;
System.out.println(result3);
boolean age18 = true;
boolean isChild = !age18;
System.out.println(isChild);
}
}
短路逻辑运算符
1、短路运算符:如果第一个表达式的运算结果,可以决定整个表达式的结果,那么就不去计算第二个表达式的值
2、短路与:&&
如果第一个表达式的值,计算结果为false,就不计算第二个表达式的值了,因为无论值是多少,最终结果都是false
3、短路或:||
如果第一个表达式的值,计算结果为true,就不计算第二个表达式的值了,因为无论第二个表达式值是多少,最终整体表达式的值都是true
代码示例
class Demo14_短路运算符特点验证 {
public static void main(String[] args) {
int m = 10;
int n = 20;
boolean result1 = (m > 100) & (n++ > 0);
System.out.println(n);//21,说明第二个表达式执行了
int x = 10;
int y = 20;
boolean result2 = (x > 100) && (y++ > 0);
System.out.println(y);//20,说明第二个表达式没有执行
}
}
练习
自己验证短路运算符的运算特点
位移运算符
1、对数字的二进制形式进行按位移动
2、<<:左移运算符
效果:向左移动一位,计算结果是该数字的2倍
3、>>:右移运算符
效果:向右移动一位,计算结果是该数字的二分之一
4、>>>:无符号右移
效果:确保操作数字是正数,使用无符号右移结果才正确,效率高于右移运算符
5、位移运算符特点:
如果乘以除以的数字是2的整数次幂,使用位移运算符的运算效率,远高于乘法运算符和除法运算符
代码示例
class Demo15_位移运算符 {
public static void main(String[] args) {
System.out.println(3 << 3);//3左移3位,相当于称了3次2
System.out.println(7 >> 1);//7右移一位,相当于除以2
System.out.println(7 >>> 2);//1
System.out.println((-7) >>> 1);
}
}
三元运算符
1、可以同时操作三个表达式的运算符
2、格式:
表达式1 ? 表达式2 : 表达式3
3、三个表达式类型:
表达式1:必须是boolean类型的运算结果
表达式2和表达式3:可以是任意类型
4、运算规则和步骤:
1、计算表达式1的值,true、false
2、如果表达式1的值为true,就选择表达式2的值作为整个三元表达式的值
3、如果表达式1的值为false,就选择表达式3的值作为整个三元表达式的值
代码示例
class Demo16_三元运算符 {
public static void main(String[] args) {
int a = 100;
int b = 20;
int max = a > b ? a : b;
System.out.println(max);
}
}