我的Java学习笔记(一)
变量
变量 - 指代在内存中开辟的存储空间,用于存放运算过程中需要用到的数据;
1.变量在使用前,必须声明+初始化;
声明:类型 变量名
初始化:第一次赋值
2.同名变量不可以重复声明;
3.变量的命名规范:可以由字母、数字、"_“和”$"符组成;首字符不能以数字开头;
4.变量的命名规则:变量的命名需要采用“驼峰命名法”,即如果变量的名字由多个单词组成,除第一个单词外,其他单词的首字母大写,其余的字母小写,例如:salary、javaScore、studentName等。
Java数据类型:
数据基本类型、引用类型
基本数据类型(8种):
byte/short/int/long - 整数
float/double - 小数
char/boolean - 字符/布尔
整数类:
1.赋值的时候,不可以超过类型的取值范围
2.小范围赋值给大范围,自动类型转换/隐式类型转换
3.大范围赋值给小范围,超范围了,如果一定赋值,强制类型转换,保留低位->溢出,精度缺失
4.整数的字面量/直接量,默认类型是int
5.给long赋值,在值的最后加上l/L,例 long a = 10000000000L;
6.int最大值和long最大值
7.获得当前系统时间 - long 毫秒数
浮点类型:
float:单精度 32位 1符号位 8位指数位 23尾数位
float的范围为-2^128 ~ +2^128
double:双精度 64位 1符号位 11位指数位 52尾数位
double的范围为-2^1024 ~ +2^1024
1.小数的直接量默认是double类型
2.精度缺失
单字符类型:
char:16位 没有负数 1111 1111 1111 = 2^16-1 = 65535
char的ASCII码 a-z A-Z (a-97,A-65)
换行;\r-回车;\t-制表符Tab;反斜杠\
boolean类型:
1.boolean类型的值就两个:true/false,true表示条件成立,而false表示条件不成立
2.表示命题是否成立 - boolean类型表达式
3.适用于逻辑运算,表示某个条件是否成立。一般用于程序的流程控制
运算符
运算符(会将左右两边变量统一):±/ ++ – & && | || ! > < >= <= == !=
字符串拼接: "+"可以实现字符串的连接,同时可以实现字符串与其他数据类型的“相连”
“” 和任何变量相加都是字符串
比较运算符: >,<,>=,<=,!=,==结果都是boolean类型
逻辑运算符: &&,&,||,|,!结果都是boolean类型,运算符左右两边都是boolean类型表达式
赋值运算符: =,+=,-=,/=,=
位运算
位运算: & | ^(异或)
一个数和另一个数异或计算两次,结果还是自己本身(用于加密和解密)
位移运算
位移运算: 补码 - 补位补符号位
>> 右移=/2
<< 左移=*2
>>> 无符号右移->永远补0(正数>>>和>>结果一样,负数>>>变成正数)
三目运算
三目运算: ? :
boolean表达式?值1:值2
boolean表达式为true,结果就是值1,表达式为false,结果就是值2
逻辑控制语句
1.顺序
2.条件分支
if(条件boolean表达式){
符合条件做的事
}
switch(){
case :
}
3.循环
while和do-while语句
whlie(循环条件 boolean表达式){
循环体
}
do{
循环体
}
whlie(循环条件 boolean表达式);
while和do-while语句的区别:
while循环先判断再执行;
do-while循环先执行一次,再判断
for循环语句
for(表达式1; 表达式2; 表达式3){
语句块(循环体)
}
随机数
Math.random -> Double类型,范围[0,1)
int random = (int) (Math.random() * 100);
递归方法
自己调用自己,必须有结束的判断条件
数组
数组(存一堆数 - 类型统一的):
数组的定义
数据类型[ ] 数组名 = new 数据类型[大小]
方式一:只能在声明的同时赋值
int[] a = {1,2,3,4};
方法二:再次赋值时也可以使用
int[] b = new int[] {1,2,3,4,5};
方式一和方式二,都是在数组定义的时候就已经确定了元素和长度
数组长度:数组元素的个数,长度不可变
方式三:只是定义了数组的长度,有默认值0
int[] c = new int[10];
数组排序和方法
1.选择排序:每一轮找出最小的元素放在前面
public static int[] selectionSort(int[] arr){
for (int i = 0; i < arr.length - 1; i++){
for (int j = i + 1; j < arr.length; j++){
if (arr[i] > arr[j]){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
return arr;
}
2.冒泡排序:比较相邻的元素,将小的放到前面
public static int[] bubbleSort(int[] arr){
for (int i = 0; i < arr.length-1; i++){
for (int j = 0; j < arr.length - i - 1; j++){
if (arr[j] > arr[j + 1]){
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
return arr;
}
3.插入排序:将数组分为两部分, 将后部分的第一个逐一与前部分每一个元素比较,在合理位置插入
public static int[] insertSort(int[] arr){
int i, j, k;
for (i = 1; i < arr.length; i++){
t = arr[i];
// 利用循环查找插入位置:到头j=-1
for (j = i - 1; j >= 0; j--){
if (t < arr[j]){
arr[j + 1] = arr[j];// [j] -> [j+1] 向后移动
} else{// t不小于arr[j]
break;// 找到插入位置:t不小于arr[j]
}
}
arr[j + 1] = t;// 插入t -> [j+1]
}
return arr;
}
4.快速排序:选择一个关键值作为基准值。比基准值小的都在左边序列(一般是无序的),比基准值大的都在右边(一般是无序的)。一般选择序列的第一个元素
5.系统排序:Arrays.sort
方法
方法的五个要素:修饰词、返回值类型、方法名、参数列表、方法体;
Java常用函数
System.arraycopy(arg0, arg1, arg2, arg3, arg4);复制
// arg0:要复制的数组 - 源数组
// arg1:从源数组要复制元素的起始位置下标
// arg2:复制的目标数组 - 到哪个数组
// arg3:把源数组的元素复制到目标数组的哪个位置开始
// arg4:要复制的元素个数
Arrays.copyOf(arg0, arg1);
// arg0:源数组
// arg1:生成的新数组的长度;从源数组的第一个元素开始(能复制几个元素就复制几个元素)
Arrays.sort(red);自动从小到大排序
Arrays.toString(a);数组转成字符串
str1.equals(str2);比较字符串str1是否与str2相等
System.exit(0);强制退出程序
Math.ceil/floor/abs/sqrt/pow/round/random - 数学函数
String.charAt - 将字符串拆解成字符
long time = System.currentTimeMillis() - 得到格林威治时间自 1970 年 1 月 1 日凌晨 00:00:00 到当前系统时间的毫秒数(返回值为 long 类型)