《Java 100 天进阶之路》第20.4篇:Java面向对象代码示例集(2026版) 第20.4篇Java面向对象代码示例集2026版系列导航《Java 100 天进阶之路》完整目录 |⬅️ 上一篇第20.3篇Java面向对象生产环境避坑清单 |➡️ 下一篇第21篇Java Object类️ 本文阅读地图2 分钟速览面试不仅要“说得出”还要“写得对”。本文汇总 8 个可直接背诵的面向对象代码模板覆盖单例、工厂、建造者、自定义异常、模板方法等所有高频场景编号模板适用场景1标准 Java BeanPOJO日常开发必备2单例模式5 种实现全局唯一实例3工厂模式对象创建封装4建造者模式复杂对象构建5自定义异常业务异常封装6try-with-resources 标准模板资源自动关闭7模板方法模式骨架方法复用8策略模式算法替换文章目录第20.4篇Java面向对象代码示例集2026版️ 本文阅读地图2 分钟速览一、核心知识点概览二、逐模板详解模板1标准 Java BeanPOJO模板2单例模式5 种实现模板3工厂模式模板4建造者模式模板5自定义异常模板6try-with-resources 标准模板模板7模板方法模式模板8策略模式三、避坑要点四、练习题 你的学习进度 下一篇文章预告一、核心知识点概览本篇文章涵盖面向对象中 8 个最高频的面试手写代码模板篇号模板数量涉及主题第7篇2个标准 Java Bean、策略模式第12篇1个抽象类模板方法第14篇1个不可变对象第18篇1个接口默认方法行业补充3个单例、工厂、建造者二、逐模板详解模板1标准 Java BeanPOJOimportjava.io.Serializable;importjava.util.Objects;publicclassUserimplementsSerializable{privatestaticfinallongserialVersionUID1L;privateLongid;privateStringname;privateIntegerage;// 无参构造必须publicUser(){}// 有参构造publicUser(Longid,Stringname,Integerage){this.idid;this.namename;this.ageage;}// getter/setterpublicLonggetId(){returnid;}publicvoidsetId(Longid){this.idid;}publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.namename;}publicIntegergetAge(){returnage;}publicvoidsetAge(Integerage){this.ageage;}// 重写 equals 和 hashCodeOverridepublicbooleanequals(Objecto){if(thiso)returntrue;if(onull||getClass()!o.getClass())returnfalse;Useruser(User)o;returnObjects.equals(id,user.id)Objects.equals(name,user.name)Objects.equals(age,user.age);}OverridepublicinthashCode(){returnObjects.hash(id,name,age);}OverridepublicStringtoString(){returnUser{idid, namename, ageage};}}模板2单例模式5 种实现饿汉式最常用推荐publicclassSingleton{privatestaticfinalSingletonINSTANCEnewSingleton();privateSingleton(){}publicstaticSingletongetInstance(){returnINSTANCE;}}静态内部类懒加载推荐publicclassSingleton{privateSingleton(){}privatestaticclassHolder{privatestaticfinalSingletonINSTANCEnewSingleton();}publicstaticSingletongetInstance(){returnHolder.INSTANCE;}}枚举单例最安全防反射publicenumSingleton{INSTANCE;publicvoiddoSomething(){/* 业务逻辑 */}}模板3工厂模式// 产品接口publicinterfaceProduct{voiduse();}// 具体产品publicclassProductAimplementsProduct{Overridepublicvoiduse(){System.out.println(ProductA);}}publicclassProductBimplementsProduct{Overridepublicvoiduse(){System.out.println(ProductB);}}// 工厂类publicclassProductFactory{publicstaticProductcreate(Stringtype){switch(type){caseA:returnnewProductA();caseB:returnnewProductB();default:thrownewIllegalArgumentException(未知类型);}}}模板4建造者模式publicclassUser{privatefinalStringname;privatefinalintage;privatefinalStringemail;privatefinalStringphone;privateUser(Builderbuilder){this.namebuilder.name;this.agebuilder.age;this.emailbuilder.email;this.phonebuilder.phone;}publicstaticclassBuilder{privateStringname;privateintage;privateStringemail;privateStringphone;publicBuildername(Stringname){this.namename;returnthis;}publicBuilderage(intage){this.ageage;returnthis;}publicBuilderemail(Stringemail){this.emailemail;returnthis;}publicBuilderphone(Stringphone){this.phonephone;returnthis;}publicUserbuild(){returnnewUser(this);}}OverridepublicStringtoString(){returnUser{namename, ageage};}}// 使用UserusernewUser.Builder().name(张三).age(25).email(zhangsanexample.com).build();模板5自定义异常// 自定义运行时异常推荐publicclassBusinessExceptionextendsRuntimeException{privatefinalStringerrorCode;publicBusinessException(Stringmessage){super(message);this.errorCodenull;}publicBusinessException(Stringmessage,StringerrorCode){super(message);this.errorCodeerrorCode;}publicBusinessException(Stringmessage,Throwablecause){super(message,cause);this.errorCodenull;}publicStringgetErrorCode(){returnerrorCode;}}// 使用publicclassUserService{publicvoidfindById(Longid){if(idnull||id0){thrownewBusinessException(ID无效,USER_001);}}}模板6try-with-resources 标准模板importjava.io.*;publicclassResourceDemo{// 读文件publicStringreadFirstLine(Stringpath){try(BufferedReaderbrnewBufferedReader(newFileReader(path))){returnbr.readLine();}catch(IOExceptione){thrownewRuntimeException(读取文件失败,e);}}// 写文件publicvoidwriteFile(Stringpath,Stringcontent){try(BufferedWriterbwnewBufferedWriter(newFileWriter(path))){bw.write(content);}catch(IOExceptione){thrownewRuntimeException(写入文件失败,e);}}}模板7模板方法模式// 抽象类定义骨架publicabstractclassDataProcessor{// 模板方法final 防止被重写publicfinalvoidprocess(){loadData();processData();saveData();if(needNotify()){sendNotification();}}protectedabstractvoidloadData();protectedabstractvoidprocessData();protectedabstractvoidsaveData();// 钩子方法子类可选重写protectedbooleanneedNotify(){returnfalse;}protectedvoidsendNotification(){/* 默认空实现 */}}// 具体子类publicclassOrderProcessorextendsDataProcessor{OverrideprotectedvoidloadData(){System.out.println(加载订单);}OverrideprotectedvoidprocessData(){System.out.println(处理订单);}OverrideprotectedvoidsaveData(){System.out.println(保存订单);}OverrideprotectedbooleanneedNotify(){returntrue;}OverrideprotectedvoidsendNotification(){System.out.println(发送通知);}}模板8策略模式// 策略接口publicinterfacePaymentStrategy{voidpay(intamount);}// 具体策略publicclassAlipayStrategyimplementsPaymentStrategy{Overridepublicvoidpay(intamount){System.out.println(支付宝支付 amount);}}publicclassWechatStrategyimplementsPaymentStrategy{Overridepublicvoidpay(intamount){System.out.println(微信支付 amount);}}// 上下文publicclassPaymentContext{privatePaymentStrategystrategy;publicvoidsetStrategy(PaymentStrategystrategy){this.strategystrategy;}publicvoidexecutePay(intamount){strategy.pay(amount);}}// 使用PaymentContextcontextnewPaymentContext();context.setStrategy(newAlipayStrategy());context.executePay(100);三、避坑要点错误/误区后果正确做法POJO 没有无参构造框架反射创建失败必须有 public 无参构造单例用 double-check 不加 volatile半初始化对象暴露用静态内部类或枚举自定义异常不继承 RuntimeException调用者必须 try-catch继承 RuntimeException策略模式过度设计代码复杂简单场景用 if-else 或 Lambda四、练习题手写题用静态内部类实现单例模式。手写题用建造者模式实现一个Order类包含 orderId、userId、amount、status。场景题一个支付系统需要支持支付宝、微信、银行卡三种支付方式。用策略模式实现。 你的学习进度当前第20.4篇 ·基础篇外挂面向对象代码示例集✅ 已完成基础篇第1~20篇 第4.1篇 第20.1~20.4篇 正在学第20.4篇⏳ 待学习第21~44篇主体 更多外挂篇 完整目录 学习指南 | 订阅本专栏不错过每一篇 下一篇文章预告下一篇《第21篇Java Object类》内容简介toString、equals、hashCode的正确重写规范equals与hashCode的契约。《Java 100 天进阶之路 | 从入门到上岗就业》每天一篇建议收藏 关注一起100天拿offer 点击关注我更新后第一时间收到推送