NIO编程及其三大核心原理

Java NIO,全称为java non-blocking IO,是指JDK提供得到新API。从JDK1.4开始,Java提供了一系列改进的输入/输出的新特性,被统称为NIO(New IO),是同步非阻塞的。
阅读更多

Java的重载、覆盖和隐藏的区别

Java的重载、覆盖和隐藏的区别

重载:方法名相同,但参数不同的多个同名函数。

发生在子类于父类之间,是指在子类与父类之间或在同一类中定义具有相同的方法名,访问权限等的方发。

区别在于返回类型或参数列表。

注意:

  1. 参数不同的意思是参数类型、参数个数、参数顺序至少有一个不同

  2. 返回值和异常以及访问修饰符,不能作为重载的条件(因为对于匿名调用,会出现歧义,eg:void a ()和int a() ,如果调用a(),出现歧义)

  3. main方法也是可以被重载的

覆盖:子类重写父类的方法,要求方法名和参数类型完全一样(参数不能是子类),返回值和异常比父类小或者相同(即为父类的子类),访问修饰符比父类大或者相同。

两同两小一大

发生在子类与父类的之间,指在在子类中声明一个和父类具有相同的方法名,参数列表,返回值,访问权限等的方法,即在子类中重新编写方法实现的功能。

覆盖不同于静态方发的隐藏,父类中被隐藏的方法在子类中完全不可用,而父类中被覆盖的方法在子类中可以通过其他方式被引用。

注意:

  1. 子类实例方法不能覆盖父类的静态方法;

  2. 子类的静态方法也不能覆盖父类的实例方法(编译时报错),总结为方法不能交叉覆盖

隐藏:父类和子类拥有相同名字的属性或者方法时,父类的同名的属性或者方法形式上不见了,实际是还是存在的。

隐藏现象发生在子类和父类之间,隐藏是针对父类中成员变量和静态方法而言。

当子类声明与父类中成员变量具有相同的变量名的变量时,则实现了对父类中成员变量的隐藏;

当子类声明了与父类中的静态成员方法具有相同的方法名,参数列表和相同的返回值时,则实现了对父类中静态方法的隐藏。

注意:

  1. 当发生隐藏的时候,声明类型是什么类,就调用对应类的属性或者方法,而不会发生动态绑定
  2. 方法隐藏只有一种形式,就是父类和子类存在相同的静态方法
  3. 属性只能被隐藏,不能被覆盖
  4. 子类实例变量/静态变量可以隐藏父类的实例/静态变量,总结为变量可以交叉隐藏

隐藏和覆盖的区别:

  • 被隐藏的属性,在子类被强制转换成父类后,访问的是父类中的属性
  • 被覆盖的方法,在子类被强制转换成父类后,调用的还是子类自身的方法
  • 因为覆盖是动态绑定,是受RTTI(run time type identification,运行时类型检查)约束的,隐藏不受RTTI约束,总结为RTTI只针对覆盖,不针对隐藏

特殊情况:

  1. final修饰的属性可以被隐藏,但是不能被赋值,即不能用=来赋值,网上说final属性不能被修改,这个说法不准确,因为对于引用类型的变量用final修饰后,它只是不能被指向其他对象,但是可以改它自身的值,可以用ArrayList测试,final属性可以在运行的时候进行初始化,但是不能不出现初始化语句

  2. final修饰的方法不能被覆盖,可以被重载

  3. final修饰的类不能被继承

  4. private 方法隐式添加了final

案例:

SuperClass

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/**
* @name: SuperClass
* @author: terwer
* @date: 2022-05-01 21:04
**/
public class SuperClass {
public static int i = 1;
public int j = 2;
public final int k = 3;

public static void method1() {
System.out.println("SuperClass Method1");
}

public void method2() {
System.out.println("SuperClass Method2");
}

public final void method3() {
System.out.println("SuperClass Method3");
}
}

SubClass

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/**
* @name: SubClass
* @author: terwer
* @date: 2022-05-01 21:04
**/
public class SubClass extends SuperClass {
// 无论是不是static,都能隐藏父类的变量i
public static int i = 2;
public static int j = 1;
// 无论是不是final,都能隐藏父类的变量k
public final int k = 4;

public static void method1() {
System.out.println("SubClass Method1");
}

public void method2() {
System.out.println("SubClass Method2");
}
}

Main

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/**
* 主函数入口
*
* @author terwer
* @version 1.0
**/
public class Main {
public static void main(String[] args) {

SuperClass sc = new SubClass();
System.out.println("i = " + sc.i);
System.out.println("j = " + sc.j);
System.out.println("k = " + sc.k);

sc.method1();//静态方法只能被隐藏
sc.method2();

SubClass subc = new SubClass();
System.out.println("i = " + subc.i);
System.out.println("j = " + subc.j);
System.out.println("k = " + subc.k);

subc.method1();
subc.method2();
}
}

运行结果:

1
2
3
4
5
6
7
8
9
10
i = 1
j = 2
k = 3
SuperClass Method1
SubClass Method2
i = 2
j = 1
k = 4
SubClass Method1
SubClass Method2

image-20220501211657825

override-hidden-demo

关于Springboot配置thymeleaf的404问题

本文描述了一个关于 YAML 配置和 Spring Boot 的问题。问题出在 Spring Boot 项目的包结构上,导致自动扫描无法注册 controller 类,从而无法访问。通过将 controller 包移动到与 application 类同一包的子包下,问题得以解决。
阅读更多

Mac安装Nginx

本文介绍了通过Homebrew安装Nginx的过程。安装完成后,Nginx的默认文档根目录为/usr/local/var/www,默认端口设置为80。Nginx可以通过brew services启动,并可以使用usr/local/opt/nginx/bin/nginx -g 'daemon off;'命令非后台启动。停止Nginx可使用brew services stop nginx命令。
阅读更多

分布式理论之BASE定理

BASE理论是对CAP定理的演化,强调在分布式系统中,不同于CAP的同时满足,它关注基本可用性、软状态和最终一致性。基本可用性指系统在故障下仍能部分可用;软状态允许数据存在中间状态,不影响整体可用性;最终一致性要求在一定时间内达到数据副本一致性。这一理论适用于大型互联网系统,权衡了一致性和可用性,实现了分布式系统的容错性。
阅读更多

分布式理论之数据一致性

分布式数据一致性是分布式系统中的关键问题,涉及多份数据副本的同步和一致性级别的权衡。一致性级别包括强一致性、弱一致性和最终一致性等。强一致性要求写入立即可读,但性能受影响。最终一致性允许一定的不一致,但在一定时间后保证一致。还有因果一致性、读已之所写一致性、会话一致性和单调读写一致性等变种。分布式系统需要根据需求选择适当的一致性级别以平衡性能和数据一致性。
阅读更多

分布式理论之CAP定理

CAP定理(又称布鲁尔定理)指出在分布式系统中不可能同时满足一致性、可用性和分区容错性这三个要求。一致性要求写操作后的读操作返回相同值,可用性要求非故障节点必须有响应,分区容错性要求系统在网络分区故障时仍能满足一致性和可用性。CAP定理三者不能同时满足,需在一致性、可用性、分区容错性中进行权衡选择。CA模式追求一致性和可用性,CP模式注重一致性和分区容错性,AP模式强调可用性和分区容错性。实际应用中需根据需求做出选择,如互联网应用倾向于保障可用性,而银行等领域更注重一致性。
阅读更多