目录

Java基础

1. 基础语法

  • 1.1 注释

  • 1.2 字面量

  • 1.3 变量

  • 1.4 关键字和标识符

  • 1.5 数据类型

    • 1.5.1 基础数据类型:byte、short、int、long、float、double、char、boolean

    • 1.5.2 引用数据类型:String

    • 1.5.3 数据类型转换:自动转换、强制转换

  • 1.6 运算符

    • 1.6.1 算数运算符:+ - * / %

    • 1.6.2 自增自减运算符

    • 1.6.3 赋值运算符

    • 1.6.4 关系运算符

    • 1.6.5 逻辑运算符

    • 1.6.6 三元运算符

    • 1.6.7 学习使用Java Api Java17Api

2. 流程控制

  • 2.1 分支结构:if else 、switch 、switch 穿透性 switch需要使用break防止穿透访问。

  • 2.2 循环结构 for 、while、do while

  • 2.3 跳转关键字:break、continue

  • 2.4 随机数 Random

3. 数组

  • 3.1 静态初始化数组

  • 3.2 数组遍历

  • 3.3 动态初始化数组

  • 3.4 组的内存执行原理

    • 3.4.1 方法区(字节码文件加载)、栈(方法运行时加载、变量加载)、堆(变量实际数值或者对象的实例)、本地方法栈、寄存器

    • 3.4.2 多个变量指向同一个数组的问题,修改其中一个导致堆内的数据变化,会导致另一个数组跟着变化

    • 3.4.3 数组赋值为null时,说明在数组没有指向堆中的实例

  • 3.5 数组使用的简单案例

    • 数组求最值

      • 定义一个变量用于保存最终的最大值,从数组第一个数据开始
      • 从第二个数据开始辨遍历,如果该值大于变量,则替换变量的值
    • 数组反转

      • 方法一:逆向循环,插入新的数组
      • 方法二:依次前后交换数据
        1
        2
        3
        4
        5
        
        for(int i=0,j=arr.length-1;i<j;i++,j--){
            Object temp = arr[j];
            arr[j] = arr[i];
            arr[i] = arr[temp]
        }
        
    • 数组随机排名

      • 动态初始化数字,后期手动录入数据
      • 依次遍历数组数据,随机生成一个索引,交换遍历处和生成索引的两个数据

4. 方法

  • 方法初识

    • 方法是什么:方法是一种语法结构,它可以把一段代码封装起来,方便反复调用
    • 方法的完整格式
      1
      2
      3
      4
      
      修饰符 返回值类型 方法名(参数类型 参数 ...){
        方法体代码(需要执行的代码)
        return 返回值
      }
      
    • 使用方法的好处
      • 提高代码的复用性,提高开发效率
      • 让代码逻辑更清晰
  • 方法的其他形式:无返回值时使用 void 代替返回类型

  • 方法使用时的常见问题

    • 方法不能嵌套声明
    • void修饰的方法不能返回值
    • return后不能写代码
  • 方法的案例

    • 设计方法的技巧
      • 1、方法是否需要收集数据->形参
      • 方法是否返回数据->返回值
      • 方法要处理的业务
  • 方法再计算机中的执行原理

    方法被调用的时候,是进入栈内存中运行(栈是先进后出,保证方法调用执行后可以返回到main方法中,并且执行后可以清除运行过的方法,防止内存溢出)

  • Java的参数传递机制

    • 1、基础类型是值传递
    • 2、引用类型的参数传递
  • 方法重载

    • 一个类中相同方法名但是参数个数或类型不同 统称为重载
    • 知识补充:方法中单独使用return关键字

5. Java案例

  • 买飞机票

    根据月份区分淡季旺季,根据作为类型计算折扣,和价格相乘得出结果

  • 验证码2

    按位循环,先随机选择数字(0-9)、小写字母(97+26)、大写字母(65+26),在随机生成ASCII码转换为char型

  • 打分

    • 需求:接受多个分数,去掉一个最小和一个最大值后取平均分
    • 因为不清楚人数,所以使用动态数组保存,循环人数次使用Scanner录入分数,再次循环数组,得到最小和最大值和全部分数的和,最后计算返回值

  • 加密

    • 需求:传入一个数字,需要将其每一位加5,并对10取余,后将所有数字反转
    • 方法1:定义一个数组,将数字每一位放到数组中,循环数组并计算每一位,计算后放入数组,逆向循环数组,输出结果

    • 方法2:定义一个数组,将数字每一位放到数组中,双向循环数组并计算每一位直达前后索引相遇,计算后放入数组,输出数组内的数字既可

      1
      2
      3
      4
      5
      
          for(int i=0,j=arr.length-1;i<j;i++,j--){
              Object temp = arr[j];
              arr[j] = arr[i];
              arr[i] = arr[temp]
          }
      
  • 数组拷贝

    创建一个新数组,不能使用相同的实例

  • 抢红包

    • 需求:5个红包给人抢,抢到一个后不允许选中同一个
    • 方法1: 循环等待抽奖,抽中后将选中的值赋0,选中0时死循环重新选

    • 方法2: 直接打乱顺序输出

  • 找素数

    • 循环入参,对每一个数字循环除以一个从2自增到一半的数字,如果可以整除则不符合,否则为素数

  • 打印乘法表

  • 打印三角形

  • 实现双色球

6.面向对象

  1. 面向对象含义
  • 含义:把数据交给对象,再调用对象的方法,用于处理数据的方法叫面向对象
  • 面向对象的好处:符合人类的习惯,更直观
  1. 对象执行原理类与对象的注意事项
  • 执行原理:class先加载到方法区,再将运行的方法加载到栈内存,为方法中的变量开辟一块区域到栈内存,变量初始化时会再堆内存中创建一个实例
  • 补充知识:引用类型的概念,是存储的数据为引用地址的变量。
  • 类的一些注意事项:
    1. 类名建议使用首字母大写的驼峰命名
    2. 类中定义的变量和方法叫成员变量和成员方法,成员变量在初始化变量实例的时候会有默认值
    3. 一个文件中只能有一个用public关键字修饰的类 ,并且文件名也要和这个类同名
    4. 如果一个实例没有变量引用它,则该对象无法被操作,就成为了垃圾对象
  1. this关键字:代指当前运行的实例,主要解决变量名称冲突的问题

  2. 构造器:

    1. 无返回值的和类同名的方法
    2. 创建实例时会调用构造器
    3. 如果不指定构造方法,java会自动生成一个无参构造器,一旦定义了有参的构造方法,就不会生成无参的方法,需要手动添加
    4. 可以用来初始化创建对象时赋值
  3. 封装、实体JavaBean

    1. 面向对象三大特性:封装、继承、多态
    2. 封装:用类设计对象处理某一个事物的数据时,应该吧要处理的数据以及处理数据的方法涉及到同一个对象中
    3. 封装需要遵守的规则:合理隐藏,合理暴露
    4. 实体JavaBean:
      1. 指有私有的成员变量并为它们都提供getset方法
      2. 存在一个无参构造方法

7.常用API

  • 包的概念:分门别类管理程序的文件夹
  • String API
    1. 创建String对象

      1. String aaa = “q”;
      2. String aaa= new String(“aa”);
      3. String aaa= new String({‘a’});//字节数组转换
    2. 常用方法

      方法名 说明
      int length() 获取字符串的长度返回
      char charAt(int index) 获取某个索引出的字符返回
      char[] toCharArray() 将当前字符串转换为字符数组返回
      boolean equals(Object object) 判断当前字符串与另一个字符串内容是否一样,一样返回truw
      boolean equalsIgnoreCase(String anotherString) 判断当前字符串与另一个字符串的内容是否一样(忽略大小写)
      String subString(int beginIndex,int endIndex) 从传入所引出截取到末尾,得到新的字符串返回
      String subString(int beginIndex) 字符串截取
      String replace(CharSequnce target,CharSequnce replacement) 字符串替换,得到新的字符串返回
      boolean contains(CharSequnce s) 判断字符串中是否包含某个字符串
      boolean startWith(String prefix) 判断字符串是否以某个字符串开头
      String[] split(String regex) 字符串按照某个字符串分割,并返回字符串数组
    3. String的注意事项

      • String对象的内容不可改变,被称为不可改变字符串对象
      • 只要是以“…”方式写出的字符串对象,会存储带字符串常量池,切内容的字符串只存储一份
      • 但是通过new方式创建的字符串对象,每new一次都会穿生一个新的对象放在堆内存中
        1
        2
        3
        4
        5
        6
        7
        
          String aaa= "abd";
          String bbb = "a"+"b"+"c";
          //  java对固定值拼接有优化,所以两个变量相等
          //aaa==bbb 为true
        
          String ccc = new String("abd");
          //由于是new出的新对象,所以aaa和ccc不相同
        
  • ArrayList:增删改查

8.面向对象高级

  • 1、封装

    • static
      • 两种方法
        • 类方法:常用的工具类方法

          特殊说明,为了避免工具类被错误的创建对象,可以采用将构造方法私有化的方式避免。

        • 实例方法:普通方法,需要创建实例才可以调用
      • 代码块
        • static静态代码块:类加载时执行一次
        • 实例代码块::创建实例时执行一次
      • 单例模式:
  • 2、继承

    • 继承的特性
      • 子类继承父类的非私有方法和成员变量
      • 子类的对象创建是由子类和父类共同完成的
    • 继承的注意事项
      • 权限修饰符:private < 缺省 < protected < public
      • 单继承:Java类只可以继承一个类,但是接口可以继承多个
      • Object类:java类的公共父类,也决定了java类不能同时拥有两个父类
      • 方法重写:
        • 1、子类对父类的方法进行重写
        • 2、重写方法后调用采用就近原则
      • 子类中访问其他成员的特点
        • 1、没有特殊代指的话遵循九九原则
        • 2、可有使用this和super代指当前类和父类
      • 子类构造器的特点
        • 子类的全部构造器都会调用父类的构造器在调用自己的
        • 子类中可以使用this()去调用兄弟构造器
  • 3、多态

  • final、常量

  • 抽象类

  • 接口

  • 匿名内部类

  • 枚举

  • 泛型

9.常用API 2

  • Object类
  • StringBuilder、StringBuffer
  • Math、System、Runtime
  • BigDecimal
  • 传统时间 Date、SimpleDateFormat
  • 传统时间 秒杀案例、Calendar
  • Java8新增时间:LocalDate、LocalTime、LocalDateTime、ZoneId、ZoneDateTime、Instant
  • DateTimeFormater、Period、Duration
  • Arrays
  • Lamda表达式

10.Java进阶

  • 算法
    • 认识、冒泡排序、选择排序及优化
    • 二分法查找
  • 正则表达式
  • 异常

11.集合框架

12.java8新特性

  • Stream流

13.IO流

14.特殊文件

15.日志技术

16.多线程

17.网络通讯

18.Java高级