Java学习

IDEA使用 -> Java语法 -> Web基础 -> 数据库基础 -> JavaWeb框架(JDBC, Maven, MyBatis, )

一、Java基础

基础数据类型

  • 数据类型:short、int、byte、char、long、float、double、boolean
  • 包装类型:Short、Int、Byte、Character、Long、Float、Double、Boolean
  • long变量后加L或l、float变量后加F或f,double可加可不加
  • === IEEE754标准 ===
  • === 变量间的转换===

运算符

  • == 和 != 适用于所有对象,用于比较对象的引用是否相同
  • 引用:Java 中一切都是对象,但操作的标识符实际是对象的一个引用
  • equals()方法用于比较内容是否相通;equalsIgnoreCase()忽略大小写;==用于比较对象在内存中的地址是否相同

流程控制语句

数组

  • 将a1[]赋值给a2[]只是复制了一个引用,即 a2 和 a1 是相同数组的不同名称
  • foreach用法:for(int age:ages){}

面向对象编程

    • 类中方法体外的变量是成员变量,也可能是用static修饰的类变量也叫静态变量。方法、构造方法或者语法块的是局部变量,会自动销毁
  • 对象
    • 定义类的时候不会为类开辟内存空间,但是一旦创建了对象,系统就会在内存中为对象开辟一块空间,用来存放对象的属性值和方法。
  • 构造方法
  • 引用与对象实例
    • String s = new String(“123”);
    • s是引用,在栈空间;new String()是对象,放在heap;new String(“123”)是实例,放在heap,这里是String,”123”放在常量池
    • 实例可以说是一个对象,但是不能说一个对象是一个实例,根据构造方法的不同会形成不同给的实例
  • static
    • 被 static 修饰的方法是静态方法,静态方法不依赖于对象,不需要将类实例化便可以调用,由于不实例化也可以调用,所以不能有 this,也不能访问非静态成员变量和非静态方法。但是非静态成员变量和非静态方法可以访问静态方法。
  • final
  • 封装
    • private getter() setter()
    • this是当前对象(new String())
  • 继承
    • 子类拥有父类除 private 以外的所有属性和方法、子类可以拥有自己的属性和方法、子类可以重写实现父类的方法、Java 中的继承是单继承,一个类只有一个父类
    • 子类构造方法需要调用父类的构造方法时,在子类的构造方法体里最前面的位置:super()
  • 方法重载与重写
    • 重载:方法名相同,但参数不同的多个方法
    • 重写:返回值类型,参数类型及个数,和方法名都必须一致
  • 多态
    • 多态的实现方式:继承父类进行方法重写,抽象类和抽象方法,接口实现
    • 多态有三个必要条件:继承、重写和向上转型(即父类引用指向子类对象)
  • 抽象类
    • 抽象类中可以包含普通的方法,也可以没有抽象方法
  • 接口
    • 接口不能用于实例化对象
    • 接口不能用于实例化对象。
    • 接口中方法只能是抽象方法、default 方法、静态方法。
    • 接口成员是 static final 类型。
    • 接口支持多继承。
  • 内部类
    • 内部类的成员变量 / 方法名可以和外部类的相同
    • 内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类
    • 内部类的方法可以直接访问外部类的所有数据,包括私有的数据
    • 内部类所实现的功能使用外部类同样可以实现,只是有时使用内部类更方便
    • 内部类允许继承多个非接口类型
    • 成员内部类的定义:内部类 对象名 = 外部类对象.new 内部类()
    • 静态内部类
      • 静态内部类不能直接访问外部类的非静态成员,但可以通过 new 外部类().成员 的方式访问
      • 如果外部类的静态成员与内部类的成员名称相同,可通过 类名.静态成员 访问外部类的静态成员;如果外部类的静态成员与内部类的成员名称不相同,则可通过 成员名 直接调用外部类的静态成员
      • 创建静态内部类的对象时,不需要外部类的对象,可以直接创建 内部类 对象名 = new 内部类();
    • 匿名内部类

常用类

  • Arrays
  • StringBuilder
    • 在经常改变字符串内容时不用String;StringBuilder 是线程不安全的,效率较高;而StringBuffer 是线程安全的,效率较低;StringBuffer 有同步锁,StringBuilder 没有,单线程环境下推荐使用 StringBuilder,多线程环境下推荐使用 StringBuffer
  • Calendar
  • Date
  • Math
  • System
  • Random

泛型

  • 只能是引用类型,参数可有多个
  • 可以用使用 extends 语句或者 super 语句 如 表示类型的上界,T 只能是 superClass 或其子类, 表示类型的下界,K 只能是 childClass 或其父类
  • 可以是通配符类型,比如常见的 Class<?>。单独使用 ? 可以表示任意类型。也可以结合 extends 和 super 来进行限制

集合框架

  • ArrayList在使用的时候默认的初始化对象数组的大小长度为10,如果空间不足采用2倍形式进行容量的扩充,如果保存大数据的时候有可能造成垃圾的产生以及性能的下降,但是这个时候可以使用LinkedList子类保存

  • Vector类的操作方法采用的都是synchronize同步处理,而ArrayList并没有进行同步处理,所有Vector类中方法在多线程访问的时候属于线程安全的,但是性能不如ArrayList高,所以在考虑到线程并发访问的情况下才会去使用Vector子类

  • 判断重复元素的判断处理就是hashCode()与equals()两个方法共同完成

  • HashMap中的方法都属于异步操作(非线程安全),HashMap允许保存的数据为空,Hashtable中的方法都属于同步操作(线程安全),Hashtable不允许保存null数据,否则会出现NullPointException异常。

  • 初始化容量扩充为16,当保存内容的容量扩充超过了与阈值*0.75=12时,就会进行容量的扩充。在进行扩充的时候HashMap采用的成倍的扩充模式即:每一次扩充两倍

  • Iterator

异常处理

  • try的意思是试试它所包含的代码段中是否会发生异常
  • catch当有异常时抓住它,并进行相应的处理,使程序不受异常的影响而继续执行下去
  • throw是在程序中明确引发异常。出现在方法体中,用于抛出异常。当方法在执行过程中遇到异常情况时,将异常信息封装为异常对象,然后throw
  • throws的作用是如果一个方法可以引发异常,而它本身并不对该异常处理,那么它必须将这个异常抛给调用它的方法。出现在方法的声明中,表示该方法可能会抛出的异常,允许throws后面跟着多个异常类型
  • finally是无论发不发生异常都要被执行的代码

Lambda表达式

  • Lambda 表达式优先用于定义功能接口在行内的实现,即单个方法只有一个接口
  • Lambda 表达式让匿名类不再需要,这为 Java 增添了简洁但实用的函数式编程能力
  • 方法引用可以通过方法的名字来引用其本身。方法引用是通过::来描述的
    • 构造器引用。语法是Class::new,或者更一般的 Class::new,要求构造器方法是没有参数;
    • 静态方法引用。语法是 Class::static_method
    • 特定类的任意对象方法引用。它的语法是 Class::method
    • 特定对象的方法引用,它的语法是 instance::method

函数式接口

Stream流

  • 元素序列:Stream 以序列的形式提供了特定类型的元素的集合。根据需求,它可以获得和计算元素,但不会储存任何元素
  • 源:Stream 可以将集合、数组和 I/O 资源作为输入源
  • 聚集操作:Stream 支持诸如 filter、map、limit、reduce 等的聚集操作
  • 流水技术:许多 Stream 操作返回了流本身,故它们的返回值可以以流水的行式存在。这些操作称之为中间操作,并且它们的功能就是负责输入、处理和向目标输出。collect() 方法是一个终结操作,通常存在于流水线操作的末端,来标记流的结束
  • 自动迭代:Stream 的操作可以基于已提供的源元素进行内部的迭代,而集合则需要显式的迭代
  • flatMap:Stream mergerStream = Stream.of(stream1, stream2, stream3).flatMap((i) -> i

io编程

  • 接口 DataInput 和 DataOutput,设计了一种较为高级的数据输入输出方式:除了可处理字节和字节数组外,还可以处理 int、float、boolean 等基本数据类型,这些数据在文件中的表示方式和它们在内存中的一样,无须转换,如 read(), readInt(), readByte()…; write(), writeChar(), writeBoolean()… 此外,还可以用 readLine() 方法读取一行信息。
  • 将匿名对象 写入到file中,注意:被写入的对象必须实现了Serializable接口:ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(file)); objectOutputStream.writeObject(new User(“shiyanlou”, “password”));static class User implements ==Serializable==
  • NIO是面向缓存的、非阻塞的 IO,而标准 IO 是面向流的,阻塞的 IO

网络编程

  • Socket(IP,Port) ServerSocket(Port)
  • TCP和UDP
  • HttpURLConnection

多线程

  • 创建线程的方法:

    • 继承 Thread 类并重写它的 run()方法,然后用这个子类来创建对象并调用 start() 方法

    • 定义一个类并实现 Runnable 接口,实现 run() 方法,当一个线程已经继承了另一个类时,就建议你通过实现Runnable接口来构造

  • Synchronized

    • 对普通方式使用,将会锁住当前实例对象
    • 对静态方法使用,将会锁住当前类的 Class 对象
    • 对代码块使用,将会锁住代码块中的对象
  • 线程池

  • concurrent

JDBC

  • 导入 JDBC 驱动: 只有拥有了驱动程序我们才可以注册驱动程序完成连接的其他步骤
  • 注册 JDBC 驱动程序:这一步会导致 JVM 加载所需的驱动类实现到内存中,然后才可以实现 JDBC 请求
  • 数据库 URL 指定:创建具有正确格式的地址,指向到要连接的数据库
  • 创建连接对象:最后,代码调用 DriverManager 对象的 getConnection() 方法来建立实际的数据库连接
  • Statement, CallableStatement, PreparedStatement和ResultSet
  • 事务

反射

  • Class 类没有公共构造方法,可以通过以下方法获取 Class 实例。
    • Object 提供的 getClass() 方法
    • 类名.Class
    • Class.forName(String className) 方法,className 为类的全限定名

正则表达式

  • //Pattern类 正则表达式的编译表示
  • Pattern pattern = Pattern.compile(“^[a-zA-Z0-9_!#$%&’*+/=?`{|}~^.-]+@[a-zA-Z0-9.-]+$”);
  • String[] emails = {“shiyanlou@shiyanlou.com“, “shiyanlou”};
  • for (String email : emails) {
  • //Matcher 通过解释Pattern对字符序列执行匹配操作的引擎
  • Matcher matcher = pattern.matcher(email);
  • System.out.println(email + “匹配结果:” + matcher.matches());
  • }

设计模式

  • 中介模式
  • 代理模式
  • 责任链模式

Web基础

CSS

JS

HTML

Java Web框架

Maven

  • 目录结构

MySql

  • 事务(Transaction)

    ​ 1、开启:begin;或start transaction; 2、提交:commit; 3、回滚:rollback;

MyBatis(持久层)

  • 入门:

    1、pom.xml配置,,resources创建mybatis-config.xml、logback和UserMapper.xml

    2、User类 3、加载配置文件,获取SQLSessionFactory 4、获取SqlSession对象

    5、执行Sql后释放资源

HTTP

Tomcat

Servlet

JSP

会话技术

Filter

1Listener

AJAX

Vue

Element

Spring

Spring MVC

Spring Boot

Netty

Spring Security

IDEA使用 -> Java语法 -> Web基础 -> 数据库基础 -> JavaWeb框架(JDBC, Maven, MyBatis, )

一、Java基础

基础数据类型

  • 数据类型:short、int、byte、char、long、float、double、boolean
  • 包装类型:Short、Int、Byte、Character、Long、Float、Double、Boolean
  • long变量后加L或l、float变量后加F或f,double可加可不加
  • === IEEE754标准 ===
  • === 变量间的转换===

运算符

  • == 和 != 适用于所有对象,用于比较对象的引用是否相同
  • 引用:Java 中一切都是对象,但操作的标识符实际是对象的一个引用
  • equals()方法用于比较内容是否相通;equalsIgnoreCase()忽略大小写;==用于比较对象在内存中的地址是否相同

流程控制语句

数组

  • 将a1[]赋值给a2[]只是复制了一个引用,即 a2 和 a1 是相同数组的不同名称
  • foreach用法:for(int age:ages){}

面向对象编程

    • 类中方法体外的变量是成员变量,也可能是用static修饰的类变量也叫静态变量。方法、构造方法或者语法块的是局部变量,会自动销毁
  • 对象
    • 定义类的时候不会为类开辟内存空间,但是一旦创建了对象,系统就会在内存中为对象开辟一块空间,用来存放对象的属性值和方法。
  • 构造方法
  • 引用与对象实例
    • String s = new String(“123”);
    • s是引用,在栈空间;new String()是对象,放在heap;new String(“123”)是实例,放在heap,这里是String,”123”放在常量池
    • 实例可以说是一个对象,但是不能说一个对象是一个实例,根据构造方法的不同会形成不同给的实例
  • static
    • 被 static 修饰的方法是静态方法,静态方法不依赖于对象,不需要将类实例化便可以调用,由于不实例化也可以调用,所以不能有 this,也不能访问非静态成员变量和非静态方法。但是非静态成员变量和非静态方法可以访问静态方法。
  • final
  • 封装
    • private getter() setter()
    • this是当前对象(new String())
  • 继承
    • 子类拥有父类除 private 以外的所有属性和方法、子类可以拥有自己的属性和方法、子类可以重写实现父类的方法、Java 中的继承是单继承,一个类只有一个父类
    • 子类构造方法需要调用父类的构造方法时,在子类的构造方法体里最前面的位置:super()
  • 方法重载与重写
    • 重载:方法名相同,但参数不同的多个方法
    • 重写:返回值类型,参数类型及个数,和方法名都必须一致
  • 多态
    • 多态的实现方式:继承父类进行方法重写,抽象类和抽象方法,接口实现
    • 多态有三个必要条件:继承、重写和向上转型(即父类引用指向子类对象)
  • 抽象类
    • 抽象类中可以包含普通的方法,也可以没有抽象方法
  • 接口
    • 接口不能用于实例化对象
    • 接口不能用于实例化对象。
    • 接口中方法只能是抽象方法、default 方法、静态方法。
    • 接口成员是 static final 类型。
    • 接口支持多继承。
  • 内部类
    • 内部类的成员变量 / 方法名可以和外部类的相同
    • 内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类
    • 内部类的方法可以直接访问外部类的所有数据,包括私有的数据
    • 内部类所实现的功能使用外部类同样可以实现,只是有时使用内部类更方便
    • 内部类允许继承多个非接口类型
    • 成员内部类的定义:内部类 对象名 = 外部类对象.new 内部类()
    • 静态内部类
      • 静态内部类不能直接访问外部类的非静态成员,但可以通过 new 外部类().成员 的方式访问
      • 如果外部类的静态成员与内部类的成员名称相同,可通过 类名.静态成员 访问外部类的静态成员;如果外部类的静态成员与内部类的成员名称不相同,则可通过 成员名 直接调用外部类的静态成员
      • 创建静态内部类的对象时,不需要外部类的对象,可以直接创建 内部类 对象名 = new 内部类();
    • 匿名内部类

常用类

  • Arrays
  • StringBuilder
    • 在经常改变字符串内容时不用String;StringBuilder 是线程不安全的,效率较高;而StringBuffer 是线程安全的,效率较低;StringBuffer 有同步锁,StringBuilder 没有,单线程环境下推荐使用 StringBuilder,多线程环境下推荐使用 StringBuffer
  • Calendar
  • Date
  • Math
  • System
  • Random

泛型

  • 只能是引用类型,参数可有多个
  • 可以用使用 extends 语句或者 super 语句 如 表示类型的上界,T 只能是 superClass 或其子类, 表示类型的下界,K 只能是 childClass 或其父类
  • 可以是通配符类型,比如常见的 Class<?>。单独使用 ? 可以表示任意类型。也可以结合 extends 和 super 来进行限制

集合框架

  • ArrayList在使用的时候默认的初始化对象数组的大小长度为10,如果空间不足采用2倍形式进行容量的扩充,如果保存大数据的时候有可能造成垃圾的产生以及性能的下降,但是这个时候可以使用LinkedList子类保存

  • Vector类的操作方法采用的都是synchronize同步处理,而ArrayList并没有进行同步处理,所有Vector类中方法在多线程访问的时候属于线程安全的,但是性能不如ArrayList高,所以在考虑到线程并发访问的情况下才会去使用Vector子类

  • 判断重复元素的判断处理就是hashCode()与equals()两个方法共同完成

  • HashMap中的方法都属于异步操作(非线程安全),HashMap允许保存的数据为空,Hashtable中的方法都属于同步操作(线程安全),Hashtable不允许保存null数据,否则会出现NullPointException异常。

  • 初始化容量扩充为16,当保存内容的容量扩充超过了与阈值*0.75=12时,就会进行容量的扩充。在进行扩充的时候HashMap采用的成倍的扩充模式即:每一次扩充两倍

  • Iterator

异常处理

  • try的意思是试试它所包含的代码段中是否会发生异常
  • catch当有异常时抓住它,并进行相应的处理,使程序不受异常的影响而继续执行下去
  • throw是在程序中明确引发异常。出现在方法体中,用于抛出异常。当方法在执行过程中遇到异常情况时,将异常信息封装为异常对象,然后throw
  • throws的作用是如果一个方法可以引发异常,而它本身并不对该异常处理,那么它必须将这个异常抛给调用它的方法。出现在方法的声明中,表示该方法可能会抛出的异常,允许throws后面跟着多个异常类型
  • finally是无论发不发生异常都要被执行的代码

Lambda表达式

  • Lambda 表达式优先用于定义功能接口在行内的实现,即单个方法只有一个接口
  • Lambda 表达式让匿名类不再需要,这为 Java 增添了简洁但实用的函数式编程能力
  • 方法引用可以通过方法的名字来引用其本身。方法引用是通过::来描述的
    • 构造器引用。语法是Class::new,或者更一般的 Class::new,要求构造器方法是没有参数;
    • 静态方法引用。语法是 Class::static_method
    • 特定类的任意对象方法引用。它的语法是 Class::method
    • 特定对象的方法引用,它的语法是 instance::method

函数式接口

Stream流

  • 元素序列:Stream 以序列的形式提供了特定类型的元素的集合。根据需求,它可以获得和计算元素,但不会储存任何元素
  • 源:Stream 可以将集合、数组和 I/O 资源作为输入源
  • 聚集操作:Stream 支持诸如 filter、map、limit、reduce 等的聚集操作
  • 流水技术:许多 Stream 操作返回了流本身,故它们的返回值可以以流水的行式存在。这些操作称之为中间操作,并且它们的功能就是负责输入、处理和向目标输出。collect() 方法是一个终结操作,通常存在于流水线操作的末端,来标记流的结束
  • 自动迭代:Stream 的操作可以基于已提供的源元素进行内部的迭代,而集合则需要显式的迭代
  • flatMap:Stream mergerStream = Stream.of(stream1, stream2, stream3).flatMap((i) -> i

io编程

  • 接口 DataInput 和 DataOutput,设计了一种较为高级的数据输入输出方式:除了可处理字节和字节数组外,还可以处理 int、float、boolean 等基本数据类型,这些数据在文件中的表示方式和它们在内存中的一样,无须转换,如 read(), readInt(), readByte()…; write(), writeChar(), writeBoolean()… 此外,还可以用 readLine() 方法读取一行信息。
  • 将匿名对象 写入到file中,注意:被写入的对象必须实现了Serializable接口:ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(file)); objectOutputStream.writeObject(new User(“shiyanlou”, “password”));static class User implements ==Serializable==
  • NIO是面向缓存的、非阻塞的 IO,而标准 IO 是面向流的,阻塞的 IO

网络编程

  • Socket(IP,Port) ServerSocket(Port)
  • TCP和UDP
  • HttpURLConnection

多线程

  • 创建线程的方法:

    • 继承 Thread 类并重写它的 run()方法,然后用这个子类来创建对象并调用 start() 方法

    • 定义一个类并实现 Runnable 接口,实现 run() 方法,当一个线程已经继承了另一个类时,就建议你通过实现Runnable接口来构造

  • Synchronized

    • 对普通方式使用,将会锁住当前实例对象
    • 对静态方法使用,将会锁住当前类的 Class 对象
    • 对代码块使用,将会锁住代码块中的对象
  • 线程池

  • concurrent

JDBC

  • 导入 JDBC 驱动: 只有拥有了驱动程序我们才可以注册驱动程序完成连接的其他步骤
  • 注册 JDBC 驱动程序:这一步会导致 JVM 加载所需的驱动类实现到内存中,然后才可以实现 JDBC 请求
  • 数据库 URL 指定:创建具有正确格式的地址,指向到要连接的数据库
  • 创建连接对象:最后,代码调用 DriverManager 对象的 getConnection() 方法来建立实际的数据库连接
  • Statement, CallableStatement, PreparedStatement和ResultSet
  • 事务

反射

  • Class 类没有公共构造方法,可以通过以下方法获取 Class 实例。
    • Object 提供的 getClass() 方法
    • 类名.Class
    • Class.forName(String className) 方法,className 为类的全限定名

正则表达式

  • //Pattern类 正则表达式的编译表示
  • Pattern pattern = Pattern.compile(“^[a-zA-Z0-9_!#$%&’*+/=?`{|}~^.-]+@[a-zA-Z0-9.-]+$”);
  • String[] emails = {“shiyanlou@shiyanlou.com“, “shiyanlou”};
  • for (String email : emails) {
  • //Matcher 通过解释Pattern对字符序列执行匹配操作的引擎
  • Matcher matcher = pattern.matcher(email);
  • System.out.println(email + “匹配结果:” + matcher.matches());
  • }

设计模式

  • 中介模式
  • 代理模式
  • 责任链模式

Web基础

CSS

JS

HTML

Java Web框架

Maven

  • 目录结构

MySql

  • 事务(Transaction)

    ​ 1、开启:begin;或start transaction; 2、提交:commit; 3、回滚:rollback;

MyBatis(持久层)

  • 入门:

    1、pom.xml配置,,resources创建mybatis-config.xml、logback和UserMapper.xml

    2、User类 3、加载配置文件,获取SQLSessionFactory 4、获取SqlSession对象

    5、执行Sql后释放资源

HTTP

Tomcat

Servlet

JSP

会话技术

Filter

1Listener

AJAX

Vue

Element

Spring

Spring MVC

Spring Boot

Netty

Spring Security

文章作者: 章鱼哥🐙
文章链接: http://octopus-go.top/2024/12/25/2023-01-01-JAVA%E5%AD%A6%E4%B9%A0/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 章鱼哥的家
骗你的,他看不到哦💔