Java是一个强类型的编程语言 所有的变量在第一次出现的时候 必须有数据类型
Java当中数据类型有多少种?
2种 [基本数据类型+引用数据类型]
或者
无数种[8种基本数据类型+无数种引用类型]
基本数据类型 简单数据类型 [语言内置的数据类型]
4类8种
布尔类型:boolean
==========================
*:只能使用true/false进行赋值 很纯粹~ 不能用0 1进行赋值
*:不能拿着数字进行赋值 Java又称为C+±- [去其糟粕取其精华]
字符类型:char
======================================
*:底层基于Unicode编码存储的 统一的都是2个字节 = 16位
这16个位都是数值位 没有符号位 取值范围:0 到2的16次方-1
char x1 = 'a'; //指定字面值的赋值方式
char x2 = '中'; //指定字面值的赋值方式
char x = 20013; //通过ASCII编码进行赋值
char y = '\u4e2d'; //通过Unicode编码进行赋值
*:可以使用jdk安装目录下的bin目录中的native2ascii命令进行转换
今后无论Struts还是SpringMVC的
I18N(internationalization)支持 都可能会使用它
它还可以直接转换整个文件 native2ascii 原文件.txt 处理后的文件.txt
事实上我们还可以将4e2d这样的16进制转换成10进制得到十进制整数
char z = '\t'; //转义字符
常用的转义字符:
\t \b \r \n
制表符 退格符 回车符 换行符
*:官方认证考试或者笔试当中经常出现后三种赋值
整数类型:符号位1 数值位n-1
取值范围:-2(n-1) 到 2(n-1)-1
其中n-1:符号位占用一个位 最后的-1:因为0占用一个正数编码
byte short int long
n: 8 16 32 64
* L/l
*:long类型需要加L/l 尽量加上大写L 防止肉眼犯错误
*:当超出int类型最大边界的时候 注意使用long类型
*:整数类型的默认类型是int类型
int num1 = 24; //通过十进制进行赋值
int num2 = 024; //通过八进制进行赋值
int num3 = 0x24; //通过十六进制进行赋值
int num4 = 0b1011; //通过二进制进行赋值
*:JDK7.0开始才允许使用0b1011这样的二进制赋值
*:JDK7.0为了增强数值的可读性 可以加_ (但是语法并不严谨)
*:笔试当中常见System.out.println(12+012+0x12);
*:十进制和二进制之间的转换
额 我不想写了 特别注意负数从-1开始做减法~
浮点类型:符号位 + 幂值位 + 数值位
float double
32 64
*
F/f D/d
常见面试题:
float number = 3.2E4F 当中的E和F分别表示什么
E:表示科学计数法 3.2*10(4)
F:表示float类型 因为默认的浮点类型是double 所以定义float必须加F
float: 符号位1 + 幂值位8 (默认值127) + 数值位23
double: 符号位1 + 幂值位11 (默认值1023) + 数值位52
关于幂指位默认值 float : 01111111 double :01111111111
127 1023
*:浮点类型二进制的转换 可以百度IEEE754
一定要注意那张草稿纸~
*:引申问题:2.0-1.1为什么不等于0.9
浮点型转换二进制可能涉及数值位的无限循环…
该如何解决~
BigDecimal 或者 1元等于100分
引用数据类型 自定义数据类型 [程序员自己开发的数据类型]
无数种
例如:class Student{} 例如:String Date 等等
关于最后10分钟流程控制当中的内容总结:
关于switch case
switch(变量){
case 值1: 对应的操作; break;
case 值2: 对应的操作; break;
case 值3: 对应的操作; break;
default : 默认的操作;
}
*:注意变量的类型
最开始支持byte short char int JDK5.0开始支持枚举 JDK7.0开始支持String
*:注意break机制 要学会利用break机制实现相邻分支的代码共享
你要明白break机制是为了给程序员提供便利的 而不是为了给我们添堵的~
例如:我一周晚上的安排
周一:开例会
周二:上课
周三:整理键盘
周四:上课
周五:开例会
周六:上课
周日:整理键盘
就可以使用break机制写成
switch(day){
case 1:
case 5: System.out.println(“开例会”);break;
case 2:
case 4:
case 6: System.out.println(“上课”);break;
case 3:
case 7: System.out.println(“整理键盘”);
}
所以说呢 学东西的时候要多思考为什么~多去在代码当中寻求的答案
关于for循环
for循环不是一辈子的填空题 你要理解
for(1;2;3){
4;
}
- 循环变量初始化 未必永远都是int i = ?
- 循环执行的条件 未必永远都是i>?或者i<?
- 循环的迭代条件 也就是每次循环后的变化 未必是i++或者i–
- 循环体 要重复执行的操作
例如打印1-100之间所有17的倍数
for(int i = 17;i<=100;i+=17){
System.out.println(i);
}
远远好于
for(int i = 1;i<=100;i++){
if(i%17==0){
System.out.println(i);
}
}
再例如打印a-z
for(char c = ’a’;c<=’z’;c++){
System.out.println©;
}
远远好于
for(int i = 97;i<123;i++){
System.out.println((char)i);
}
综上所述:编程是一门艺术 是理科 不要依赖死记硬背 不要模式化思维~
要做到无招胜有招~
基本运算符号
& 按位与
1 当一个正数%2的n次方的时候,可以直接使用&(2的n次方数-1)
因为在计算机的底层都是二进制
进行&运算 相当于对比一排二进制 基本不需要计算
89&3
二进制转换
89 28 15 95 37 38 45
89 = 64 + 16 + 8 + 1 = 1011001
89 28 15 95 37 38 45
%4 1 0 3 3 1 2 1
&3 1
89&3
0001011001
& 0000000011
-----------------------------
0000000001 = 1
28&3
28 = 16 + 8 + 4 = 11100
28&3
0000011100
& 0000000011
----------------------
0000000000 = 0
结论
%2 %4 %8 %16 %32 %64 ...
&1 3 &7 &15 &15 &63 ...
Java HashMap中的&的运用
默认的分组组数16
new Hash(5) // 8 会分成8组 为了&更高效的得出散列到哪个小组
new Hash(6) //8
new Hash(11) //16
67 22 62 28 52 %4
[0] 52 28
[1]
[2] 62 22
[3] 67