基础语法
包其实就是文件夹
常量
常量:在程序执行的过程中,其值不发生改变的量
分类:
- 字面值常量
- 自定义常量(后面讲)
字面值常量
- 字符串常量 "hello"
整数常量 12,23
小数常量 12.345
字符常量 'a','A','0'
布尔常量 true,false
空常量 null
整数常量四种表现形式
- 二进制 由0,1组成。以0b开头。
八进制 由0,1,...7组成。以0开头。
十进制 由0,1,...9组成。整数默认是十进制。
十六进制 由0,1,...9,a,b,c,d,e,f(大小写均可)组成。以0x开头。
进制转换(了解)
(1)其他进制到十进制
系数:就是每一个位上的数值
基数:x进制的基数就是x
权:对每一个位上的数据,从右,并且从0开始编号,对应的编号就是该数据的权。
结果:系数*基数^权次幂之和。
(2)十进制到其他进制
除基取余,直到商为0,余数反转。
(3)进制转换的快速转换法
A:十进制和二进制间的转换
8421码。
B:二进制到八进制,十六进制的转换
变量
变量定义的两种格式:
- 数据类型 变量名 = 初始化值;
- 数据类型 变量名;
变量名 = 初始化值;
数据类型(掌握)
数据类型分类:
- 基本数据类型:4类8种
- 引用数据类型:类,接口,数组。
基本数据类型
A:整数 占用字节数
byte 1
short 2
int (默认) 4
long 8
B:浮点数
float 4
double(默认) 8
C:字符
char 2
D:布尔
boolean 1
注意:
整数默认是int类型,浮点数默认是double。
长整数要加L或者l。
单精度的浮点数要加F或者f。
数据类型转换(掌握)
-
boolean
类型不参与转换 - 默认转换
- 从小到大
- byte,short,char -- int -- long -- float -- double
- byte,short,char之间不相互转换,直接转成int类型参与运算。
- 强制转换
- 从大到小,可能会有精度的损失,一般不建议这样使用。
- 格式:目标数据类型 变量名 = (目标数据类型) (被转换的数据);
//思考题和面试题
//1. 下面两种方式有区别吗?
float f1 = 12.345f;
float f2 = (float)12.345;//容易损失精度,默认double
//2. 下面的程序有问题吗,如果有,在哪里呢?
byte b1 = 3;
byte b2 = 4;
byte b3 = b1 + b2; //两个byte相加自动转换为int,应该为(byte)(b1+b2)
byte b4 = 3 + 4;//常量默认int类型,再转换为byte会出错
//3. 下面的操作结果是什么呢?
byte b = 130; //byte的范围是-128--127
//可以使用 byte b = (byte)300,实际b=-126,是原码,补码,反码
//4. 字符参与运算
//ASCII里面的值
/* 'a' 97
'A' 65
'0' 48
*/
System.out.println('a'); // a
System.out.println('a' + 1); //98
//5. 字符串参与运算。这里其实是字符串的连接
System.out.println("hello"+'a'+1); //helloa1
System.out.println('a'+1+"hello"); //98hello
System.out.println("5+5="+5+5); //5+5=55
System.out.println(5+5+"=5+5"); //10=5+5
注意事项
-
在定义Long或者Float类型变量的时候,要加L或者f。
-
整数默认是int类型,浮点数默认是double。
-
byte,short在定义的时候,他们接收的其实是一个int类型的值。 自己做了一个数据检测的,如果不再它们的范围内,就报错。
-
byte值的问题
byte b1 = 127;
byte b2 = (byte)128; //-128
byte b3 = (byte)129; //-127
byte b4 = (byte)130; //-126
//byte的范围:-128 ~ 127
// 128:10000000
// -128:10000000 (这里的1即是符号位,也是数值位)
- 数据类型转换之默认转换
- byte,short,char -- int -- long -- float -- double
long: 8个字节
float:4个字节
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
- Java语言中的字符char可以存储一个中文汉字吗?为什么呢?
- 可以。因为java语言中的字符占用两个字节。
- Java语言采用的是Unicode编码。
运算符(掌握)
算术运算符
-
+
的用法- 加法
- 正号
- 字符串连接符
-
/
和%
的区别- 数据做除法操作的时候,/取得是商,%取得是余数
-
++
和--
的用法- 放在操作数的前面:先自增或者自减,再参与操作
int a = 10;
int b = ++a; //b=11 - 放在操作数的后面:先参与操作,再自增或者自减
int a = 10;
int b = a++; //b=10
- 放在操作数的前面:先自增或者自减,再参与操作
赋值运算符
-
=,+=,-=,*=,/=,%=
等 -
=
叫做赋值运算符,也是最基本的赋值运算符
int x = 10; 把10赋值给int类型的变量x。 - 扩展的赋值运算符的特点
- 隐含了自动强制转换。
//请问上面的代码哪个有问题?
short s = 1;
s = s + 1;
short s = 1;
s += 1;
比较运算符
==,!=,>,>=,<,<=
- 无论运算符两端简单还是复杂最终结果是boolean类型。
- 千万不要把==写成了=
逻辑运算符
&,|,^,!,&&,||
- 结论
-
&
有false则false -
|
:有true则true -
^
:相同则false,不同则true。 -
!
:非true则false,非false则true -
&&
:结果和&是一样的,只不过有短路效果。左边是false,右边不执行。 -
||
:结果和|是一样的,只不过有短路效果。左边是true,右边不执行。
-
位运算符(了解)
A:^的特殊用法
一个数据针对另一个数据位异或两次,该数不变
B:面试题
a:请实现两个变量的交换
**采用第三方变量
**用位异或运算符
左边a,b,a
右边a^b
b:请用最有效率的方式计算出2乘以8的结果
2<<3
三元运算符
A:格式
比较表达式?表达式1:表达式2;
B:执行流程:
首先计算比较表达式的值,看是true还是false。
如果是true,表达式1就是结果。
如果是false,表达式2就是结果。
C:案例:
a:比较两个数据是否相等
b:获取两个数据中的最大值
c:获取三个数据中的最大值
键盘录入(掌握)
A:导包
import java.util.Scanner;
B:创建对象
Scanner sc = new Scanner(System.in);
C:获取数据
int x = sc.nextInt();
网友评论