一、Java面向对象编程

1.1 类和对象

  • **类(Class)对象(Object)**是面向对象的核心概念。
    • 类是对一类事物的描述,是抽象的、概念上的定义。
    • 对象是实际存在的该类事物的每个个体,因而也称为实例(instance)。
  • 设计类,其实就是设计类的成员。
    • 属性 = 成员变量 = field = 域、字段
    • 方法 = 成员方法 = 函数 = method
    • 创建类的对象 = 类的实例化 = 实例化类
  • 类和对象的使用(面向对象思想落地的实现)
    • 创建类,设计类的成员。
    • 创建类的对象。
    • 通过“对象.属性”或“对象.方法”调用对象的结构。
      Read more »

  • 根据《Java虚拟机规范》的规定,运行时数据区通常包括这几个部分:程序计数器(Program Counter Register)、Java栈(VM Stack)、本地方法栈(Native Method Stack)、方法区(Method Area)、堆(Heap)。

由此先来看看虚拟机栈的作用。

Read more »

  • 非虚方法:方法在编译器就确定了具体的调用版本,这个版本的运行时是不可变的(非虚方法有静态方法、私有方法、final方法、实例构造器、父类方法,其他方法为虚方法)。

  • jvm提供了以下几条方法调用指令:

    • 调用非虚方法(final修饰的方法除外):
      • (1)invokestatic:调用静态方法,解析阶段确定唯一方法版本。
      • (2)invokespecial:调用方法、私有方法、父类方法,解析阶段确定唯一方法版本。
    • 调用虚方法:
      • (3)invokevirtual:调用所有虚方法。(调用final方法用的是这个指令)
      • (4)invokeinterface:调用接口方法。
      • (5)invokedynamic:动态解析出需要调用的方法,然后执行。
Read more »

  • 根据《Java虚拟机规范》的规定,运行时数据区通常包括这几个部分:程序计数器(Program Counter Register)、Java栈(VM Stack)、本地方法栈(Native Method Stack)、方法区(Method Area)、堆(Heap)。

由此先来看看程序计数器的作用。

Read more »

1、类加载子系统

在介绍类的加载过程之前,先看看类加载子系统的组成。

  • 类加载子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识。
  • ClassLoader只负责class文件的加载,至于它是否可以运行,则由Execution Engine决定。
  • 加载的类信息存放于一块称为方法区的内存空间。除了类的信息外,方法区中还会存放运行时常量池信息,可能还包括字符串字面量和数字常量(这部分常量信息是Class文件中常量池部分的内存映射)。
    Read more »

1、String类

  • String声明为final的,不可被继承。
  • String实现了Serializable接口:表示字符串是支持序列化的;实现了Comparable接口:表示String可以比较大小。
  • String内部定义了final char[] value用于存储字符串数据。
  • String:代表不可变的字符序列。简称:不可变性。
    • 当对字符串重新赋值时,需要重写指定内存区域赋值,不能使用原有的value进行赋值。
    • 当对现有的字符串进行连接操作时,也需要重新指定内存区域赋值,不能使用原有的value进行赋值。
    • 当调用String的replace()方法修改指定字符或字符串时,也需要重新指定内存区域赋值,不能使用原有的value进行赋值。
  • 通过字面量的方式(区别于new)给一个字符串赋值,此时的字符串值声明在字符串常量池中。
  • 字符串常量池中是不会存储相同内容的字符串的。
Read more »

1、枚举类

  • 当需要定义一组常量时,强烈建议使用枚举类。
  • 枚举类的实现
    • JDK1.5之前需要自定义枚举类。
    • JDK 1.5 新增的 enum 关键字用于定义枚举类。
  • 若枚举只有一个对象, 则可以作为一种单例模式的实现方式。
  • 枚举类的属性
    • 枚举类对象的属性不应允许被改动, 所以应该使用 private final 修饰。
    • 枚举类的使用 private final 修饰的属性应该在构造器中为其赋值。
    • 若枚举类显式的定义了带参数的构造器, 则在列出枚举值时也必须对应的传入参数。
Read more »

一、数组

1.1 数组的概述

  • 数组(Array),是多个相同类型数据一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理。
  • 数组本身是引用数据类型,而数组中的元素可以是任何数据类型,包括基本数据类型和引用数据类型。
  • 创建数组对象会在内存中开辟一整块连续的空间,而数组名中引用的是这块连续空间的首地址。
  • 数组的长度一旦确定,就不能修改。
  • 我们可以直接通过下标(或索引)的方式调用指定位置的元素,速度很快。
  • 数组的分类:
    • 按照维度:一维数组、二维数组、三维数组、…
    • 按照元素的数据类型分:基本数据类型元素的数组、引用数据类型元素的数组(即对象数组)
      Read more »

一、基本语法

1.1 关键字和保留字

  • 关键字(keyword)的定义和特点:
    • 定义:被Java语言赋予了特殊含义,用做专门用途的字符串(单词)。
    • 特点:关键字中所有字母都为小写。
Read more »

在springboot项目中经常会有上传和下载的需求,此文章主要讲述在springboot项目中可能应用到的文件知识!假设我们需要将一些文件保存到服务器并将其对应信息记录到数据库中,接着能够通过前端发送的请求对文件进行相应的上传、下载和删除工作。

一、本地服务器文件的上传、下载和删除

Read more »