普歌-毅雁团队-Java基础知识点总结(Java基础知识点复习,学会这一篇就够了)

Java语言的特点:

  • 特点一:面向对象

    a.两个基本概念:类,对象
    b.三大特征:封装,继承,多态

  • 特点二:健壮性

    吸收了C/C++语言的特点,去掉了影响其健壮性的的部分(如:指针,内存的申请,与释放等),提供了一个相对安全的内存管理和访问机制。

  • 特点三:跨平台性

    a.跨平台性:Java语言编写的应用程序在不同的系统平台上都可以运行。
    b.原理:只要在需要运行的Java应用程序的操作系统上,先安装一个Java虚拟机,即可。由JVM负责JAVA程序在该系统上的运行。

JAVA三大块:

JavaSE: 它是整个java开发的基础,可以开发出一些桌面级的应用程序!【坦克大战、学生管理系 统】
JavaEE:企业级应用开发 【京东、办公自动化管理系统、物流系统】
JavaME: 移动端开发,被淘汰了! 【诺基亚的塞班系统】

JVM(Java虚拟机)与垃圾回收机制:

  • Java虚拟机:

    • JVM是一个虚拟的计算机,具有指令集并使用不同存储区域
    • 对于不同平台有不同的Java虚拟机,有不同的虚拟机
    • 只有某平台提供了对应的Java虚拟机,Java程序才能在此平台运行
    • Java虚拟机机制屏蔽了底层运行平台的区别,实现了"一次编译,到处运行"。
  • Java的运行机制及运行过程:

    • 创建一个后缀名为.java的文件
    • 编译文件将.java文件编译为.class文件
    • .class文件进入虚拟机运行,输出结果
  • Java垃圾回收机制:

    • 不再使用的内存空间应回收——垃圾回收
      a.在C/C++等语言中,由程序员负责回收无用的内存
      b.Java语言消除了程序回收无用内存空间的责任:它提供一种系统级线程跟踪储存空间的分配情况。并在JVM空闲时,检查并释放那些可被释放的储存空间。
    • 垃圾回收在Java程序运行过程中自动进行,程序员无法精准控制和干预。
  • 既然Java有自动的垃圾回收,还会出现内存泄漏和内存溢出吗?

    答案:还是会出现,与你写的程序有关,有时候会导致垃圾收集器无法回收

JDK,JRE,JVM的关系:

  • JDK(Java开发工具包):

    JDK是提供给Java开发人员使用的,其中包含了Java的开发工具,也包括了JRE。安装了JDK就可以不用单独安装JRE了。

  • JRE(Java运行环境):

    包括Java虚拟机和Java程序所需的核心内库等,如果想要运行一个开发好的Java程序,计算机只需要安装JRE即可。

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

JDK的安装以及环境变量的配置:

详细的安装和配置教程扣一下这里!

JVM内存布局:

程序计数器,虚拟机栈,本地方法栈,堆,方法区

注释:

Java注释分为单行注释,多行注释以及文本注释

单行注释:对一行代码进行注释,两个//
多行注释:对多行代码进行注释,/* 代码块*/,
快捷键选中文本后Ctrl+Shift+/
文本注释:说明方法,类的注释
方法一:先敲“/”在敲两个*,然后回车
方法二:alt+shift+J

API文档:

API文档就是程序员的字典,可以在里面查看各种包,类等的介绍

标识符和命名规则:

a.字母,数字,下划线以及$(美元符号)组成
b.不能是关键字
c.不能以数字开头

这里提供一下软性命名要求,以后学习,开发尽量都按照这样做!
(1)类名命名规范:首字母大写,后面每个单词首字母大写(大驼峰式)。
(2)方法名规范:首字母小写,后面每个单词首字母大写(小驼峰式)。
(3)变量名规范:首字母小写,后面每个单词首字母大写(小驼峰式)。

Java的关键字:

在这里插入图片描述

基本数据类型:

在这里插入图片描述

String:

String:不属于基本类型,内部实际值是一个char[]数组
JDK1.6之前,方法区包括运行时常量池在永久代中;
JDK1.7,方法区和运行时常量池在永久代,字符串常量池在堆中;
JDK1.8,永久代被废弃,方法区在元空间,运行时常量池和字符串常量池在堆中。

创建:

 String s1 = "abc";                //先将"abc"存储到池中,然后返回引用
 String s2 = new String("abc");   //创建新对象"abc"已经在池中
 String s3 = "yihao" + "chengxuyuan";    //创建三个对象,均在池中

String、StringBuffer与StringBuilder之间区别

在这里插入图片描述

序列化:

序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程

访问权限控制符:

public>protected>default>private

集合:

  • List , Set, Map都是接口,List和Set继承Collection接口,Map独立接口
  • Set下有HashSet,LinkedHashSet,TreeSet
  • List下有ArrayList,Vector,LinkedList
  • Map下有Hashtable,LinkedHashMap,HashMap,TreeMap
  • Collection接口下还有个Queue接口,有PriorityQueue类
  • List集合:

    List集合是有序的,可对其中每个元素的插入位置进行精确地控制,可以通过索引来访问元素,遍历元素。

  • Set集合:

    Set集合是无序的,且存储元素唯一。

  • Map集合:

    该集合存储键(key)值(value)对,一对一对往里存,而且保证键(key)的唯一性。数据之间存在映射。

面向对象:

面向对象三大特征:封装,继承,多态。
封装详细了解扣这里!
继承详细了解扣这里!
多态详细了解扣这里!

多态的特性:

向上,向下,重载

逻辑运算符:

用来连接boolean类型的,最终结果也是boolean类型,要么是true,要么false。

逻辑运算符:
^:逻辑异或 相同为false ,不同为true
!:取反 !true:false
&:逻辑与 {有false 则false}
|:逻辑或 {有true 则true}

短路逻辑运算符:
&&逻辑与:
运算结果和&一样 但是&&有短路效果
(a)&&(b++):若a已经为flase 则不需要计算b++;若最后输出b,则b不变。
||逻辑或:
运算结果和|一样 但是||有短路效果
(a)||(b++):若a已经为flase 则不需要计算b++,最后输出b,b不变
(建议以后都用)

异常处理:

  • 异常的族谱:
    在这里插入图片描述

  • Java中处理异常的五个关键字:

    try,catch,finally,throw,throws

  • 声明异常的关键字:

    方法声明异常的关键字是throws,抛出异常throw。

  • try-catch-finally
    可以用多个catch子句处理不同异常,级别由低到高。

Connection connection = null;
Statement statement = null;
try {
    
    
      connection = DriverManager.getConnection("jdbc:mysql:");
      statement = connection.createStatement();
      String sql = "update ShuXing set hp=200 where id=1;";
      int i = statement.executeUpdate(sql);
      System.out.println(i);
} catch (SQLException throwables) {
    
    
           throwables.printStackTrace();
} finally {
    
    
try {
    
    
       connection.close();
} catch (SQLException throwables) {
    
    
        throwables.printStackTrace();
}
try {
    
    
        statement.close();
} catch (SQLException throwables) {
    
    
        throwables.printStackTrace();
}
}
  • 扩展点:在Java SE 7或者更高版本中,一个catch块可以同时处理多种异常类型,有助于减少重复代码。
//...
} catch (ClassNotFoundException | SQLException e) {
    
    
   e.printStackTrace();
}

多线程与并发:

  • 线程是操作系统调度的最小单元,也叫轻量级进程。同一进程可以创建多个线程,而他们都拥有各自的计算器、堆栈和局部变量等属性,并且能够访问共享的内存变量。

  • 线程的5个状态:

    创建(New):使用new关键字创建一个线程
    就绪(Ready):调用start方法,等待CPU调度
    运行(Running):执行run方法
    阻塞(Blocked):由于一些原因放弃CPU使用权,暂时停止执行
    死亡(Dead):run方法执行完毕或者执行时产生异常

  • 创建多线程的多种方法:

    创建多线程的多种方式
    创建Thread类的子类,想要实现多线程程序,就必须继承Thread类
    实现步骤:
    (1)创建一个Thread的子类
    (2)在Thread类的子类中重写Thread类中的run方法,设置线程任务(开启线程要做什么)
    (3)创建Thread的子类方法
    (4)调用Thread类中的方法start方法,开启新的线程,执行run方法
    多次启动一个线程是非法的,java程序属于抢占式调度,哪个线程优先级高,哪个线程先执行;同一个优先级,随机选择一个执行

  • 并发与并行:

    并行是真正意义上的多个任务同时执行;并发是支持处理多个任务,不一定要同时,多个任务可能是串行的,但每个任务只能获取CPU很短的占用时间,多个任务在很短的时间内交替执行。

IO流:

  • IO流分类:

    输入流,输出流

  • 字节输入流:

    1.使用步骤:
    (1)创建FileInputStream对象,构造方法中绑定要读取的数据
    (2)使用FileInputStream对象中的方法read,读取文件(第一个字节)末尾为-1
    (3)释放资源
    2.数组有缓存作用:存储读取到的多个字节一般定义为1024或者整数倍

  • 字节输出流:

    1.OutputStream子类共性的成员方法:
    close:关闭此输出流并释放与此流相关联的任何系统资源
    flush:刷新此输出流并强制任何缓冲的输出字节被写出
    write(byte [] b):将b.length字节从指定的字节数组写入此输出流
    write(byte [] b,int off,int len):从指定的字节数组写入len字节,从偏移量off开始输出到此输出流
    write(int b):将指定的字节输出流
    2.构造方法的作用:
    (1)创建一个FileOutputStream对象
    (2)会根据构造方法中传递的文件/文件路径,创建一个空的文件
    (3)会把FileOutputStream对象指向创建好的文件
    3.字节输出流的使用步骤:
    (1)创建一个FileOutputStream对象,构造方法中传递写入数据的目的地
    (2)调用FileOutputStream对象中的方法write,把数据写入文件中
    (3)释放资源(流使用会占用一定的内存,使用完毕要把内存清空,提高程序效率)
    4.一次写多个字节:
    如果写的第一个字节是正数(0~127),那么显示的时候查询ASCII码表
    如果写的第一个字节是负数,那么第一个字节和第二个字节组成一个中文显示,查询系统默认码表(GBK)
    5.getBytes方法:把字符串转换为字节
    6.FileOutputStream(String name, boolean append) :append:追加文件开关
    7.换行符号:windows:\r\n
    linux:/n
    mac:/r

  • 字符输入流:

    1.FileReader构造方法的作用:
    (1)创建一个FileReader对象
    (2)会把FileReader对象指向要读取的文件
    2.字符输入流的使用步骤
    (1)创建FileReader对象,构造方法中绑定要读取的数据
    (2)使用FileReader对象中的方法read
    (3)释放资源

  • 字符输出流:

    使用步骤
    (1)创建一个FileWrite对象,构造方法中传递写入数据的目的地
    (2)调用FileWrite对象中的方法write,把数据写入文件中
    (3)使用FileWrite中的方法write,把数据写到内存缓冲区中(字符便字节的过程)
    (4)释放资源(会先把内存缓冲区的数据刷新到文件中)

网络编程:

  • Java建立TCP连接的步骤:

    (1) 服务器实例化一个ServerSocket对象,通过服务器的特定端口通信;
    (2) 服务器调用ServerSocket的accept()方法,一直等待直到客户端连接到服务器的端口为止;
    (3) 服务器等待时,客户端实例化一个Socket对象,指定服务器地址和端口号请求连接;
    (4) 客户端的Socket构造函数尝试连接到服务器指定端口,如果成功连接,在客户端创建一个Socket对象使得可以与服务器通信;
    (5) 服务器端accept()方法返回一个新的socket引用,使得可以连接到客户端。

  • Spring中实现WebSocket可以直接用注解方式,类上@ServerEndPoint,然后实现@OnOpen,@OnMessage,@OnCLose,@OnError方法。在@OnMessage中可以插入心跳机制。

反射:

在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;并且能改变它的属性。

  • java创建对象的方式:

    new,clone()方法,反射,反序列化

数据结构:

1.栈:先进后出
2.队:先进先出
3.链表中的每一个元素称为一个节点,一个节点包含一个数据源(存储数组),两个指针域(存储地址)
4.红黑树:特点:趋近于平衡树时,查询速度非常快,查询叶子节点最大次数和最小次数不能超过两倍
约束:1.节点可以是黑色或者红色
2.根节点是黑色的
3.叶子节点(空节点)是黑色的
4.每个红色的节点的子节点都是黑色的
5.任何一个节点到其每一片叶子节点的所有路径上黑色节点数相同

泛型:

1.当我们不知道使用什么数据类型时,可以使用泛型E e(元素) T(类型)
2.使用泛型的好处:避免了类型转换的麻烦
把运行期异常提升到了编译期异常
3.定义含有泛型的方法格式:
修饰符<泛型> 返回值类型 方法名(参数列表(使用泛型)){
//方法体
}
4.含有泛型的接口实现方式:
(1)定义接口的实现类,实现接口,指定接口的泛型
(2)接口使用什么泛型,实现类使用什么泛型
5.泛型的通配符:?:代表任意数据类型
使用方式:不能创建对象使用,只能作为方法的参数使用
6.泛型的上限限定:? extends E 代表使用的泛型只能是E类型的子类/本身
泛型的下限限定:? super E 代表使用的泛型只能是E类型的父类/本身

接口为什么不能被实例化:

接口没有构造方法

内部类的种类:

成员内部类,匿名内部类,静态内部类,局部内部类

匿名内部类的特征:

(1)匿名内部类也就是没有名字的内部类,无class关键字,直接使用new来生成一个对象的引用正因为没有名字,所以匿名内部类只能使用一次
(2)匿名内部类还有个前提条件:必须继承一个父类(抽象类,普通类)或实现一个接口(两者不可兼得,并且只能是一个),它相当于一个具体类(只是没有名字),所以可以使用new
(3)不能存在任何的静态成员变量和静态方法。
不能是抽象的,它必须要实现继承的类或者实现的接口的所有抽象方法。 无构造函数,使用构造(空白)代码块进行初始化
(4)当所在的方法的形参需要被内部类里面使用时,该形参必须为final,为了拷贝引用避免引用值发生改变

最后:一些的深层理解及解释:

感谢你的阅读,希望这篇文章能帮助到你!

猜你喜欢

转载自blog.csdn.net/weixin_51749554/article/details/115359686