Java基础知识整理
final
- final可以修饰属性。
- 对于基本类型数据,final会将其值变为一个常数,创建后不能被修改。
- 对于引用类型数据,final会将其引用地址变为一个常数,进行声明时必须初始化到一个具体的对象,创建后不能再指向另一个对象,但是对象的本身是可以修改的。
- final修饰的方法表示该方法在子类中不能被重写。
- final修饰的类表示该类不能被继承。
static
- static修饰的属性、方法、代码段跟该类的具体对象无关,不创建对象也能调用static修饰的属性、方法等。
- 被static修饰的成员变量叫做静态变量,也叫做类变量,这个变量是属于这个类的。
- static修饰方法的时候,可以直接通过类名来进行调用。
- 一个类要被声明为static的,只有一种情况,就是静态内部类。
- 静态内部类可以被单独初始化。
- 静态内部类跟静态方法一样,只能访问静态的成员变量和方法,不能访问非静态的方法和属性,但是普通内部类可以访问任意外部类的成员变量和方法。
- 静态内部类可以声明普通成员变量和方法,而普通内部类不能声明static成员变量和方法。
- 静态内部类使用场景一般是当外部类需要使用内部类,而内部类无需外部类资源,并且内部类可以单独创建的时候会考虑采用静态内部类的设计。
abstract
- abstract一般用来修饰类和方法。
- abstract修饰类,会使得类变成抽象类。
- 一个类只能继承一个抽象类。
- 抽象类不能生成实例,但是可以作为对象变量声明的类型,也就是编译时类型。
- 抽象类虽然不能实例化,但是有自己的构造方法。
- 抽象类需要子类继承并覆盖其中的方法。
- abstract修饰方法会使得这个方法变成抽象方法,也就是只有声明,而没有实现,需要子类重写。
- 有抽象方法的类一定是抽象类,但是抽象类不一定有抽象方法。
- 父类是抽象类,其中有抽象方法,那么子类继承父类,并把父类中的所有抽象方法都实现了,子类才有创建对象实例的能力,否则子类也必须是抽象类。
interface
- 接口支持多继承。
- 接口不是被类继承了,而是要被类实现,一个类却可以实现多个接口。
- 接口中可以含有变量,但是接口中的变量会被隐式的指定为public static final变量。
- 接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为public abstract方法。
- 接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法。
类的初始化
- 先父类定义初始化,即父类的变量初始化;
- 接着运行父类构造函数,先无参父类构造函数,后有参父类构造函数;
- 然后子类定义初始化,即子类的变量初始化;
- 最后运行子类构造函数,先无参子类构造函数,后有参子类构造函数。
Cast 造型
-
基本数据类型cast,称为 强制类型转换,源数据被修改成目标类型,并赋值给接受变量,接受变量类型为目标类型;
-
对象cast,称为 造型,源数据不会被改动,只是单纯得被认为是目标类型,接受变量将指向源数据,接受变量类型为源数据类型。
-
造型,在例如List list = new ArrayList(); 时, ArrayList 被 向上 认为是 父类 List,但list实际内容的类型为ArrayList。
面向对象的六原则一法则
- 开闭原则:软件实体应当对扩展开放,对修改关闭。
- 依赖倒转原则:面向接口编程。
- 里氏替换原则:任何时候都可以用子类型替换掉父类型。
- 接口隔离原则:接口要小而专,绝不能大而全。
- 合成聚合复用原则:优先使用聚合或合成关系复用代码。
- 迪米特法则:迪米特法则又叫最少知识原则,一个对象应当对其他对象有尽可能少的了解。
常用框架核心思想解读
-
框架 是对JDK的一种封装,简化程序员代码,让开发者更专注于业务。
-
学习框架不只是为了会用其api,更要从中学习提炼一些开发思维。
-
读源码是最好的学习途径。
-
如何读源码?从寻找逻辑基点(最小知识点)开始。
-
spring的核心ioc和aop,而每一个object又怎么被存储呢?由于寻找时我们使用其名字,所以spring用map去存储。
-
springboot, 为了去xml, 我们可以用注解@Configuration去配置,用@Bean去获得bean;而在处理配置依赖问题时,我们现在使用条件注解@ConditionOnXXXXX。
-
springcloud,为了解决分布式系统,各个服务子系统集群相互访问时存在nginx无法解决的单点问题,我们需要一个注册中心,并且通过心跳来确认每个服务的存活以及对应的ip与端口。
Spring基础
-
Spring 的两大核心机制是 IoC(控制反转)和 AOP(面向切面编程),这两大核心机制也是 Java 设计模式的典型代表。
其中 IoC 是工厂模式,AOP 是代理模式。 -
在 spring.xml 中,通过 ref 属性将其他 bean 赋给当前 bean 对象,这种方式叫做依赖注入(DI),是 Spring 非常重要的机制,DI 是将不同对象进行关联的一种方式,是 IoC 的具体实现方式,通常 DI 和 IoC 是紧密结合在一起的,因此一般说的 IoC 包括 DI。
-
集合属性通过 list 标签和 ref 标签完成注入,ref 的 bean 属性指向需要注入的 bean 对象。
-
IoC 中可以给类添加的注解有 4 种:@Controller、@Service、@Repository、@Component。在实际开发中,我们使用 @Controller、@Service、@Repository 分别表示 Controller 层、Service 层、DAO 层。
数据库事务ACID
事务特性 | 描述 |
---|---|
原子性(Atomicity,或称不可分割性) | 一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。 |
一致性(Consistency) | 在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。 |
隔离性(Isolation,又称独立性) | 数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。 |
持久性持久性(Durability) | 事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。 |