基本数据类型变量:
整数型:byte、short、int(默认)、long
浮点型:float、double(默认)
布尔型:boolean
字符型:char
引用数据类型变量:String、class、interface、数组、标识、枚举
自动类型转换:容量小的数据类型自动转换成容量大的数据类型。
强制类型转换:容量大的数据类型转换成容量小的数据类型时,要加上强制转换符(有可能造成精度降低或数据溢出)。
(面试)
单个字节表示的整数范围(一个byte字节由8个位组成)
byte的取值范围是:-128~127
非负数表示的整数范围:0000 0000~0111 1111 = 0 ~ 127
负数表示的整数范围:1000 0000~1111 1111 = -128 ~ -1
(面试)
byte类型的两个变量进行加法运算时,会自动提升为int类型
byte b1=10; byte b2=20;
b1=b1+b2;(×) b1+=b2;(√) b1=(byte)(b1+b2);(√)
(面试)
float类型和double类型的计算会存在误差(可用BigDecimal类型)。
两个整数相除,结果保留整数,且分母不能为0。
双引号引起来的是String类型的字符串,单引号引起来的是char类型的字符。
StringBuffer与String的区别在于拼接字符串,是一个可变长的字符串。
若加号的两边任意一边为字符串,则加号用于拼接。
ASCII表:换行-10、空格-32、‘0’-48、‘A’-65、‘a’-97
二进制:逢二进一,即只有0和1两个值。
二进制补码数值的最高位(即最左边)是符号位(0为非负数/1为负数)。
八进制:java中八进制要以0开头。
十进制转换成二进制
整数部分:"除2取余,逆序排列"
小数部分:"乘2取整,顺序排列"
负十进制转换成二进制
先将十进制的绝对值转换为二进制,然后进行按位取反再加1。
(负二转十,先减1,再取反)
~按位取反
byte b1=3; ~b1 原码:0000 0011
反码:1111 1100
补码:1000 0011 符号位不变,其他位取反
补码修复:1000 0100 最高位是0/1,补码-1/+1修复,即~b1=-4
十六进制:以0x或0X开头,逢十六进一,0-9以上的值用ABCDEF..表示。
(面试)短路特性
对于&&( || )来说,第一个判断语句为false(true),会自动跳过第二个判断语句。
int ia = 3; int ib = 5;
boolean b3 = (ia++ == 4) && (++ib == 5)
System.out.println(ia,ib,b3);
4 5 false
局部变量:方法或语句块的内部定义的变量
成员变量:方法外部、类的内部定义的变量
方法主要由权限修饰符、返回值、方法名和参数列表四个部分组成。
访问修饰符 | 同一个类 | 同包 | 不同包,子类 | 不同包,非子类 |
private | √ | |||
default(默认) | √ | √ | ||
protected | √ | √ | √ | |
public | √ | √ | √ |
^异或:两边相同为0,不同为1,true^true=false 自反性:a=a^b^b
<<左移/右移>>相当于乘(除)以2的移位数 >>>右移且左边的最高位始终补0
三目运算符:
结果表达式?表达式1(结果为true输出):表达式2(结果为false输出);
(面试)
java对包、类、方法、参数和变量等要素命名时使用的字符序列称为标识符。
1、由字母、数字、下划线和美元符号$组成
2、不能以数字开头
3、区分大小写
4、长度无限制
5、不能是java中的保留关键字
命名规范:
类名:首字母大写,后面每个单词的首字母大写(大驼峰式)。
方法:首字母小写,后面每个单词的首字母大写(小驼峰式)。
变量:全部是小写。
转义字符:
\n 将当前位置移到下行的开头
\r 将当前位置移到本行的开头
\t 水平制表符,列对齐
\\ 代表一个反斜线字符
\’ 代表一个单引号字符
\” 代表一个双引号字符
三种基本结构:顺序结构、分支结构(if、switch)和循环结构(for、while、do~while)。
if可进行区间判断 switch可进行等值判断 for适合在循环次数固定的情况下使用
while先判断,后执行 do~while先执行,后判断
break语句用于执行完一个case分支后使程序跳出switch语句块;如果case后面没有写break,则直接往下执行。case后面的执行体可写{ }也可以不写{ }。
continue语句用于终止本轮本次循环,即本次循环中continue后面的代码不执行,进行下一次循环的入口判断。
(面试)
多重循环:for(){ //外层循环控制行数
for(){ //内层循环控制列数 } }
标签名:循环体{ break 标签名; } 可退出指定层的循环
扫描器:Scanner input = new Scanner(System.in);
获取一个字符串:input.next();
获取一行(空格后可继续输入):input.nextLine();
判断输入类型:if(input.hasNext___()) { }
数组是相同数据类型的多个数据的容器。
格式1. 数据类型[ ] 数组名称 = new 数据类型[数组长度];
格式2. 数据类型[ ] 数组名称 = {数组内容 1,数组内容 2,数组内容 3...数组内容 n};
格式3. 数据类型[ ] 数组名; 格式3属于只创建了数组引用名,并未在内存创建数组空间。
格式4. 数据类型[ ] 数组名称 = new 数据类型[]{内容 1,内容 2,内容 3...内容 n};
使用new关键字来创建该类的对象,这个过程叫做类的实例化。
下标可以理解为数组中内容的数字序号,从0开始,对于长度为n的数组,下标的范围是0~n-1。
数组长度获取:数组名称.length
(面试)
一维数组的优缺点:
1、可以直接通过下标的方式访问指定位置的元素,速度很快
2、数组要求所有元素的类型相同
3、数组要求内存空间连续,并且长度一旦确定就不能修改
4、增加和删除元素时可能移动大量元素,效率低
foreach语句遍历数组
int[ ] str = {3,2,1,4,5};
for(int x:str){ System.out.println(x); }
Random random = new Random();
int num = random.nextInt(900)+100; //100~999的随机数生成
冒泡排序
升序排列的口诀:
N个数字来排队,两两相比小靠前,外层循环length-1,内层循环length-i-1
降序排序的口诀:
N个数字来排队,两两相比大靠前,外层循环length-1,内层循环length-i-1
(外层循环控制轮数i,内层循环控制每轮比较的次数)
二分查找(折半查找):
要求数组数据必须采用顺序存储结构有序排列(使用三个下标和while循环)。
当中间数据大于查找数据时,最大下标移动至中间数据减1的位置。
maxIndex = centerIndex-1;
当中间数据小于查找数据时,最小下标移动至中间数据加1的位置。
minIndex = centerIndex+1;
在线时间
SimpleDateFormat time = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);
System.err(报错、手动变红).println();