美文网首页
Java基础知识点

Java基础知识点

作者: Trouble_Ma | 来源:发表于2020-08-08 20:28 被阅读0次

    数据类型:
    基本数据类型:
    整数类型:
    byte/short/int/long
    小数类型:
    float/double
    字符类型:
    char
    布尔类型:
    boolean

    引用数据类型:
    数组/接口/类

    包装类:
    byte Byte
    int Integer
    short Short
    long Long

    float Float
    double Double

    char Character

    boolean Boolean

    装箱/拆箱:
    装箱:
    将基本类型转换为封装类型;
    拆箱:
    将封装类型转换为基本类型;

    自增和自减:
    前置++(++a):表示对a加1之后的结果进行运算.(先增加后使用)
    后置++(a++):表示对a变量加1之前的原始值进行计算.(先使用后增加)

    Java虚拟机栈:
    简称栈,每当方法创建的时候都会创建一个栈帧,用来存储局部变量/操作栈/动态链接/方法出口等信息.
    每当调用一个方法时调用一个栈帧,存放当前方法的局部变量,方法调用完,该方法的栈帧就被销毁.

    Java堆:
    所有线程共享一块存储区域,当JVM启动时创建,所有对象和数组都要在堆上分配.
    每次使用new关键字,就表示在堆内存中开辟一块新的存储空间.

    成员变量:存放在堆内,随着对象的销毁而销毁;
    局部变量:存储在栈内存中,随着方法的调用结束而销毁.

    GC垃圾回收机制:
    GC功能可以自动监测对象是否超过作用域,从而达到自动回收内存的目的.
    当JVM内存资源不够用时,就会自动清理堆中无用的对象(没有被引用的对象)所占用的空间.
    一般会自动进行管理,要请求时可以调用system.gc()活RunnTime.getRuntime.gc().

    垃圾回收机制的基本原理:
    当创建对象时,GC从就开始监控这个对象的地址/大小以及使用情况,通常GC使用有向图的方式进行记录和管理堆中的所有对象,以此来确定哪些是"可达的",哪些是"不可达的",当GC确定"不可达"时,回收这些内存空间.

    方法参数的值传递机制:
    传递基本类型参数:传递参数值
    传递引用类型参数:传递参数所引用的堆空间地址值

    单例模式(饿汉式):
    必须在该类中;
    私有化构造器,防止外界通过构造器创建新的工具类对象;
    向外暴露一个公共静态方法用于返回自身的对象;
    public class ArrayUtils2{
    private ArrayUtils2(){
    }
    private static ArrayUtils2 instance = new ArrayUtils2();
    public static ArrayUtils2 getInstance(){
    return instance;
    }
    }

    使用枚举示例:
    public emnu ArrayUtils3{
    INSTANCE;
    public static void sort(int[] arr){
    system.out.println("排序");
    }
    }

    == 和 equals的区别:
    ==:
    比较基本数据类型时:比较两个值是否相等
    比较对象数据时:比较两个对象是否在同一块内存空间(比较的是两个数据内存地址是否相等)
    equals:
    比较的是存储数据是否相等;

    BigDecimal加减乘除操作:


    image.png

    蓝色区域为乘法和除法按照四舍五入方式保留两位小数;

    String和StringBuffer/StringBuilder的区别:
    String是不可变字符串;
    StringBuffer/StringBuilder是可变字符串;

    StringBuffer/StringBuilder区别:
    StringBuffer:中的方法都是用了synchronized修饰,保证了线程安全,但性能较低
    StringBuilder:中的方法没有使用synchronized修饰,线程不安全,但性能较高

    SimpleDateFormat:
    格式化(format):Date类型转化为String类型;String format(Date date)
    解析(parse):String类型转化为Date类型;Date parse(String str)

    Calendar:
    日历类


    image.png

    ArrayList和LinkedList:
    ArrayList:查询更改较快,新增和删除较慢.
    LinkedList:新增和删除较快,查询和更改较慢.

    List和Set接口继承Collection接口,Map接口不继承Collection接口;


    image.png

    Collection接口:主要表示List和Set两种存储方式;
    List接口:列表,允许记录添加顺序,允许元素重复;
    Set接口:不记录添加顺序,不允许元素重复;
    Map接口:映射关系;

    List接口常用实现类:
    ArrayList类:
    数组列表,表示数组结构,采用数组实现.
    底层是一个object数组.
    LinkedList类:
    链表,表示双向列表和双向队列结构.
    底层采用链表算法,实现了链表/队列/栈的数据结构.
    Vector类:
    向量,古老的ArrayList.
    基于数组算法实现的列表,和ArrayList的区别在于使用了synchronized修饰,线程安全,效率低.
    Stack类:
    栈,表示栈结构,采用数组实现.
    是vector类的子类.拥有后进先出特点,拥有push(入栈)/pop(出栈)方法.

    Set接口常用实现类:
    HashSet类:
    底层使用哈希表实现,元素对象的hashCode值决定了在哈希表中的存储位置;
    当旺HashSet集合中添加新的元素对象时,先会判断该对象和集合中的hashCode值:
    不等:直接把这个对象存储到hashCode指定的位置
    相等:再继续判断新对象和集合对象中的equals作比较
    若为true:则视为同一对象,不保存
    若为false:存储在之前对象同槽位的链表上

    TreeSet类:
    底层使用红黑树实现,可对集合中元素排序.

    HashSet做等值查询效率高,TreeSet做范围查询效率高.

    iterator:
    迭代器,迭代器中拥有一个指针,默认只想低于个元素之前
    boolean hasNext():判断指针后是否存在下一个元素
    Object next():获取指针位置下一个元素,获取后指针向后移一位.
    Iterator<String> it = list.iterator();
    while(it.hasNext()){
    String ele = it.next();
    System.out.println(ele);
    }


    image.png

    面向对象特征:继承/封装/多态/抽象
    抽象:
    分两种 过程抽象/数据抽象,是指忽略一个主题中与当前目标无关的那些方面,以便更突出当前目标的方面.
    继承:
    子类可以从父类中继承方法和实例变量,并且可以修改和增加方法.
    Java中类只支持单继承,但支持多重继承.(一个子类只能有一个父类,但是父类还可以作为子类继承父类)
    多态:
    允许不同类的对象对同一消息做出响应.
    封装:
    把数据和过程包装起来.

    封装的好处:
    1.保证数据的安全性,防止调用者随意修改数据;
    2.提高组件的重用性,把公用的方法放到一个类中,直接调用即可.

    访问修饰符:


    image.png

    public:表示当前类私有,类访问权限,只能在本类中操作,离开本类不能访问;
    defult(不写默认):表示当前包私有,包访问权限,定义和调用只能在同包中才能访问;
    prodected:表示子类访问权限,同包中的可以访问,即使不同包但是有继承关系也可以访问;
    private:表示公共的,可以在当前项目中任何地方访问.

    JavaBean规范:
    1.类必须使用public修饰
    2.必须保证有公共无参构造器,即使手动提供了带参数的构造器,也得手动提供无参数构造器
    3.字段使用private修饰,每个字段提供一对getter和setter方法

    方法重载(overload):
    两同一不同:
    两同:在同一类中,方法名相同
    一不同:方法参数列表不同(参数类型,参数个数,参数顺序)
    方法重载的作用:屏蔽同一功能的方法由于参数不同所造成的方法名称不同.

    方法重写(override):
    子类存在一个和父类一样的方法时,称之为子类覆盖了父类的方法,也就是重写;
    1.实例方法简明必须相同;
    2.子类方法的返回值类型是和父类方法的返回值类型相同或是其子类;
    3.子类方法中抛出的异常小于或等于父类方法声明抛出异常类型;
    4.子类方法的访问权限比父类方法访问权限更大或相等.

    抽象方法:
    1.使用abstract修饰的方法,没有方法体,留给子类去覆盖
    2.抽象方法必须定义在抽象类或接口中

    接口和实现类的关系:
    接口:定义多个抽象方法,仅仅定义有哪些功能,却不提供实现
    实现类:实现接口,覆盖接口中抽象方法,完成具体的实现

    this:
    表示当前对象
    主要存在于两个位置:
    在构造器中:表示当前被创建的对象
    在方法中:哪一个对象调用this所在的方法,此时this就表示哪一个对象

    this的使用场景:
    1.解决局部变量和成员变量之间的二义性,此时必须使用
    2.同一个类中非static方法间互调
    3.构造器重载的互调

    super:
    当前对象的父类对象

    super的使用场景:
    1.在子类方法中:调用父类被覆盖的方法
    2.在子类构造器中:调用父类构造器

    静态代码块:
    static{
    System.out.println("静态代码块");
    }
    使用static修饰的初始化代码块,当该代码块的类的字节码被加载进JVM,就执行static代码块代码,在开发中用来加载资源,加载配置文件等.

    相关文章

      网友评论

          本文标题:Java基础知识点

          本文链接:https://www.haomeiwen.com/subject/cgcfdktx.html