一、变量里的数据在计算机中的存储原理
1.二进制
.二进制:只有0、1, 按照逢二进一的方式表示数据。
十进制数字11转换为:1011
方法:除二取余法
计算机中表示数据的最小单元,一个字节(Byte,简称B,是使用8个二进制位组成的),字节,是8位一组。
字节中的每一个二进制位就称为位(bit,简称b),1B=8b。
2.字符
字符在计算机中的存储是通过把字符变成编号,把字符编号的二进制保存起来。
ASCII编码表:即美国信息交换标准码,规定了现代英语、数字字符、和其他西欧字符对应的数字编号。
package cn.chang.variable;
public class ASCIIDemo1 { public static void main(String[] args) {// 目标:掌握ASCII编码表的编码特点System.out.println('a' + 10); // 97 + 10 = 107 System.out.println('A' + 10); // 65 + 10 = 75System.out.println('0' + 10); // 48 + 10 = 58 }}
字符A对应的是65;
字符a对应的是97;
数字0对应的是48;
2.进制转换
二进制转十进制:
八进制和十六进制:
为了便于观察和表示二进制,推出了八进制和十六进制。
97:0110 0001
八进制:二进制每三位一组,就是八进制。
97,八进制就是141。
000 -> 0
111 -> 7
公共是8个数据。
十六进制:依次用0~9,A、B、C、D、E、F来表示。二进制每四位一组。
250:1111 1010 十六进制:FA
注意:
Java程序中支持书写二进制、八进制和十六进制的数据,分别需要以0B或0b、0、0X或0x开头。
例:
package cn.chang.variable;
public class ASCIIDemo1 {public static void main(String[] args) { // 目标:掌握ASCII编码表的编码特点int a1 = 0B01100001; // 97的二进制System.out.println(a1);int a2 = 0141; // 97的八进制System.out.println(a2);int a3 = 0XFA; // 250的十六进制System.out.println(a3);}}
3.单位
计算机的数据单位:
1)计算机表示数据的最小单位是:字节,1B=8b;
2)在B的基础上,计算机发展出了KB、MB、GB、TB、……这些数据单位。
1B = 8b
1KB = 1024B
1MB = 1024KB
1GB = 1024MB
1TB = 1024GB
二、数据类型
数据类型的分类:基本数据类型和引用数据类型
在Java中,有8种基本数据类型来存储数值、字符和布尔值。
1.基础数据类型
4大类:整形、浮点型、字符串、布尔型
注:
1. long型的取值范围比int型大,所以在赋值的时候要和int型做区分,需要在整数后面加L或者l。
2.在默认情况下,小数都被看成是double型,若想使用float型声明小数,则需要在小数后面添加F或f。
2.引用数据类型
String称之为字符串类型,定义的变量可以用于记住一个字符串数据。
package cn.chang.variable;
public class VariableDemo2 { public static void main(String[] args) {// 目标: 引用数据类型// 5. StringString name = "张三";System.out.println(name);}
}
三、类型转换
1.自动类型转换
类型范围小的变量,可以直接赋值给类型范围大的变量。
例:byte类型的变量可以直接赋值给int类型的变量
package cn.chang.type;
public class TypeConversionDemo1 {public static void main(String[] args) {// 目标:理解自动类型转换机制byte a = 12;int b = a; // 发生了自动类型转换 System.out.println(a); System.out.println(b);}
}
自动类型转换的其他形式:
2.表达式的自动类型转换
在表达式中,小范围类型的变量,会自动转换成成表达式较大范围的类型,再参与运算。
注意事项:
表达式的最终结果类型是由表达式中的最高类型决定。
在表达式中,byte、short、char是直接转换成int类型参与运算的。
package cn.chang.type;
public class TypeConversionDemo2 {public static void main(String[] args) { // 目标:掌握表达式的自动类型转换机制byte a = 10;int b = 20;long c = 30;long res1 = a + b + c; // 表达式的最高类型是long类型System.out.println(res1);double res2 = a + b + 1.0; // 表达式中的最高类型是double类型System.out.println(res2);byte i = 10;short j = 30;int res3 = i + j; // 表达式中,byte、short、char是直接转换成int类型参与运算的。 System.out.println(res3);byte ii = 10;byte jj = 80;int res4 = ii + jj; // 表达式中,byte、short、char是直接转换成int类型参与运算的。 System.out.println(res4);}
}
3.强制类型转换:
大范围类型的变量赋值给小范围类型的变量
package cn.chang.type;
public class TypeConversionDemo3 { public static void main(String[] args) { // 目标:强制类型转换,显示转换int a = 1500;byte b = (byte) a; // Alt + Enter回车键 选择菜单第一项,强制类型转换 System.out.println(b);}
}
类型范围大的数据赋值给范围小的数据,IDEA会出现报错。
原因:可能会导致精度缺失。
注意事项:
1)强制类型转换可能造成数据丢失溢出,精度丢失。
2)浮点型转换成整型,直接丢掉小数部分,保留整数部分返回。
四、运算符
1.基本算术运算符
注:
在Java中,两个整数相除结果还是整数。
“+”符号与字符串运算的时候是用作连接符的,其结果依然是一个字符串
2.自增自减运算符
注意:
++、-- 只能操作变量、不能操作字面量。
package cn.chang.operator;
public class OperatorDemo2 {public static void main(String[] args) {// 目标:掌握变量自增自减运算符的使用int a = 10;a++; // a = a + 1++a;System.out.println(a);int b = 10;b--; // b = b - 1--b;System.out.println(b);}
}
自增自减的使用注意事项:
++、--如果非单独使用(如在表达式中,或者同时有其他操作),放在变量前后会存在明显区别。
1)放在变量前面,先对变量进行+1、-1,再拿变量的值进行运算。
b=++a; -> a = a + 1; b =a ;
2)放在变量的后面,先对变量的值进行运算,然后再对变量进行+1,-1;
b = a++; -> b = a; a = a + 1;
3.赋值运算符
基础赋值运算符就是“=”,从右往左看。
int a = 10; // 把数字10赋值给左边的变量a存储。
扩展赋值运算符:
4.关系运算符
判断数据是否满足条件,最终会返回一个判断的结果,这个结果是布尔类型的值,true或false。
在Java中,判断是否相等,一定是“==”,千万不要把==写成“=”,写成“=”,就是赋值了。
5.逻辑运算符
结论:
1)在Java中,“&”,“|”:无论左边是true或者false,右边都要执行;
2)由于&&、||运算效率更高,在开发中用的更频繁
package cn.chang.operator;
public class OperatorDemo5 {public static void main(String[] args) {// 目标:掌握Java逻辑运算符的使用// && int i = 10;int j = 20;System.out.println(i > 100 && ++j > 10); // 短路与,右边的代码不执行 System.out.println(j); // 20, 说明++j确实没有执行System.out.println(i > 100 & ++j > 10); // 单与System.out.println(j); // 21, 说明右边的代码执行了}
}
Scanner
API:Application Programming Interface:应用程序编程接口,Java写好的程序,程序员可以直接拿来调用。
Java为自己写好的程序提供了相应的 程序使用说明书(API文档)
使用Scanner接收用户键盘输入的数据,需要三个步骤:
①:导包:告诉程序去JDK的哪个包中找扫描器技术一
import java.util.Scanner;
②:抄代码:代表得到键盘扫描器对象(东西)。
Scanner sc=new Scanner(System.in);
③:抄代码:等待接收用户输入数据
int age = sc.nextInt()
System.out.println(“年龄是:”+ age);
注意:System、string在]DK中的ava.lang包下lang包不需要我们导包,是默认的包。
package cn.chang.Scanner;
import java.util.Scanner;
public class ScannerDemo1 {public static void main(String[] args) {// 目标:掌握Scanner扫描器的功能Scanner sc = new Scanner(System.in);System.out.println("请输入您的年龄:");int age = sc.nextInt();System.out.println("请输入您的姓名:"); String name = sc.next();System.out.println("您的年龄是:" + age + "," + "您的名字是:" + name + "。");}
}
在程序中,直接输入Scanner,IDEA自动进行导包操作。所以,非常方便。
我们通过的是Scanner类来获取用户的输入的。
导包:Scanner类就是在java.util包下的,所以需要将该包导入。
五、分支和循环
1.分支
if分支有三种形式:
package cn.chang.branch;
import java.util.Scanner;
public class IfDemo1 {
public static void main(String[] args) {
// 目标:需要同学们掌握If分支的三种形式的用法和执行流程
// 需求:测量用户体温、发现体温高于37度就报警
double t = 38.9;
if (t > 37) {
System.out.println("这个人温度异常!");
}
// 需求:发红包、你的钱包余额是99元,现在要发出90元。
// 如果钱够,触发发红包的动作,如果钱不够,则提示余额不足:
double money = 99;
if (money >= 90) {
System.out.println("发红包成功了!");
}else {
System.out.println("余额不足!");
}
// 需求3:某个公司有一个绩效系统,根据员工的打分输出对应的绩效级别。
// [0-60] D [60-80] C [80-90] B [90-100] A
Scanner sc = new Scanner(System.in);
System.out.println("请输入员工积分:");
int score = sc.nextInt();
if (score >= 0 && score < 60) {
System.out.println("D");
}else if(score >= 60 && score < 80) {
System.out.println("C");
}else if(score >= 80 && score < 90) {
System.out.println("B");
}else if(score >= 90 && score <= 100) {
System.out.println("A");
}else {
System.out.println("您输入的积分有问题!");
}
}
}
Switch分支:
是通过比较值来决定执行哪条分支。
switch分支的执行流程:
1)先执行表达式的值,再拿着这个值去与case后的值进行匹配;
2)与哪个case后面的值匹配值为true,就执行哪个case块的代码,遇到break,就跳出switch分支。
3)如果全部case后的值与之匹配都是false,则执行default块的代码。
2.循环
for循环:控制一段代码反复执行多次。
for循环的基本结构:
for 循环案例详细流程说明:
例子:
1-100的奇数和
package cn.chang.loop;public class ForDemo2 {public static void main(String[] args) {// 定义变量sum用于求和int sum = 0;// for循环for (int i = 1; i <= 100; i += 2) {sum += i; // sum = sum + i}System.out.println("1-100的奇数和: " + sum);}
}