d什么是低耦合高内聚
低耦合高内聚是软件设计的一个重要原则。
低耦合意味着:
-
模块之间的依赖关系尽可能少。一个模块的变化不会影响其他模块。
-
模块之间通过明确定义的接口进行通信,不会相互访问内部数据。
高内聚意味着:
-
模块内部功能强相关,实现了一个明确的单一功能。
-
模块内部代码、数据高度集成,实现了该功能模块的完整逻辑。
简单来说: -
低耦合指软件组件之间的依赖关系少。
-
高内聚指软件组件内部代码和数据的集中性强,实现了明确的单一功能。
这是一种良好的软件设计原则。它可以提高软件的可扩展性、可维护性和可靠性。通过低耦合和高内聚的设计,可以更好地实现模块的独立性和可复用性。
区分向下,向上转型 – 从等号右边看,把右边的值付给左边
向上转型和向下转型是面向对象编程中的两个重要概念:
向上转型例子:
假设有一个Animal类,然后有Cat和Dog两个子类继承Animal类。
Animal animal = new Cat();
这里我们把Cat对象赋值给Animal类型的变量,这就是向上转型。
向上转型的好处是可以把子类对象作为父类使用,扩大了对象的使用范围。
向下转型例子:
Cat cat = (Cat)animal;
这里我们把Animal类型变量强制转换为Cat类型,这就是向下转型。
向下转型前需要判断animal对象是否真的是Cat类型,否则会抛出ClassCastException异常。
向下转型的好处是可以调用子类特有的方法,但同时也增加了类型检查的复杂性。
总之:
- 向上转型是把子类对象赋值给父类变量,扩大了对象的使用范围。
- 向下转型是把父类变量强制转换为子类,以调用子类特有功能,但需要类型检查防止异常。
它们在面向对象设计和编程中都很常见。
synchronized 的 原理是什么
synchronized关键字的原理主要有以下几点:
- 对象监视器(Object Monitor)
每个Java对象都可以关联一个对象监视器。synchronized关键字就是通过对象监视器来完成同步的。 - 互斥锁
对象监视器内部会维护一把锁,称为互斥锁。当线程获取了这个对象的锁,其他线程就无法获取这个对象的锁。 - 同步队列
如果一个线程试图获取已经被其他线程锁住的对象的锁,会将该线程放入对象监视器的同步队列中进行等待。 - 同步进入/退出
线程进入synchronized代码块或方法时,会先获取对应的对象锁。退出时会释放锁。 - 可重入锁
同一个线程可以多次获取同一把锁。这对于递归调用很重要。 - 可中断锁
锁可以响应线程中断,如果线程等待锁时被中断,会抛出InterruptedException。 - 锁优先级翻转
如果一个高优先级线程等待低优先级线程释放锁,会导致优先级翻转,高优先级线程优先获得锁。
所以synchronized的原理就是通过对象监视器维护一把互斥锁,实现同一时刻只有一个线程持有该锁,从而保证同步访问的线程安全性。
Java枚举类的定义和使用如下:
public enum Day {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
枚举类里面的枚举值默认没有类型,它们本身就是一个个静态常量值。
Runtime类
所以总的来说,Runtime类提供了操作系统级别和JVM级别的运行时信息,可以用于监控JVM状态、优化内存使用、动态加载类、执行外部程序等高级功能。它给Java程序提供了一定的系统编程能力。
如何理解开闭原则
对扩展开放,对修改关闭。听起来很高级但是他们的本质很简单,其实就是换个地方添加代码。
如
public class SimpleCoffeeFactory {
public static Coffee createCoffee(String type) {
Coffee coffee = null;
if("americano".equals(type)) {
coffee = new AmericanoCoffee();
} else if("latte".equals(type)) {
coffee = new LatteCoffee();
}
return coffe;
}
}
就可以改成接口的形式
public interface CoffeeFactory {
Coffee createCoffee();
}
然后再来具体的工厂的对象
public class LatteCoffeeFactory implements CoffeeFactory {
public Coffee createCoffee() {
return new LatteCoffee();
}
}
这样我们就把黑体处要添加的代码移了出来,即要添加新的代码就变成了添加一个新的具体类来继承就行了,就不用该原来类的代码。这样就完成了代码的“移动”,形成了开闭原则
链式编程的特点是什么
链式编程的主要特点是:
- 每个方法返回自身的实例对象,允许方法链接在一起调用。
- 可以在一个语句中连续调用多个方法,而不需要在每个方法之间定义变量或临时变量。
此文章用于笔者记录学习,也希望对你有帮助