Javase之基础1
1、数据类型
byte 字节型 占1字节 范围是 -128~127
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。short 短整数类型 占2字节 范围是 -2^15~2^15 -1
int 整数类型 占4字节 范围是-2^31~2^31 -1
long 长整数类型 占8字节 范围是-2^63~2^63 -1
float 浮点型(单精度) 占4字节
double 浮点型(双精度) 占8字节
范围比较:long < float < double
2、变量
标识符命名:1、通常是字母、数字、_(下划线)、$组成
2、不能以数字开头
3、不能是Java关键字
4、不能使字面值(比如:true、false、null)
规范:骆驼命名 即变量或者函数由多个单词组成时,第一个单词首字母小写其后单词首字母大写(比如 myFirstName)
自增/自减:自增前缀:++a 赋值运算和输出语句中,先运算或输出然后再自增或自减
自增后缀:a++ 赋值运算和输出语句中,先自增或自减然后再数据或运算
3、switch用法
在我理解中,switch是一个对号入座的方法,
例子:switch(a){
case 1 :
System.out.println("我是1")
break;
case 2:
System.out.println("我是2")
break;
default :
System.out.println("我是其他")
break;(可省略)
}
注意:1、break 起到断点作用,若没有break则就算执行完了对应的那个case 语句还是会继续执行下一个case语句,并不会退出
2、与 if 语句作比较
a、if(条件1){
满足条件1
} else if(条件2){
满足条件2
}else{
不满足条件
}
所以不难看出,switch是等值判断,而if是条件判断(可等值可区间判断)
注意:在 if 判断语句中,数字可以用 == 若是字符比较则是用equals
4、循环(while、do - while、for)
1、while(循环条件){
循环操作
}
2、do{
循环操作(先执行一次,再去判断循环条件)
} while(循环条件)
3、for(int i = 1; i<=5; i++){
循环操作(5次)
}
补充:break 可以跳出循环,若是双重循环
a:
for(int i =1;i<=3;i++){
for(int j =1;j<=3;j++){
if( j==2){
break; //跳出内层循环
break a; //跳出外循环,因为有标签 a
}
}
}
5、堆和栈
栈:就是村方法和方法中的基本数据类型,频繁的创建和销毁数据结构。而像String、数组这些引用数据类型的名字存在栈里。
堆:堆中若是不复制就会自动初始化,整数为0,布尔为false,浮点为0.0,String为null,也就是引用数据类型会用到堆
6、数组
所谓数组就是一个容器,只不过里边存放的数据必须是相同类型的一组数据
声明:int [ ] n = new int [3];声明一个长度是3的int类型的数组
int [ ] n = new int [ ] {1,2,3}; 声明一个{1,2,3}的数组 (数组的下表是从0开始的)
若System.out.println(n) 则只是打印输出数组n的地址
所以可以用增强for遍历输出
for( int a : n) {
System.out.println(a);
}
数组的拓展:
a、数组的复制
System.arraycopy( src,srcpos,dest,destpos,length);
解释:src 原数组
srcpos 原数组开始复制位置
dest 目标数组
destpos 目标数组复制的位置
length 复制的长度
b、数组克隆
arr2 = arr1.clone();
这个不是把数组arr1的地址给了arr2,而是又创建了一个数组arr2,只是arr2的元素和arr1 一样,但是地址是不同的
c、把数组转换成字符串
Arrays.toString (arr) 数组转字符串
Arrays.sort(arr) 数组排序
Arrays.sort(arr,起始位置,终止位置) 数组排序范围单不包括终止位置
7、排序方法
a、冒泡排序:
外层循环每一次拿到一个值之后,都跟未排序的数组中的每一个元素进行比较,然后找到一个合适的值放在待排序的数组的最后。
每一次循环拿到一个待排序数组中的最大值,放在待排序数组中的末尾。
import java.util.Arrays;
public class MyTest {
public static void main(String[] args) {
int [ ] n = new int [] {5,4,3,2,1};
int temp;
for(int i =0;i<n.length-1;i++) {
for(int j = 0;j<n.length-i-1;j++) {
if(n[j] > n[j+1]) {
temp = n[j];
n[j] = n[j+1];
n[j+1] = temp;
}
}
}
for(int a : n) {
System.out.println(a);
}
}
}
b、快速排序
从前开始搜寻一个大于中界值的元素a,从后往前搜寻一个小于中界值的元素b, 交换a和b的位置,一直重复到这两个搜寻的指针相遇!!
得到的结论就是:中界值的左边都是小于中界值的,中界值都是大于中界值的 再重复红色字这个操作, 直到数据有序为止!!
假设:如果左边都是有序,右边也都是有序,最终整个数据序列就有序
/* * 快速排序 * * 参数说明: * a -- 待排序的数组 * l -- 数组的左边界(例如,从起始位置开始排序,则l=0) * r -- 数组的右边界(例如,排序截至到数组末尾,则r=a.length-1) */ void quick_sort(int a[], int l, int r){ if (l < r){ int i,j,x; i = l; j = r; x = a[i]; while (i < j){ while(i < j && a[j] > x) j--; // 从右向左找第一个小于x的数 if(i < j) a[i++] = a[j]; while(i < j && a[i] < x) i++; // 从左向右找第一个大于x的数 if(i < j) a[j--] = a[i]; } a[i] = x; quick_sort(a, l, i-1); /* 递归调用 */ quick_sort(a, i+1, r); /* 递归调用 */ } }
c、插入排序
从第二个位置的元素开始,如果第二个元素的位置比前边位置的元素小的话,那么插入那个位置, 然后找第三个位置的元素和前边所有元素比较,
9比23小,所以9插入到23位置,然后其他元素往后覆盖,变成【9,23,90,25,16】,然后第四个位置元素25和前边的比较,
25比90小,所以25插入到90的位置,后边的覆盖。最后在16去比,16插23位置,后边覆盖。
int [] num = {45,22,1,89,33};
int temp =0;
for(int i = 1;i < num.length; i++){//位置
for(int j =0; j< i; j++){//为之前的元素
//比较 if(num[i] < num[j]){
//存 temp = num[i];
for(int k = i; k> j;k--){
num[k] = num [k-1];
}
num[j] = temp;
}
}
}
d、选择排序
某一个位置依次与后边的位置元素比较,如果后边有比这个位置大的元素则换位置
