目录

一、基础语法

1. 类与对象

2. 接口与抽象类

二、面向对象语法

1. 继承与多态

2. 四种访问修饰符

三、设计模式相关语法

一、策略模式(接口回调实现)

1. 完整实现与解析

二、工厂模式(静态工厂方法实现)

1. 完整实现与解析

2. 模式变体

(1) 简单工厂模式(如上例)

(2) 工厂方法模式

三、观察者模式(内部类实现)

1. 完整实现与解析

2. 使用内部类的优化实现

四、设计模式综合应用示例

电商系统折扣策略案例

四、其他核心语法

1. List/Set/Map基本操作

2. 集合遍历

3.异常处理语法

4.IO基础语法

5.泛型类型推断

五、设计题高频语法要点

1. 枚举类型(状态模式常用)

2. 泛型(提高代码复用性)

六、例题 


一、基础语法

1. 类与对象

// 类定义   
public class ClassName {// 字段(成员变量)private int field;// 构造方法public ClassName(int param) {this.field = param;}// 方法public void methodName() {// 方法体}   
}// 对象创建与使用   
ClassName obj = new ClassName(10);   
obj.methodName();

2. 接口与抽象类

// 接口定义   
public interface InterfaceName {void abstractMethod();// Java8+默认方法default void defaultMethod() {// 实现}   
}// 抽象类定义   
public abstract class AbstractClass {public abstract void abstractMethod();public void concreteMethod() {// 实现}   
}   

二、面向对象语法

1. 继承与多态

class Parent {public void show() {System.out.println("Parent");}   
}class Child extends Parent {@Overridepublic void show() {System.out.println("Child");}   
}// 多态示例   
Parent obj = new Child();
obj.show(); // 输出"Child"

2. 四种访问修饰符

  • public - 所有类可见
  • protected - 同包及子类可见
  • 默认(无修饰符) - 同包可见
  • private - 仅本类可见

三、设计模式相关语法

一、策略模式(接口回调实现)

interface Strategy {void execute();   
}class Context {private Strategy strategy;public void setStrategy(Strategy s) {this.strategy = s;}public void executeStrategy() {strategy.execute();}        
}        

1. 完整实现与解析

// 策略接口   
interface PaymentStrategy {void pay(double amount);   
}// 具体策略类   
class CreditCardPayment implements PaymentStrategy {private String cardNumber;public CreditCardPayment(String cardNumber) {this.cardNumber = cardNumber;}@Overridepublic void pay(double amount) {System.out.println("使用信用卡" + cardNumber + "支付" + amount + "元");}   
}class AlipayPayment implements PaymentStrategy {private String account;public AlipayPayment(String account) {this.account = account;}@Overridepublic void pay(double amount) {System.out.println("使用支付宝账户" + account + "支付" + amount + "元");}   
}// 上下文类   
class PaymentContext {private PaymentStrategy strategy;public void setStrategy(PaymentStrategy strategy) {this.strategy = strategy;}public void executePayment(double amount) {strategy.pay(amount);}   
}// 使用示例   
public class StrategyDemo {public static void main(String[] args) {PaymentContext context = new PaymentContext();// 使用信用卡支付context.setStrategy(new CreditCardPayment("1234-5678-9012-3456"));context.executePayment(100.0);// 切换为支付宝支付context.setStrategy(new AlipayPayment("example@alipay.com"));context.executePayment(200.0);}   
}
  • 核心思想:定义算法族,分别封装起来,使它们可以互相替换

二、工厂模式(静态工厂方法实现)

class ProductFactory {public static Product createProduct(String type) {switch(type) {case "A": return new ProductA();case "B": return new ProductB();default: throw new IllegalArgumentException();}}            
}            

1. 完整实现与解析

// 产品接口   
interface Shape {void draw();   
}// 具体产品类   
class Circle implements Shape {@Overridepublic void draw() {System.out.println("绘制圆形");}   
}class Rectangle implements Shape {@Overridepublic void draw() {System.out.println("绘制矩形");}   
}// 工厂类   
class ShapeFactory {// 静态工厂方法public static Shape createShape(String type) {if(type == null) {return null;}if(type.equalsIgnoreCase("CIRCLE")) {return new Circle();} else if(type.equalsIgnoreCase("RECTANGLE")) {return new Rectangle();}throw new IllegalArgumentException("不支持的形状类型");}   
}// 使用示例   
public class FactoryDemo {public static void main(String[] args) {// 使用工厂创建对象Shape circle = ShapeFactory.createShape("circle");circle.draw();Shape rectangle = ShapeFactory.createShape("rectangle");rectangle.draw();}    
}    

2. 模式变体

(1) 简单工厂模式(如上例)
(2) 工厂方法模式
interface ShapeFactory {Shape createShape();    
}class CircleFactory implements ShapeFactory {public Shape createShape() {return new Circle();}    
}class RectangleFactory implements ShapeFactory {public Shape createShape() {return new Rectangle();}
}
  • 核心思想:将对象的创建与使用分离

三、观察者模式(内部类实现)

class Subject {private List<Observer> observers = new ArrayList<>();public void addObserver(Observer o) {observers.add(o);}public void notifyObservers() {for(Observer o : observers) {o.update();}}// 观察者接口interface Observer {void update();}        
}        

1. 完整实现与解析

import java.util.ArrayList;   
import java.util.List;// 主题接口   
interface Subject {void registerObserver(Observer o);void removeObserver(Observer o);void notifyObservers();   
}// 具体主题类   
class WeatherData implements Subject {private List<Observer> observers;private float temperature;public WeatherData() {observers = new ArrayList<>();}@Overridepublic void registerObserver(Observer o) {observers.add(o);}@Overridepublic void removeObserver(Observer o) {observers.remove(o);}@Overridepublic void notifyObservers() {for(Observer observer : observers) {observer.update(temperature);}}// 业务方法:当气象站数据更新时调用public void measurementsChanged(float newTemp) {this.temperature = newTemp;notifyObservers();}   
}// 观察者接口   
interface Observer {void update(float temperature);   
}// 具体观察者类   
class CurrentConditionsDisplay implements Observer {@Overridepublic void update(float temperature) {System.out.println("当前温度: " + temperature + "℃");}   
}// 使用示例   
public class ObserverDemo {public static void main(String[] args) {WeatherData weatherData = new WeatherData();CurrentConditionsDisplay display = new CurrentConditionsDisplay();// 注册观察者weatherData.registerObserver(display);// 模拟数据变化weatherData.measurementsChanged(25.5f);weatherData.measurementsChanged(26.0f);}        
}        

2. 使用内部类的优化实现

class WeatherData {private List<Observer> observers = new ArrayList<>();private float temperature;// 内部接口public interface Observer {void update(float temp);}public void addObserver(Observer o) {observers.add(o);}public void setMeasurements(float temp) {this.temperature = temp;notifyObservers();}private void notifyObservers() {for(Observer o : observers) {o.update(temperature);}}        
}// 使用匿名内部类
WeatherData weather = new WeatherData();
weather.addObserver(new WeatherData.Observer() {@Overridepublic void update(float temp) {System.out.println("温度更新: " + temp);}
});
  • 核心思想:定义对象间一对多的依赖关系,当一个对象状态改变时,所有依赖它的对象都得到通知

四、设计模式综合应用示例

电商系统折扣策略案例

// 策略模式:折扣策略   
interface DiscountStrategy {double applyDiscount(double originalPrice);   
}class NoDiscount implements DiscountStrategy {public double applyDiscount(double price) {return price;}   
}class PercentageDiscount implements DiscountStrategy {private double percentage;public PercentageDiscount(double percentage) {this.percentage = percentage;}public double applyDiscount(double price) {return price * (1 - percentage/100);}   
}// 工厂模式:创建折扣策略   
class DiscountStrategyFactory {public static DiscountStrategy createStrategy(String type, double param) {switch(type) {case "NONE": return new NoDiscount();case "PERCENT": return new PercentageDiscount(param);default: throw new IllegalArgumentException();}}   
}// 观察者模式:订单状态通知   
class Order {private List<OrderObserver> observers = new ArrayList<>();private String status;public interface OrderObserver {void update(String orderStatus);}public void addObserver(OrderObserver o) {observers.add(o);}public void setStatus(String status) {this.status = status;notifyObservers();}private void notifyObservers() {for(OrderObserver o : observers) {o.update(status);}}
}
  1. 模式识别:快速判断题目要求使用的设计模式
  2. 类图转换:能够将UML类图转换为Java代码
  3. 模式组合:注意多种设计模式的组合使用
  4. 代码规范
    • 类名使用大驼峰
    • 方法名使用小驼峰
  5. 设计原则
    • 单一职责原则
    • 接口隔离原则

四、其他核心语法

1. List/Set/Map基本操作

List<String> list = new ArrayList<>();        
list.add("Java");        
list.get(0);Set<Integer> set = new HashSet<>();        
set.add(1);        
set.contains(1);Map<String, Integer> map = new HashMap<>();           
map.put("age", 25);   
map.get("age");   

2. 集合遍历

// for-each循环   
for(String item : list) {System.out.println(item);   
}// 迭代器   
Iterator<String> it = list.iterator();   
while(it.hasNext()) {System.out.println(it.next());   
}// Lambda表达式(Java8+)   
list.forEach(item -> System.out.println(item));   

3.异常处理语法

try {// 可能抛出异常的代码int result = 10 / 0;   
} catch (ArithmeticException e) {System.err.println("除零错误: " + e.getMessage());    
} finally {System.out.println("总会执行的代码");    
}    

4.IO基础语法

// 文件读取    
try (BufferedReader br = new BufferedReader(new FileReader("file.txt"))) {String line;while ((line = br.readLine()) != null) {System.out.println(line);}    
} catch (IOException e) {e.printStackTrace();    
}    

 5.泛型类型推断

通过泛型指定集合只能存储String类型,避免运行时ClassCastException

 // Java 5/6:需重复声明类型List<String> list = new ArrayList<String>();// Java 7+:使用<>自动推断List<String> list = new ArrayList<>();  // 编译器推断为ArrayList<String>

五、设计题高频语法要点

1. 枚举类型(状态模式常用)

enum State {START, RUNNING, STOPPED
}public class StateMachine {private State current = State.START;public void changeState(State newState) {this.current = newState;}
}

2. 泛型(提高代码复用性)

class Box<T> {private T content;public void set(T content) {this.content = content;}public T get() {return content;}
}// 使用
Box<String> stringBox = new Box<>();
stringBox.set("Hello");

六、例题 

阅读以下函数说明和Java代码,将应填入(n)处的子句写在答题纸的对应栏内。


【说明】

现有一个显示系统,要显示的图形有线Line、矩形Square,抽象出一个Shape类(接口),有方法显示display()。

需要新增图形Circle,又已知有类XXCircle实现了所需要实现的功能:显示displayIt()。为了继承自Shape以提供统一接口,又不希望从头开发代码,希望使用XXCircle。这样将XXCircle作为Circle的一个属性,即Circle的对象包含一个XXCircle对象。当一个Circle对象被实例化时,它必须实例化一个相应的XXCircle对象;Circle对象收到的做任何事的请求都将转发给这个XXCircle对象。通过这种被称为Adapter的模式,Circle对象就可以通过“让XXCircle做实际工作”来表现自己的行为了。图7 - 52显示了各个类间的关系。以下是Java语言实现,能够正确编译通过。

图7 - 52 各个类之间的关系


【Java程序】

//Shape.java文件   
public interface Shape {public (1) abstract void display();   
}//XXCircle.java文件   
public class XXCircle {public void displayIt() {//省略具体实现}   
}//Circle.java文件   
public class Circle (2) implements Shape {private XXCircle pcx = (3) new XXCircle();public void display() {pcx.displayIt();}   
}//Factory.java文件   
public class Factory {public (4) static Shape getShapeInstance(int type) {switch (type) {case 1: return new Line();//Line类未定义,假设存在case 2: return new Square();//Square类未定义,假设存在case 3: return new Circle();default: return null;}}   
}//Main.java文件   
public class Main {public static void main(String[] args) {int type = 1;Factory factory = new Factory();Shape s;s = factory.(5) getShapeInstance(type);if (s == null) {System.out.println("Error get the instance!");return;}s.display();return;}   
}
  • (1) abstract:表示接口Shapedisplay方法的抽象性质。在Java接口里,方法默认是publicabstract的,写abstract明确该方法需由实现类去具体实现。
  • (2) implements:用于Circle类声明实现Shape接口。在Java中,类通过implements关键字来表明遵循某个接口的契约,要实现接口里的抽象方法。
  • (3) new XXCircle():用于在Circle类中实例化XXCircle对象pcx,创建一个XXCircle类的实例供后续使用。
  • (4) Shape:这是Factory类中getShapeInstance方法的返回类型。因为该方法返回的可能是LineSquareCircle等不同形状类的实例,而这些类都实现了Shape接口,所以返回类型是Shape接口类型,以实现多态。
  • (5) getShapeInstance(type):在Main类中,通过Factory类的实例factory调用getShapeInstance方法,并传入参数type,以此获取对应的形状实例。
#include <iostream>   
using namespace std;class Shape {   
public:virtual void display() = 0;  // (1) 纯虚函数声明   
};class Line : public Shape {   
public:void display() override {cout << "Displaying Line" << endl;}   
};class Square : public Shape {   
public:void display() override {cout << "Displaying Square" << endl;}   
};class XXCircle {   
public:void displayIt() {cout << "Displaying XXCircle" << endl;}   
};class Circle : public Shape {   
private:XXCircle *pxc;   
public:Circle();void display() override;   
};Circle::Circle() {pxc = new XXCircle();  // (2) 创建XXCircle对象   
}void Circle::display() {pxc->displayIt();  // (3) 调用XXCircle的显示方法   
}class Factory {   
public:Shape* getShapeInstance(int type) {  // (4) 返回Shape指针类型switch(type) {case 1: return new Square();case 2: return new Line();case 3: return new Circle();default: return nullptr;}}   
};int main(int argc, char *argv[]) {if(argc != 2) {cout << "Usage: program <shape_type>" << endl;cout << "Shape types: 1=Square, 2=Line, 3=Circle" << endl;return 1;}int type = atoi(argv[1]);Factory factory;Shape *s = factory.getShapeInstance(type);  // (5) 获取形状实例if(s == nullptr) {cout << "Error: Invalid shape type!" << endl;return 1;}s->display();delete s;return 0;   
}
  1. virtual void display() = 0; - 声明纯虚函数,使Shape成为抽象类
  2. new XXCircle() - 创建XXCircle对象实例
  3. displayIt() - 调用XXCircle的显示方法
  4. Shape* - 工厂方法返回Shape基类指针
  5. getShapeInstance(type) - 调用工厂方法获取形状实例

阅读以下函数说明和Java代码,将应填入(n)处的子句写在答题纸的对应栏内。


【说明】 很多时候,希望某些类只有一个或有限的几个实例,典型解决方案是所谓单身(Singleton)模式。但在多线程情况下,Singleton模式有可能出现问题,需要进行同步检查。如果对“检查Singleton对象是否已经创建”进行同步,则存在严重的瓶颈,所有的线程都必须等待检查对象是否存在。解决方式是一种称为Double-Checked-Locking的模式,其意图是将非必需的锁定优化掉,同步检查最多只发生一次,因此不会成为瓶颈。以下是Java语言实现,能够正确编译通过。


【Java程序】

public class USTax {private static USTax instance = null;(1) USTax() {}private (2) static void doSync() {if(instance == null) {System.out.println("实例不存在,创建实例...");instance = (3);System.out.println("实例创建成功");}else{System.out.println("实例已被创建");}}public static USTax getInstance() {if(instance == null) {System.out.println("实例暂时不存在");(4); //同步控制}else{System.out.println("实例已经存在");}return (5);}   
}
  • (1):答案为private。因为希望USTax类只有一个实例,将构造函数设为private可防止外部直接实例化。
  • (2):答案是synchronizeddoSync方法用于同步控制,所以要声明为synchronized
  • (3):应填new USTax()。此处是创建USTax实例。
  • (4):答案是doSync()。进行同步控制需调用同步函数doSync
  • (5):应填instance。此位置是返回实例的引用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/80433.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/80433.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/80433.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

comfyu BiRefNet-General模型下载及存放地方

https://huggingface.co/ZhengPeng7/BiRefNet/tree/main

HunyuanCustom:文生视频框架论文速读

《HunyuanCustom: A Multimodal-Driven Architecture for Customized Video Generation》论文讲解 一、引言 本文提出了 HunyuanCustom&#xff0c;这是一个基于多模态驱动的定制化视频生成框架。该框架旨在解决现有视频生成模型在身份一致性&#xff08;identity consistenc…

tryhackme——Enumerating Active Directory

文章目录 一、凭据注入1.1 RUNAS1.2 SYSVOL1.3 IP和主机名 二、通过Microsoft Management Console枚举AD三、通过命令行net命令枚举四、通过powershell枚举 一、凭据注入 1.1 RUNAS 当获得AD凭证<用户名>:<密码>但无法登录域内机器时&#xff0c;runas.exe可帮助…

Web3 学习全流程攻略

目录 🧭 Web3 学习全流程攻略 🌱 第一阶段:打好基础(Web3 入门) 🧠 目标: 📚 学习内容: ✅ 推荐资源: 🧑‍💻 第二阶段:技术栈搭建(成为 Web3 开发者) 🧠 目标: 📚 学习内容: ✅ 推荐资源: 🌐 第三阶段:构建完整 DApp(去中心化应用)…

Python程序打包为EXE文件的全面指南

Python程序打包为EXE文件的全面指南 Python程序打包为EXE文件是解决程序分发和环境依赖问题的有效方法。通过将Python脚本及其所有依赖项整合为单一可执行文件&#xff0c;用户无需安装Python解释器即可直接运行程序&#xff0c;极大提升了应用的便携性和用户体验。本文将深入…

22、城堡防御工事——React 19 错误边界与监控

一、魔法护盾&#xff1a;错误边界机制 1. 城墙结界&#xff08;Error Boundary&#xff09; // 客户端错误边界use client function useErrorBoundary() {const [error, setError] useState(null);​const handleError useCallback((error, errorInfo) > {setError(erro…

深入理解 Istio 的工作原理 v1.26.0

解读最新版本的 Istio 源码确实是一项庞大的工程&#xff0c;但我可以为你梳理出一个清晰的脉络&#xff0c;并指出关键模块和代码路径&#xff0c;帮助你深入理解 Istio 的工作原理。 我们主要关注 Istio 的核心组件 Istiod 和数据平面的 Envoy Proxy。 前提&#xff1a; Go…

Flask 调试的时候进入main函数两次

在 Flask 开启 Debug 模式时&#xff0c;程序会因为自动重载&#xff08;reloader&#xff09;的机制而启动两个进程&#xff0c;导致if __name__ __main__底层的程序代码被执行两次。以下说明其原理与常见解法。 Flask Debug 模式下自动重载机制 Flask 使用的底层服务器 Wer…

CSS--图片链接垂直居中展示的方法

原文网址&#xff1a;CSS--图片链接垂直居中展示的方法-CSDN博客 简介 本文介绍CSS图片链接垂直居中展示的方法。 图片链接 问题复现 源码 <html xml:lang"cn" lang"cn"><head><meta http-equiv"Content-Type" content&quo…

雷赛伺服L7-EC

1电子齿轮比&#xff1a; 0x608F-01 只读&#xff0c;编码器圈脉冲【0x20000】【131072】 //Er1B1齿轮比错误 ----------------------------------- 0x6092-01 圈脉冲 //重新使能生效【pa008必须是0】值越小&#xff0c;转的越多 -----------------------…

在js中大量接口调用并发批量请求处理器

并发批量请求处理器 ✨ 设计目标 该类用于批量异步请求处理&#xff0c;支持&#xff1a; 自定义并发数请求节拍控制&#xff08;延时&#xff09;失败重试机制进度回调通知 &#x1f527; 构造函数参数 new BulkRequestHandler({dataList, // 要处理的数据列表r…

K8S扩缩容及滚动更新和回滚

目录&#xff1a; 1、滚动更新1、定义Deployment配置2、应用更新 2、版本回滚1. 使用kubectl rollout undo命令 3、更新暂停与恢复1、暂停更新2、更新镜像&#xff08;例如&#xff0c;使用kubectl set image命令&#xff09;3、恢复更新 4、弹性扩缩容1、扩容命令2、缩容命令3…

力扣-24.两两交换链表中的结点

题目描述 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09;。 class Solution { public:ListNode* swapPairs(ListNode* head) {i…

对遗传算法思想的理解与实例详解

目录 一、概述 二、实例详解 1&#xff09;问题描述与分析 2&#xff09;初始化种群 3&#xff09;计算种群适应度 4&#xff09;遗传操作 5&#xff09;基因交叉操作 6&#xff09;变异操作 三、计算结果 四、总结 一、概述 遗传算法在求解最优解的问题中最为常用&a…

计算机图形学编程(使用OpenGL和C++)(第2版) 学习笔记 07.光照

1. 光照 1.1. 光源 光源类型特点优点缺点环境光整个场景均匀受光&#xff0c;无方向和位置。模拟全局光照&#xff0c;避免完全黑暗的区域。缺乏方向性和真实感&#xff0c;无法产生阴影。平行光光线方向平行&#xff0c;无位置&#xff0c;仅有方向。计算简单&#xff0c;适…

Python在大数据机器学习模型的多模态融合:深入探索与实践指南

一、多模态融合的全面概述 1.1 多模态融合的核心概念 多模态融合(Multimodal Fusion)是指将来自不同传感器或数据源(如图像、文本、音频、视频、传感器数据等)的信息进行有效整合,以提升机器学习模型的性能和鲁棒性。在大数据环境下,多模态融合面临着独特的挑战和机遇: 数…

【PostgreSQL数据分析实战:从数据清洗到可视化全流程】6.4 时间序列分析(窗口函数处理时间数据)

&#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 文章大纲 PostgreSQL时间序列分析&#xff1a;窗口函数处理时间数据实战一、时间序列分析核心场景与窗口函数优势1.1 业务场景需求1.2 窗口函数核心优势 二、窗口函数基础&#xff1a…

window 显示驱动开发-配置内存段类型

视频内存管理器&#xff08;VidMm&#xff09;和显示硬件仅支持某些类型的内存段。 因此&#xff0c;内核模式显示微型端口驱动程序&#xff08;KMD&#xff09;只能配置这些类型的段。 KMD 可以配置内存空间段和光圈空间段&#xff0c;其中不同&#xff1a; 内存空间段由保存…

笔记,麦克风的灵敏度

麦克风的“灵敏度&#xff08;Sensitivity&#xff09;”决定了它捕捉声音细节的能力。想象麦克风是一只有耳朵的生物。高灵敏度麦克风像长着“超级顺风耳”的精灵&#xff0c;能听见花瓣飘落的声音、远处树叶的沙沙声&#xff0c;甚至你心跳的微弱震动。适合录音棚里捕捉歌手的…

lvm详细笔记

LVM简介 逻辑卷管理器&#xff0c;是Linux 系统中用于管理磁盘储存的关键技术。 LVM 则打破了磁盘分区一旦确定&#xff0c;其大小调整往往较为复杂&#xff0c;且难以灵活应对业务变化这种限制&#xff0c;它允许用户将多个物理分区组合卷组。例如&#xff0c;系统中的多个物…