回顾Java知识点,面试题汇总Day3(持续更新)

一、运算符

1.位运算符

对表达式以二进制为单位进行运算,将数据全部转换成二进制再进行运算。

&(按位与)、|(按位或)、^(按位异或)、<<(左移)、>>(右移)

  • A&B:每一位的数字一一对应,若都为1,则该位记作1,否则0
  • A|B:每一位的数字一一对应,只要有个1,则该位记作1,否则为0
  • A^B:每一位的数字一一对应,相同记作1,不同记作0
  • A<<B:A*2的B次方,2 <<3,2*2的3次方=16
  • A>>B:A除以2的B次方,2>>3,2/2的3次方 =0
java 复制代码
public class Test {
    public static void main(String[] args){
        System.out.println(10&5);
     System.out.println(10|5);
        System.out.println(10^5);
        System.out.println(2>>3);
        System.out.println(2<<3);
    }
}

优先级:位运算符>逻辑运算符>算术运算符

越复杂,优先级越高

二、流程控制

if-else switch-case for while do-while foreach

if-else和switch-case都是进行流程控制的。

1.if-else和switch-case的区别?

  • if-else可以进行等值判断,也可以进行逻辑判断,switch-case只能进行等值判断。
  • switch-case代码结构更清晰易懂,if-else结构相对不清晰。
java 复制代码
public class Test {
    public static void main(String[] args){
       int num = 1;
        switch(num){
            case 1:
                System.out.println("奖励2000");
                break;
            case 2:
                System.out.println("奖励1000");
                break;
            case 3:
                System.out.println("奖励500");
                break;
            default:
                System.out.println("没有奖励");
        }
    }
}

2.4种循环

for、while、 do-while、 foreach

循环四要素:

  • 初始化循环变量
  • 循环条件
  • 循环体
  • 更新循环变量
java 复制代码
public class Test {
    public static void main(String[] args){
        //for循环
        for (int i = 0; i < 10; i++) {
          System.out.println(i);
       }
        //while循环
      int i = 0;
      while(i<10){
          System.out.println(i);
         i++;
     }
        //do-while循环
        int i = 0;
        do{
            System.out.println(i);
            i++;
        }while(i<10);
    }
}

3.while和do-while循环有什么区别?

  • while需要先判断循环条件,再执行循环体
  • do-while第一次不需要判断循环条件,直接执行循环体,第二次开始执行循环条件。

do-while至少会执行一次,while有可能一次都不执行。

4.foreach(针对集合遍历的循环)增强型for循环

java 复制代码
import java.util.Arrays;
import java.util.List;

public class Test {
    public static void main(String[] args) {
        List<Integer> list = Arrays.asList(1,2,3,4,5,6,7,8,9,10);
//       第一种方法
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
//       第二种方法
        for(Integer i : list){
            System.out.println(i);
        }
    }
}

5.终止循环

  • 循环逻辑结束
  • 循环过程中抛出异常
  • 使用break关键字中断循环
  • 使用continue关键字中断循环

continue只结束当前循环,继续执行下一次循环

break会结束整个循环

三、数组

数组是连续存储的。

1.数组的基本元素构成

由4种基本元素构成

  • 数组名称
  • 数组元素
  • 元素下标
  • 数据类型

2.对象默认输出方式

Java输出对象的时候,默认调用对象的toString方法,将结果以字符串的形式进行输出。

3.toString从何而来?

来自于Object类。Java会有一个根节点,所有的类都是由这个根节点衍生出来的,Java所有类都有一个默认的父类:Object。

java 复制代码
public class Test {
    public static void main(String[] args) {
        int array[] = {1,2,3,4,5,6};
        System.out.println(array);
        System.out.println(array.toString());
    }
}

输出数组值:

java 复制代码
import java.util.Arrays;
import java.util.List;

public class Test {
    public static void main(String[] args) {
        int array[] = {1,2,3,4,5,6};
        //遍历数组
        for (int i = 0; i < array.length; i++) {
            System.out.println(array[i]);
        }
        int l = 0;
        while(l < array.length){
            System.out.println(array[l]);
            l++;
        }
        int m = 0;
        do {
            System.out.println(array[m]);
            m++;
        }while (m < array.length);

        for(Integer i : array){
            System.out.println(i);
        }
        //工具类
        System.out.println(Arrays.toString(array));
    }
}

//多态

Object[] array = {"a",1,"b","c"};

使用Object,数组中可以存储不同类型的数据。

4.为什么数组下标都是从0开始的?

提高检索速度,取出数据更快。

数组的内存模型相关。从1开始,需要执行index-1,复杂度增加。

5.数组常见的异常

数组下标越界:ArrayIndexOutOfBoundsException

6.数组常见操作以及方法

  • 求数组的最大值
  • 求数组的最小值
  • 在数组的指定位置插入一个数据
  • 数组排序

数组一旦创建,长度就不能改。

java 复制代码
import java.util.Arrays;
public class Test {
    public static void main(String[] args) {
       int array[] = {12,35,14,97,87,68};
       //求最大值
       int max = array[0];
        for (int i = 1; i < array.length; i++) {  //不需要从0开始,自己没必要跟自己比
            if(array[i] > max){
                max = array[i];
            }
        }
            System.out.println(max);
     //求最小值
        int min = array[0];
        for (int i = 1; i < array.length; i++) {
            if(array[i] < min){
                min = array[i];
            }
        }
        System.out.println(min);
        //在指定位置插入元素
        //把83插入到下标为3的位置
        /**
         * 1、创建一个空的新数组
         * 2、导入数据
         * 3、插入新数据
         */
   int [] array2 = new int[array.length+1];
        for (int i = 0; i < 3; i++) {
            array2[i] = array[i];
        }
        for (int i = 4; i < array2.length ; i++) {
            array2[i] = array[i-1];
        }
        array2[3] = 83;
        System.out.println("插入之前的数组是:" + Arrays.toString(array));
        System.out.println("插入新数据的数组是:" + Arrays.toString(array2));
  //升序排列
        //冒泡排序
        for (int j = 0; j < array.length-1; j++) {  //-1 是为了不越界(i+1 不能超出边界)
            for (int i = 0; i < array.length-1-j; i++) {  //-j 是为了不重复比较(右边已经排好的元素不用再管)
                if(array[i] > array[i+1]){
                    int temp = array[i];
                    array[i] = array[i+1];
                    array[i+1] = temp;
                }

            }

        }
        System.out.println(Arrays.toString(array));
        //升序排列复杂流程:每轮结束后,最右边多了一个"已排好"的元素,所以下一轮可以少比较一次
        //索引:0,1,2,3,4,5
        // 长度:6
        //第一次排序
        for (int i = 0; i < array.length-1; i++) {  //为防止越界 如果 i 能取到 最后一个索引(5),那么 i+1 = 6,就会访问 array[6],但数组最大索引是 5
            if(array[i] > array[i+1]){
                int temp = array[i];
                array[i] = array[i+1];
                array[i+1] = temp;
            }
        }
        System.out.println(Arrays.toString(array));
    //第二次排序
        for (int i = 0; i < array.length-2; i++) {  //
            if(array[i] > array[i+1]){
                int temp = array[i];
                array[i] = array[i+1];
                array[i+1] = temp;
            }
        }
        System.out.println(Arrays.toString(array));
        //第三次排序
        for (int i = 0; i < array.length-3; i++) {  //
            if(array[i] > array[i+1]){
                int temp = array[i];
                array[i] = array[i+1];
                array[i+1] = temp;
            }
        }
        System.out.println(Arrays.toString(array));
        //第四次排序
        for (int i = 0; i < array.length-4; i++) {  //
            if(array[i] > array[i+1]){
                int temp = array[i];
                array[i] = array[i+1];
                array[i+1] = temp;
            }
        }
        System.out.println(Arrays.toString(array));
        //第五次排序
        for (int i = 0; i < array.length-5; i++) {  //
            if(array[i] > array[i+1]){
                int temp = array[i];
                array[i] = array[i+1];
                array[i+1] = temp;
            }
        }
        System.out.println(Arrays.toString(array));

//降序排列
        for (int j = 0; j < array.length-1; j++) {
            for (int i = 0; i < array.length-1-j; i++) {
                if(array[i] < array[i+1]){
                    int temp = array[i];
                    array[i] = array[i+1];
                    array[i+1] = temp;
                }

            }
        }
        System.out.println(Arrays.toString(array));
    }
}

注意:编写代码时输出语句一定要在for循环以外,不然会一直循环,多次打印。

相关推荐
傻瓜搬砖人1 小时前
c语言绿皮书第三版第十一章习题
c语言·开发语言·算法·谭浩强·绿皮书第三版
计算机安禾1 小时前
【c++面向对象编程】第3篇:类与对象(二):构造函数与析构函数
开发语言·c++·算法
不会写DN1 小时前
PyScript-GitHubRepo:构建高性能GitHub仓库批量下载工具的技术实践
开发语言·前端·python
SilentSamsara2 小时前
生成器完全指南:`yield` 与惰性求值的工程价值
linux·开发语言·python·算法·机器学习·青少年编程
woai33642 小时前
项目-轻客管家1-环境准备
java
xqqxqxxq9 小时前
Java AI智能P图工具技术笔记
java·人工智能·笔记
谷雨不太卷9 小时前
进程的状态码
java·前端·算法
jieyucx9 小时前
Go语言深度解剖:Map扩容机制全解析(增量扩容+等量扩容+渐进式迁移)
开发语言·后端·golang·map·扩容策略
顾温9 小时前
default——C#/C++
java·c++·c#