Java基础2
###02.10_Java语言基础(数据类型的概述和分类)(掌握)
* A:为什么有数据类型
* Java语言是强类型语言,对于每一种数据都定义了明确的具体数据类型,在内存中分配了不同大小的内存空间
* B:Java中数据类型的分类
* 基本数据类型
* 引用数据类型
* 面向对象部分讲解
* C:基本数据类型分类(4类8种)
* 整数型
* byte占一个字节 -128到127 **(重点)**
* short占两个字 -2^15~2^15-1
* int占四个字节 -2^31~2^31-1
* long占八个字节 -2^63~2^63-1
* 浮点型
* float占四个字节-3.403E38~3.403E38 单精度
* double占八个字节-1.798E308~1.798E308双精度
* 字符型
* char占两个字节0~65535 **(重点)**
* 布尔型
* boolean
* boolean理论上是占八分之一个字节,因为一个开关就可以决定是true和false了,但是java中boolean类型没有明确指定他的大小
布尔类型理论上占八分之一字节,但在Java中没有明确规定。
在Java中直接写一个小数是一个double类型,把双精度赋值给单精度可能会损失精度。要把小数赋值给单精度则要说明该数值是单精度,于是在数值后面加一"f"或"F"
在Java中直接写一个整数是int类型,将一个超过int范围(-2^31~2^31-1 )的整数赋值给long类型则会报错。那么则可以说明该数值是long类型,于是在数值后面加"l"或"L"
char类型,字符用单引号‘’存放。char可以存中文。中文占两个字节,而char类型也是占两个字节,所以char也可以存放中文
###02.11_Java语言基础(定义不同数据类型的变量)(掌握)
* A:案例演示
* 定义不同基本数据类型的变量,并输出
* 赋值时候注意float类型,long类型
###02.12_Java语言基础(使用变量的注意事项)(掌握)
* A:案例演示
* a:作用域问题
* 同一个区域不能使用相同的变量名
* b:初始化值问题
* 局部变量在使用之前必须赋值
* c:一条语句可以定义几个变量
* inta,b,c...;
方法内部的为局部变量,方法外部的为全局变量。局部变量在使用前必须初始化(赋值)
一条语句可以
int a 变量声明/变量定义
a = 2 变量赋值
int a = 2 变量声明定义与赋值
###02.13_Java语言基础(数据类型转换之隐式转换)(掌握)
* A:案例演示
* a:int + int = int
* b:byte +int = int
* B:Java中的默认转换规则
* 取值范围小的数据类型与取值范围大的数据类型进行运算,会先将小的数据类型提升为大的,再运算
* C:画图解释byte+int类型的问题
###02.14_Java语言基础(数据类型转换之强制转换)(掌握)
* A:强制转换问题
* int a = 10;
* byte b = 20;
* b = a + b;
为什么要进行强制转换,因为会出现下面这种情况:
运行出错,a和b是变量,a是int类型,b是byte类型,相加时小的数据类型提升为大的,则byte类型提升为int类型,然后在计算,最后得出的结果是int类型,而c是byte类型,所以不能将a+b的结果赋值给c
* B:强制转换的格式
* b = (byte)(a +b);
* C:强制转换的注意事项
* 如果超出了被赋值的数据类型的取值范围得到的结果会与你期望的结果不同
* 最大值+1变成最小值,最小值-1变成最大值
运行出错,需要的是byte型,但是a+b得到的是int型,因为byte类型的变量在进行运算的时候,会自动类型提升为int类型
Byte的范围是-128~127,再给类型为byte的b赋值时200超过了其范围所以不能赋值,于是报错
###02.15_Java语言基础(面试题之变量相加和常量相加的区别)(掌握)
* A:案例演示
* 面试题:看下面的程序是否有问题,如果有问题,请指出并说明理由。
* byte b1 = 3;
* byte b2 = 4;
* byte b3 = b1 +b2;
* 从两方面去回答这个题
* b1和b2是两个变量,变量里面存储的值都是变化的,+所以在程序运行中JVM是无法判断里面具体的值
* byte类型的变量在进行运算的时候,会自动类型提升为int类型
* byte b4 = 3 + 4;
* 3和4都是常量,java有常量优化机制,就是在编译的的时候直接把3和4的结果赋值给b4了
可以得出结果30,a和b是变量,a是int类型,b是byte类型,相加时小的数据类型提升为大的,则byte类型提升为int类型,然后在计算,最后得出的结果是int类型,而c是int类型,所以可以将a+b的结果赋值给c
10和20都是常量,java有常量优化机制,就是在编译的的时候直接把10和20相加的结果赋值给c了
###02.16_Java语言基础(long与float的取值范围谁大谁小)(了解)
* 进行混合运算的时候,byte,short,char不会相互转换,都会自动类型提升为int类型,其他类型进行混合运算的是小的数据类型提升为大的
* byte,short,char-- int -- long -- float -- double
* long: 8个字节
* float:4个字节
* IEEE754标准
* 4个字节是32个二进制位
* 1位是符号位
* 8位是指数位
* 00000000 11111111
* 0到255
* 1到254
* -126到127
* 23位是尾数位
* 每个指数位减去127
* A:它们底层的存储结构不同。
* B:float表示的数据范围比long的范围要大
* long:2^63-1
* float:3.4*10^38 > 2*10^38 > 2*8^38 =2*2^3^38 = 2*2^114 > 2^63-1
###02.17_Java语言基础(字符和字符串参与运算)(掌握)
* A:案例演示
* System.out.println('a');
* System.out.println('a'+1);
* 通过看结果知道'a'的值是多少,由此引出ASCII码表
* B:ASCII码表的概述
* 记住三个值:
* '0' 48
* 'A' 65
* 'a' 97
* C:案例演示
* System.out.println("hello"+'a'+1);
* System.out.println('a'+1+"hello");
单个字符可以转换为ascll数字,字符串不可以,所以不能计算只能拼接
* D:+在有字符串参与中被称为字符串连接符
* System.out.println("5+5="+5+5);
* System.out.println(5+5+"=5+5");
###02.18_Java语言基础(char数据类型)(掌握)
* A:char c = 97; 0到65535
* B:Java语言中的字符char可以存储一个中文汉字吗?为什么呢?
* 可以。因为Java语言采用的是Unicode编码。Unicode编码中的每个字符占用两个字节。中文也是占的两个字节
* 所以,Java中的字符可以存储一个中文汉字
###02.19_Java语言基础(算术运算符的基本用法)(掌握)
* A:什么是运算符
* 就是对常量和变量进行操作的符号。
* B:运算符的分类
* 算术运算符,赋值运算符,比较(关系或条件)运算符,逻辑运算符,位运算符,三目(元)运算符
* C:算数运算符有哪些
* +,-,*,/,%,++,--
* D:注意事项:
* a:+号在java中有三种作用,代表正号,做加法运算,字符串的连接符
* b:整数相除只能得到整数。如果想得到小数,必须把数据变化为浮点数类型
* c:/获取的是除法操作的商,%获取的是除法操作的余数
* %运算符
* 当左边的绝对值小于右边绝对值时,结果是左边
* 当左边的绝对值等于右边或是右边的倍数时,结果是0
* 当左边的绝对值大于右边绝对值时,结果是余数
* %运算符结果的符号只和左边有关系,与右边无关
* 任何一个正整数%2结果不是0就是1可以用来当作切换条件
###02.20_Java语言基础(算术运算符++和--的用法)(掌握)
* A:++,--运算符的作用
* 自加(++)自减(--)运算
* ++:自加。对原有的数据进行+1
* --:自减。对原有的数据进行-1
* B:案例演示
* a:单独使用:
* 放在操作数的前面和后面效果一样。(这种用法是我们比较常见的)
* b:参与运算使用:
* 放在操作数的前面,先自增或者自减,然后再参与运算。
* 放在操作数的后面,先参与运算,再自增或者自减。
###02.21_Java语言基础(算术运算符++和--的练习)(掌握)
* A:案例演示
* 请分别计算出a,b,c的值?
*
inta = 10;
intb = 10;
intc = 10;
a= b++;
c= --a;
b= ++a;
a= c--;
* B:案例演示
* 请分别计算出x,y的值?
int x =4;
int y =(x++)+(++x)+(x*10);
* C:面试题
* byte b = 10;
* b++;
* b +=1;
* b =b+1;
* 问哪句会报错,为什么
b++;b+=1;b=b+1的计算过程都是b=b+1,但是b++和b+=1不报错,b=b+1报错,因为1是int类型,b为byte类型,b+1为int类型,不能直接赋值给b,但前面两个由于优化机制,计算出int类型结果后会强制转化为byte类型后再赋值给b
###02.22_Java语言基础(赋值运算符的基本用法)(掌握)
* A:赋值运算符有哪些
* a:基本的赋值运算符:=
* 把=右边的数据赋值给左边。
* b:扩展的赋值运算符:+=,-=,*=,/=,%=
* +=把左边和右边做加法,然后赋值给左边。
###02.23_Java语言基础(赋值运算符的面试题)(掌握)
* A:案例演示
* 面试题:看下面的程序是否有问题,如果有问题,请指出并说明理由。
* short s=1;s =s+1;
* short s=1;s+=1;
###02.24_Java语言基础(关系运算符的基本用法及其注意事项)(掌握)
* A:关系运算符有哪些(比较运算符,条件运算符)
* ==,!=,>,>=,<,<=
* 注意事项:
* 无论你的操作是简单还是复杂,结果是boolean类型。
* "=="不能写成"="。