java基础知识复习(7.24)

时间:2021-08-02
本文章向大家介绍java基础知识复习(7.24),主要包括java基础知识复习(7.24)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

java 复习

1、概述

  • 历史:sun公司开发。

  • 三种技术架构:JAVAEE\SE\ME,应对企业级/桌面/开发

  • JDK = java的开发和运行环境 > JRE = 类库+JVM(运行环境)>JVM

  • javac.exe 编译 生成class文件,java运行

2、语法基础

  • 1、关键字:static

  • 2、标识符:变量名、类名

  • 3、常量

  • 4、变量

  • 5、数据类型:引用/基本数据类型

    级别从低到高:

    byte、char、short ----int ----float----long----double

    自动类型提升:低级别到高级别

    强制类型转换:强制把高级别的赋给一个低级别的

  • 6、运算符号

    短路与:||,左边为false,右边不参与运算

    短路或:&&,左边为true,右边不参与运算

  • 7.语句:if/else

  • 8.函数:

    • 修饰符 返回值类型 函数名(参数类型 形参)

  • 9、数组

    • java分了5片内存:寄存器、本地方法区、方法区、栈、堆

    • :存储局部变量

    • 堆:存储数组和对象,即实体(封装多个数据的)

  • 10、面向对象

    • 理解:所有的事物都是对象,java的对象是对现实世界的抽象与简化

    • 对象均有属性和行为

    • 多个对象均有的相同或相似的行为和属性,抽提为类

    • 匿名对象:当仅对对象进行一次调用时

    • 成员变量/局部变量:成员变量定义在类中,存在在堆中。局部变量定义在方法中,存储在栈中

    • 构造函数:对对象进行初始化。

    • 面向对象特征:封装、多态、继承

    • 静态代码块----》构造代码块----》构造函数

    • 继承的弊端:打破了封装性

      • 使用final关键字修饰类、方法、常量,不可被继承、重写

    • 抽象类/抽象方法:

      • 抽象方法只能定义在抽象类中,abstract

      • 抽象类不可以被实例化,但可以不定义抽象方法

        • 不能和final、private,static共存

      • 模板设计模式:

        • 功能内一部分实现确定(不想被改变,可用final),一部分不确定,可以把不确定的部分暴露出去(abstract),让子类实现

    • 接口:

      • 接口的成员:

        • 全局变量:public static final

        • 抽象方法:public abstract

      • 接口可以多实现,但继承只能单继承

      • 接口用于功能的扩展

      • 接口和抽象类,都是不断向上抽取的结果,但接口一般用于定义对象的扩展功能,抽象是对一个体系单元的抽取

    • 多态:父类或接口的引用指向了子类的对象

      • instanceOf 判断对象是否实现了指定的接口或继承了指定的类

  • 异常:

    • 编译被检查的异常在函数内被抛出,函数必须要声明,否编译失败。

    • 声明的原因:是需要调用者对该异常进行处理。    

    • 运行时异常如果在函数内被抛出,在函数上不需要声明。

    • 不声明的原因:不需要调用者处理,运行时异常发生,已经无法再让程序继续运行,所以,不让调用处理的,直接让程序停止,由调用者对代码进行修正。

  • 多线程:

    • 进程:正在进行中的程序,其实就是一个应用程序运行时的内存分配空间。

    • 线程:进程中的一个程序执行控制单元,共享线程的空间和资源。

      • 主线程:main函数

      • 单独一个线程:垃圾回收

    • 随机性:哪个线程获取到CPU的执行权,哪个线程就执行

    • 状态:

      • 被创建:start

      • 运行:执行资格 + 执行权

      • 冻结:释放执行资格 + 执行权

      • 临时阻塞:有执行资格 + 无执行权

      • 消亡:stop()

    • 步骤:

      • 1,定义类继承Thread类或者继承Runnable接口

      • 2,目的是复写run方法,将要让线程运行的代码都存储到run方法中;

      • 3,通过创建Thread类的子类对象,创建线程对象

      • 4,调用线程的start方法,开启线程,并执行run方法。

    • 实现runnable接口可以避免单基础的局限性

    • 同步:

      • 好处:解决了线程安全问题,synchronized

      • 坏处:降低了执行效率

      • 锁:字节码文件对象,

        • 同步函数:对于静态方法:类名.class,否则是this锁

        • 同步代码块:任意对象

  • 字符串

    • String:用String类进行描述,对字符串进行了对象的封装

      • 特点:“一旦被初始化,就不可以被改变”

      • 方法:valueOf() 转换字符数组,基本数据类型为字符串

    • StringBuffer:字符串缓冲区---线程安全的

      • 构造一个不带字符的字符串缓冲区,初始容量为16个字符,可变长度

      • 方法:

        • 增:append()\insert()

        • 删:delete(),左闭右开

        • 修改:replace()

        • 查找:indexOf()

        • 其他:reverse()

    • StringBuilder:字符串缓冲区---线程不安全的

      • 该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍),线程不安全但是效率高

  • 包装类:

    • Integer i = 4; //自动装箱,1.5版本后的写法;
  • 集合框架*

    • 集合和数值的区别:

      • 1:数组是固定长度的;集合可变长度的

      • 2:数组可以存储基本数据类型,也可以存储引用数据类型;集合只能存储引用数据类型。

      • 3:数组存储的元素必须是同一个数据类型;集合存储的对象可以是不同数据类型。

    • Collection

      • List:元素有序,可重复,判断元素是否相同,使用equals判断,因此需要重写equals()

        • ArrayList:主要实现类,底层数据机构是数组,线程不同步,查询元素快

          • 可变长度原理:按照原数组的50%延长,初始含量为10,将新元素加入新数组

        • LinkedList:双向链表,线程不同步,增删速度快

          • 可变长度原理:按照原数组的50%延长,初始含量为10,将新元素加入新数组

        • Vector:古老是实现类,线程同步

      • Set:元素无序,不可重复

        • HashSet:底层链表+数组,无序高效,可以储存null值

          • 通过hashCode、equals 共同保证唯一性

          • LinkedHashSet:按照添加顺序,用于遍历

        • TreeSet

          • 对Set进行指定元素的指定排序

            • 元素需要时同一类型

            • 实现Comparable(复写compareTo)\Comparator(复写Compare)

            • 保证唯一的方式,就是参考比较方法的结果是否为0

    • Map 键值对,保证键的唯一性

      • |——Hashtable:底层是哈希表(底层链表+数组)数据结构,是线程同步的。不可以存储null键,null值。

      • |——HashMap:底层是哈希表数据结构,是线程不同步的。可以存储null键,null值。替代了Hashtable.

      • |——TreeMap:底层是二叉树结构,可以对map集合中的键进行指定顺序的排序。

        get(key) 通过键,获取值

        • 遍历

          • keySet()

          • values()

          • entrySet()

  • 使用集合的技巧:

    看到Array就是数组结构,有角标,查询速度很快。

    看到link就是链表结构:增删速度快,而且有特有方法。addFirst; addLast; removeFirst(); removeLast(); getFirst();getLast();

    看到hash就是哈希表,就要想要哈希值,就要想到唯一性,就要想到存入到该结构的中的元素必须覆盖hashCode,equals方法。

    看到tree就是二叉树,就要想到排序,就想要用到比较。

  比较的两种方式:

    一个是Comparable:覆盖compareTo方法;

    一个是Comparator:覆盖compare方法。

  LinkedHashSet,LinkedHashMap:这两个集合可以保证哈希表有存入顺序和取出顺序一致,保证哈希表有序。

  • Arrays 用于操作数组对象的工具类

    • .asList(arr) 把数组转换成List集合

    • 集合变数组 :Collection接口中的方法:toArray();

    • 增强for,可用于集合 +数组

泛型

  • 泛型技术:其实应用在编译时期,是给编译器使用的技术,到了运行时期,泛型就不存在了。

原文地址:https://www.cnblogs.com/xiaokai1110001237/p/15091165.html