java基础总结

说明:本文很多引用子尚硅谷

开发环境


JDK = JRE开发工具集(例如javac编译工具)
JRE = JVM + Java SE 标准类库** **

变量的分类


微信图片_20200904095723.png

1. 整型:byte(1字节=8bit) \ short(2字节) \ int(4字节) \ long(8字节)
① byte范围:-128 ~ 127
② 声明long型变量,必须以"l"或"L"结尾
③ 通常,定义整型变量时,使用int型。
④整型的常量,默认类型是:int型
2. 浮点型:float(4字节) \ double(8字节)
① 浮点型,表示带小数点的数值
② float表示数值的范围比long还大
③ 定义float类型变量时,变量要以"f"或"F"结尾
④ 通常,定义浮点型变量时,使用double型。
⑤ 浮点型的常量,默认类型为:double
3. 字符型:char (1字符=2字节)
① 定义char型变量,通常使用一对'',内部只能写一个字符
② 表示方式:1.声明一个字符 2.转义字符 3.直接使用 Unicode 值来表示字符型常量
4.布尔型:boolean
① 只能取两个值之一:true 、 false
② 常常在条件判断、循环结构中使用

自动类型转换(只涉及7种基本数据类型

  • 当容量小的数据类型的变量与容量大的数据类型的变量做运算时,结果自动提升为容量大的数据类型。
  • byte 、char 、short --> int --> long --> float --> double
  • 特别的:当byte、char、short三种类型的变量做运算时,结果为int型
  • 整型的默认类型是int,浮点型默认的类型是double

运算符

面试题型:char+char = int 这种运算会改变结果的数据类型

赋值运算符:= += -= *= /= %=
  • 运算的结果不会改变变量本身的数据类型

  • 方式一:num = num + 2;

  • 方式二:num += 2; (推荐)

  • 方式一:num = num + 1;

  • 方式二:num += 1;

  • 方式三:num++; (推荐)

逻辑运算符:& && | || ! ^

  • 区分& 与 &&
  • 相同点1:& 与 && 的运算结果相同
  • 相同点2:当符号左边是true时,二者都会执行符号右边的运算
  • 不同点:当符号左边是false时,&继续执行符号右边的运算。&&不再执行符号右边的运算。
  • 开发中,推荐使用&&

逻辑运算符操作的都是boolean类型的变量。而且结果也是boolean类型

位运算符:<< >> >>> & | ^ ~

你能否写出最高效的2 * 8的实现方式?
答案:2 << 3 或 8 << 1
【特别说明的】

  1. 位运算符操作的都是整型的数据
  2. << :在一定范围内,每向左移1位,相当于 * 2
    >> :在一定范围内,每向右移1位,相当于 / 2

switch-case选择结构


switch结构中的表达式,只能是如下的6种数据类型之一:
byte 、short、char、int、枚举类型(JDK5.0新增)、String类型(JDK7.0新增)

排序算法

微信图片_20200904101248.png
  1. 衡量排序算法的优劣:
  • 时间复杂度、空间复杂度、稳定性
  1. 排序的分类:内部排序 与 外部排序(需要借助于磁盘)
  2. 不同排序算法的时间复杂度

冒泡排序

        int[] arr = new int[]{43,32,76,-98,0,64,33,-21,32,99};
        for(int i = 0;i < arr.length - 1;i++){
            for(int j = 0;j < arr.length - 1 - i;j++){
                if(arr[j] > arr[j + 1]){
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }       

快速排序

public class QuickSort {
    private static void swap(int[] data, int i, int j) {
        int temp = data[i];
        data[i] = data[j];
        data[j] = temp;
    }

    private static void subSort(int[] data, int start, int end) {
        if (start < end) {
            int base = data[start];
            int low = start;
            int high = end + 1;
            while (true) {
                while (low < end && data[++low] - base <= 0)
                    ;
                while (high > start && data[--high] - base >= 0)
                    ;
                if (low < high) {
                    swap(data, low, high);
                } else {
                    break;
                }
            }
            swap(data, start, high);
            
            subSort(data, start, high - 1);//递归调用
            subSort(data, high + 1, end);
        }
    }
    public static void quickSort(int[] data){
        subSort(data,0,data.length-1);
    }
    
    
    public static void main(String[] args) {
        int[] data = { 9, -16, 30, 23, -30, -49, 25, 21, 30 };
        System.out.println("排序之前:\n" + java.util.Arrays.toString(data));
        quickSort(data);
        System.out.println("排序之后:\n" + java.util.Arrays.toString(data));
    }
}

数组

数组一旦初始化,其长度就是确定的。arr.length
数组长度一旦确定,就不可修改。

** 数组初始化 **

  •      > 数组元素是整型:0
    
  •  > 数组元素是浮点型:0.0
    
  •  > 数组元素是char型:0或'\u0000',而非'0'
    
  •  > 数组元素是boolean型:false
    
  •  > 数组元素是引用数据类型:null
    

二维数组中,每个维度的长度可以不一样

        int[][] arr1 = new int[][]{{1,2,3},{4,5},{6,7,8}};

        System.out.println(arr1[0].length);  //3
        System.out.println(arr1[1].length);  //2
        System.out.println(arr1[2].length);  //3
数组的初始化
正确的方式:

    int[] arr = new int[]{1,2,3};//一维数组
        //静态初始化
        int[][] arr1 = new int[][]{{1,2,3},{4,5},{6,7,8}};
        //动态初始化1
        String[][] arr2 = new String[3][2];
        //动态初始化2
        String[][] arr3 = new String[3][];
    //也是正确的写法:
        int[] arr4[] = new int[][]{{1,2,3},{4,5,9,10},{6,7,8}};
        int[] arr5[] = {{1,2,3},{4,5},{6,7,8}};//类型推断
                错误的方式:
//      String[][] arr4 = new String[][4];
//      String[4][3] arr5 = new String[][];
//      int[][] arr6 = new int[4][3]{{1,2,3},{4,5},{6,7,8}};

  • ⑤ 数组元素的默认初始化值
  • 针对于初始化方式一:比如:int[][] arr = new int[4][3];
  •  外层元素的初始化值为:地址值
    
  •  内层元素的初始化值为:与一维数组初始化情况相同
    
  • 针对于初始化方式二:比如:int[][] arr = new int[4][];
  •  外层元素的初始化值为:null
    
  •  内层元素的初始化值为:不能调用,否则报错。
    
二维数组内存解析.png

Arrays工具类的使用

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。