Java基础

1、简介

Java是一种高级编程语言,它具有简单、面向对象、跨平台等特点。Java技术点包括但不限于以下几个方面:

  1. 基础语法:Java语言的基础语法包括数据类型、运算符、流程控制语句等。
  2. 面向对象编程:Java是一种面向对象的语言,它支持封装、继承和多态等面向对象的特性。
  3. 异常处理:Java提供了异常处理机制,程序员可以通过捕获、处理异常来增强程序的稳定性和健壮性。
  4. 多线程编程:Java提供了多线程编程的支持,程序员可以通过多线程来提高程序的并发性和效率。
  5. IO和NIO:Java提供了IO和NIO两种IO模型,程序员可以根据具体应用场景选择适合的IO模型。
  6. 设计模式:Java中广泛使用设计模式来解决各种软件设计问题,常用的设计模式包括单例模式、工厂模式、观察者模式等。
  7. 数据库编程:Java提供了多种方式来访问和操作数据库,包括JDBC、ORM框架等。
  8. Web开发:Java提供了多种Web开发框架,包括Servlet、JSP、Spring MVC等。
  9. 分布式编程:Java提供了多种分布式编程框架和技术,包括RMI、CORBA、SOA、RPC、Dubbo等。
  10. 测试和调试:Java提供了多种测试和调试工具,包括JUnit、Mockito、JMeter、VisualVM等。

总之,Java技术点非常广泛,不仅仅包括语言本身的基础知识,还包括各种常用库、框架、工具等。对于Java开发人员来说,深入学习Java技术点可以提高开发效率和质量。

1.1、面向对象编程简介

面向对象编程是一种编程范式,它将程序中的数据和操作数据的代码组织成对象,以此来描述现实世界中的问题。在面向对象编程中,程序被看作是一组相互作用的对象,每个对象都可以执行特定的操作,通过消息传递来协调彼此的行为。

面向对象编程强调对象的概念,而不是过程或函数。

面向对象编程具有封装、继承、多态等特性。封装将数据和方法结合在一起形成类,隐藏了对象内部的细节,只公开一些必要的接口。继承允许从已有的类派生出新的类,使得新类继承了旧类的属性和方法,同时也可以扩展或修改旧类的行为。多态指的是一个对象可以表现出多种形态,即同一个消息可以被不同的对象接收并有不同的行为。

面向对象编程具有易于维护、可扩展、可重用等优点,因此被广泛应用于各种软件开发领域。

1.2、设计原则

面向对象开发有一些原则,也称为面向对象设计原则,这些原则可以指导开发人员设计出易于维护、扩展和重用的面向对象系统。以下是常见的面向对象开发原则:

  1.  单一职责原则(Single Responsibility Principle,SRP):一个类或模块只负责单一功能或职责。
  2. 开放封闭原则(Open Closed Principle,OCP):一个模块或类应该对扩展开放,对修改关闭。
  3. 里氏替换原则(Liskov Substitution Principle,LSP):一个基类的实例应该能够被其子类的实例替换,而不会影响程序的正确性。
  4. 依赖倒置原则(Dependency Inversion Principle,DIP):高层模块不应该依赖于底层模块,二者都应该依赖于抽象;抽象不应该依赖于具体实现,具体实现应该依赖于抽象。
  5. 接口隔离原则(Interface Segregation Principle,ISP):多个特定的客户端接口要好于一个宽泛用途的接口。
  6. 合成/聚合复用原则(Composite/Aggregate Reuse Principle,CARP):尽可能使用对象组合和聚合,而不是继承来达到代码复用的目的。
  7. 迪米特法则(Law of Demeter,LoD):一个对象应该对其他对象有最少的了解,只与最直接的朋友通信,避免和陌生的对象发生耦合关系。 

这些原则旨在提高代码的可读性、可维护性、可扩展性和可重用性,帮助开发人员编写出高质量的面向对象程序。

1.2.1、开闭原则

对扩展开放,对修改关闭。

当需求发生变化时,在不修改软件实体源代码的情况下,可以进行功能扩展,使其满足新需求。

1.2.2、里氏替换原则

继承必须确保超类所拥有的性质在子类中仍然成立。

通俗来讲就是,子类可以扩展父类的功能,但不能改变父类原有的功能,即不可以重写父类的方法。

如果通过重写父类方法扩展新功能,写起来可能会很简单,但这会使整个继承体系的可复用性变得很差,特别是运用多态比较频繁时,程序很有可能会运行错误。

典型案例,“正方形不是长方形”,“鸵鸟不是鸟”。

1.2.3、依赖倒置原则

要面向接口编程,不要面向实现编程。

原始定义为:高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象。

依赖倒置原则是实现开闭原则重要途径之一。

1.2.4、单一职责原则

控制类的粒度大小,将对象解耦,提高其内聚性。

职责指类变化的原因,一个类应当有且只有一个引起它变化的原因,若有多个则该类需要拆分。如果一个对象承担了太多职责,至少会存在以下两个缺点:

一、当一个职责变化时,可能会影响该类实现其他职责的能力。

二、当客户端需要该对象的某一个职责时,不得不将其他不需要的职责全都包含进来,从而造成冗余代码或代码的浪费。

单一职责同样也适用于方法。一个方法应该尽可能做好一件事情,如果一个方法处理的事情太多,其颗粒度会变得很粗,不利于重用。

1.2.5、接口隔离原则

要为各个类建立它们需要的专用接口,而不要试图去建立一个很庞大的接口供所有依赖它的类去调用。

接口隔离原则和单一职责都是为了提高类的内聚性、降低它们之间的耦合性,体现了封装的思想,但两者是不同的:

单一职责原则注重的是职责,而接口隔离原则注重的是对接口依赖的隔离。

单一职责原则主要是约束类,它针对的是程序中的实现和细节;接口隔离原则主要约束接口,主要针对抽象和程序整体框架的构建。

1.2.6、迪米特法则

只与你的直接朋友交谈,不跟“陌生人”说话。

简单来说就是,如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用。其目的是降低类之间的耦合度,提高模块的相对独立性。

但过度使用迪米特法则会使系统产生大量的中介类,从而增加系统的复杂性,使模块之间的通信效率降低。所以,在釆用迪米特法则时需要反复权衡,确保高内聚和低耦合的同时,保证系统的结构清晰。

1.2.7、合成复用原则

软件复用时,要尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现。组合是“has a”关系,继承是“is a”关系。

组合就是A类的对象是B类的成员变量,相当于 A类是B类对象的一个属性。

例如,Dog类和Animal类应该使用继承关系,因为狗是动物;Person类和Head类应该使用组合关系,因为头是组成人体的一部分,即人有头。

如果要使用继承关系,则必须严格遵循里氏替换原则。合成复用原则同里氏替换原则相辅相成的,两者都是开闭原则的具体实现规范。

Java接口之间的多继承

接口的多继承是指一个接口可以继承自多个其他接口。在Java语言中,类只能单继承,但是接口可以多继承。这样可以使得接口更加灵活,具有更高的复用性。

举个例子,假设我们有一个 Shape 接口表示图形,还有一个 Color 接口表示颜色,现在我们要定义一个新的接口 ColoredShape,它既要继承 Shape 接口,又要继承 Color 接口,就可以使用接口的多继承:

public interface Shape {
    void draw();
}

public interface Color {
    void setColor(String color);
}

public interface ColoredShape extends Shape, Color {
    // 新的接口继承了 Shape 和 Color 接口
}

这样,实现 ColoredShape 接口的类就必须实现 draw() 和 setColor() 两个方法,同时具有图形和颜色的特征,可以实现更加灵活的设计和组合。

你可能感兴趣的:(JAVA基础,java)