数据(Data)
是系统的核心,我们编程的目的就是为了操作数据(增,删,改,查)
在代码中如何定义和存储数据呢?需要通过变量或者常量以及数据类型
注意:Java是一种强类型的语言,也就是说任何数据都需要有类型.
JavaScript,弱类型的编程语言,定义变量时无需声明数据类型
Java语言分为基本类型和对象类型两大类数据类型(无数种)
1)基本类型(8种):
名称 容量 范围 默认值
byte 字节型 占1字节=8bit -128~127 0
short 短整型 占2字节=16bit -32768~32767 0
int 整型 占4字节=32bit -2147483648~2147483647 0
long 长整型 占8字节=64bit -2^63 ~ 2^63 - 1 0
float 单精度浮点数 占4字节=32bit -3.4E+38 ~ 3.4E+38 0.0
double 双精度浮点数 占8字节=64bit -1.797E+308 ~ 1.797E+308 0.0
char 字符型 占2字节=16bit ‘a‘ , ‘B‘, ‘您‘ \u0000
boolean 布尔类型 占1字节=8bit true/false false
注:1.JAVA中所有的数字都是带符号的
2.字符型和字符串是不同的,字符型用单引号,字符串用双引号
char c = ‘您‘;
String s = "好好学习,天天向上!"
3.java中,你写一个整数,默认是int类型的,写一个小数,默认是double类型的.
float f = 3.4;//编译错误,3.4默认是double类型的,不能赋值给float类型的变量
4.cmd命令行中查看中文字的unicode编码的方法
a.打开命令行
b.输入native2ascii回车
c.输入想查询的中文字回车即可得到对应的unicode
ctrl + c 关闭当前转换进程
2)对象类型
a. 内置对象类型(API)
Scanner,Math,Random,String...
b. 自定义对象类型
我们编程时写过的所有类都是自定义对象类型
-------------------------------------------------------------------
特殊符号:
\t 制表符 表示隔开一个tab的距离
\n 换行 到下一行的起始位置
\r 回车 到当前行的起始位置
\b 退格 相当于键盘上的BackSpace
\\ 反斜杠
\" 双引号
\‘ 单引号
-------------------------------------------------------------------
变量
语法
数据类型 变量名 [= 给变量的初始值];
注:
变量名和类名一样,都是由数字,字母,_,$组成并且不能是数字开头
变量名可以是中文汉字,但是不推荐,因为可能出现乱码问题
变量名尽量首字母小写,以后每个单词首字母大写(常量除外)
如: int num = 1;
int inputInt = sc.nextInt();
|.可以在声明的时候直接初始化(第一次给变量赋值)
如:int i = 100;
double d = 3.14;
String str = "你好!";
||.先声明变量,在使用前,初始化
如:int i;
.....
i = 100;
字面量:就是指代数据本身,它也属于变量
"你好!",‘A‘,3.14,100
注意:所有程序都是由变量所组成的!
给变量赋值的方式:
a.字面量赋值
int i = 3;
b.方法赋值
public int add(int i,int j){
return i + j;
}
int i = add(3,4);
c.表达式赋值
表达式:由变量和运算符组成的合法的语句
int i = sc.nextInt();
int a = 1, b = 2;
int i = a + b;
----------------------------------------------------------
常量
在变量的基础上加一个关键字 -- final
常量一定要初始化,它的值是不能改变的
如:
final int ROW_EACH_PAGE = 10;//定义了一个常量
常量的命名规则:使用大写字母,并且中间用下划线隔开
注意:常量比字面量携带更多的信息,提高了代码的可读性
----------------------------------------------------------
数据类型转换:
1.自动类型转换(隐式类型转换)
由精度小的数据类型可以自动转换成精度大的数据类型
如:byte -> short -> int -> long
char -> int
boolean -> int //error
2.强制类型转换
由精度大的数据类型往精度小的数据类型转换时,可能损失精度,
编译器会报错,必须采用强制转换
如:
1)在所需转换的数值前面加(类型)
注:这里的类型,可以是基本类型,也可以是对象类型
int i = 220900;
char c = (char)i;
float f = (float)3.14;
2)只有long,double,float可以这样转换
在所需转换的数值后面加L/l,D/d,F/f
float f = 3.14F;
注意:
在JAVA中,两种数据类型进行运算时,结果都是偏向数据类型
更大的那一方
----------------------------------------------------------
1byte = 8bit
1K = 1024byte
1MB = 1024K
1GB = 1024MB
1TB = 1024GB
1PB = 1024TB
1EB = 1024PB
1ZB = 1024EB
1YB = 1024ZB
1BB = 1024YB
1NB = 1024BB
1DB = 1024NB
注:手机流量是以1000为计算界限的
----------------------------------------------------------
进制
二进制:只有0和1所组成,每遇到2进1
二进制 十进制
0101 1*2^2 + 0*2^1 + 1*2^0 = 5
1010 1*2^3 + 1*2^1 = 10;
1111 15
二进制转十进制
先从右往左标记,从0开始,然后累加相应位置数字乘以进制数的标记次方
十进制转二进制
连续除以2,然后倒取余数
小练习:
39 --> 0010 0111
110010 --> 50
-------------------------------------------------------------
0011 1000 ---> 56
0001 1100 ---> 28
0000 1110 ---> 14
0000 0111 ---> 7
位移运算 -- 所有运算中效率最高的
二进制中,向右移动一位,相当于除以2,向左移动一位,相当于乘以2
八进制:由0~7组成,每逢8进1
032 0*8^2 + 3*8^1 + 2*8^0 = 26
十六进制:由0~9和A~F组成,以0x开头
int i = 0x0029;
2*16^1 + 9*16^0 = 41
小练习:
求出0x0419的二进制?
0x0419
求十进制:4*16^2 + 1*16^1 + 9*16^0 = 1049
求二进制:0100 0001 1001
系统内置的转换方法(十进制转换成相应字符串):
toBinaryString(int i) 转换二进制字符串表示
toHexString(int i) 转换十六进制字符串表示
toOctalString(int i) 转换八进制字符串表示
------------------------------------------------------------------
运算符
|.算术运算符
+ 1.数学运算 2.字符串的连接
- 减法(负号)
* 乘法
/ 除法 100/3 = 33 100/3.0 = 33.33333333
% 取余 100%3 = 1
= 表示赋值 int i = 3; 把3赋值给int类型的变量i
== 表示等于 返回类型:boolean
+= -= *= /= %=
如:
b = b + 1; --> b += 1;//后面这种写法可以避免类型转换问题
++ 自增
-- 自减
前++ 表示++写在变量的前面,表达式和变量的值本身都加1(先自增,后赋值)
后++ 表示++写在变量的后面,表达式的值不变,变量加1(先赋值,后自增)
位移运算:性能是最高的
<< 带符号左移位
>> 带符号右移位
>>> 不带符号右移位
注意:没有不带符号左移位(<<<)
<<= >>= >>>=
面试题:
请你用最快并且性能最高的方式得到4的3次方? 4<<3
算术运算符是一种二元运算符,需要两个参数来参与
对算术运算符来说,操作数只能是数字类型(整型,浮点型)
特殊例外:字符串可以用+运算(拼接)
低精度和高精度做运算时,结果是高精度
相同精度数据进行运算,结果是它本身的数据类型
||.比较运算符(返回布尔类型)
< 小于
> 大于
<= 小于等于
>= 大于等于
!= 不等于
|||.逻辑运算符
&& 短路逻辑与 同真为真,同假为假,只要有一个为假,结果为假
|| 逻辑或 同真为真,同假为假,只要有一个为真,结果为真
! 逻辑非 表示取反
如:
boolean b1 = true;
boolean b2 = false;
boolean b = b1 && b2;//false
b = b1 || b2;//true
b = !b1;//false
注意:
& 1.非短路的逻辑与(一般不用)
2.按位与
| 1.非短路的逻辑或(一般不用)
2.按位或
短路型和非短路型逻辑运算符的区别:
短路型运算符,如果运算符左边的结果可以决定整个式子的结果,
那么右边部分就不会执行了
所以,我们在编写代码的时候,需要考虑一下,把哪个条件放在运
算符前面
用逻辑与时,把两个条件中可能为false几率更大的一个放前面
用逻辑或时,把两个条件中可能为true几率更大的一个放前面
这样可以提升整个软件的性能.
||||.按位运算符
& 按位与(非短路逻辑与) 同0为0,同1为1,不同为0
| 按位或(非短路逻辑或) 同0为0,同1为1,不同为1
^ 按位异或 相同为0,不同为1
公式:
一个数连续异或同一个数两次,结果是它本身
5 ^ 7 ^ 7 = 5
如:
5的二进制:0101
7的二进制:0111
0101
& 0111
------
0101 -- 5 & 7 = 5
0101
| 0111
------
0111 -- 5 | 7 = 7
0101
^ 0111
------
0010 -- 5 ^ 7 = 2
^ 0111
------
0101
~ 按位取反
0变1,1变0
负数,在计算机中是以补码的形式存储的
补码 = 原码取反 + 1
~x = -(x + 1)
负数的二进制如何得到?
2的二进制 00000000 00000000 00000000 00000010
按位取反 11111111 11111111 11111111 11111101
再+1 11111111 11111111 11111111 11111110
-2的二进制 11111111 11111111 11111111 11111110
-9的二进制:
00000000 00000000 00000000 00001001
11111111 11111111 11111111 11110110
11111111 11111111 11111111 11110111
~9 = -10
11111111 11111111 11111111 11110110
00000000 00000000 00000000 00001010
11111111 11111111 11111111 11110110
--------------------------------------------------------------
三目运算符 ? :
作用:条件判断
condition ? expression_1 : expression_2;
条件?表达式1:表达式2;
当条件成立时,执行表达式1,当条件不成立是,执行表达式2
相当于
if(条件){
//表达式1;
}else{
//表达式2;
}