IDEA的这个功能太赞了!

本文分享了如何利用IntelliJ IDEA的diagram功能清晰呈现Servlet的继承链和接口实现,包括查看、定制、扩展关系图,以及优化显示细节。适合学习者理解和分析框架源码。

0d776a835777964b6272d232c83d1255.png

最近正好也没什么可忙的,就回过头来鼓捣过去的知识点,到Servlet部分时,以前学习的时候硬是把从上到下的继承关系和接口实现记得乱七八糟。这次利用了 IDEA 的 diagram,结果一目了然,也是好用到炸裂,就此分享。

1、查看图形形式的继承链

在你想查看的类的标签页内,点击右键,选择 Diagrams,其中有 show 和 show ... Popup,只是前者新建在标签页内,后者以浮窗的形式展示:

bab7ba2d3cc0d1251541697513ce00cd.png

实际上,你也可以从左边的项目目录树中,对你想查看的类点击右键,同样选择Diagrams,效果是一样的:

bf8cd22b9fadbd90ae0e27876c631a48.png

然后你就会得到如下图所示的继承关系图形,以自定义的Servlet为例:

b873b38f08096a78f5d030a44de887d7.png

显而易见的是:蓝色实线箭头是指继承关系;绿色虚线箭头是指接口实现关系

2、优化继承链图形,想我所想

2.1 去掉不关心的类

得到的继承关系图形,有些并不是我们想去了解的,比如上图的Object和Serializable,我们只想关心Servlet重要的那几个继承关系,怎么办?简单,删掉。点击选择你想要删除的类,然后直接使用键盘上的delete键就行了。清理其他类的关系后图形如下:

a8d42cebdeccaab29342ef378932ba24.png

2.2 展示类的详细信息

有人说,诶,这怎么够呢,那继承下来的那些方法我也想看啊?简单,IDEA通通满足你。

在页面点击右键,选择 show categories,根据需要可以展开类中的属性、方法、构造方法等等。当然,第二种方法也可以直接使用上面的工具栏:

c904cbbe75a957cb7648e95a6c6967c8.png

然后你就会得到:

afe871e996d91e82ec259356a4207423.png

什么,方法里你还想筛选,比如说想看protected权限及以上范围的?简单,右键选择 Change Visibility Level,根据需要调整即可。

f7527907e91eb8ab13698123bc353d50.png

什么,你嫌图形太小你看不清楚?IDEA也可以满足你,按住键盘的Alt,竟然出现了放大镜,惊不惊喜,意不意外?

e29aab7064a3e26e7c773fa2d3d494ce.png

2.3 加入其他类到关系中来

当我们还需要查看其他类和当前类是否有继承上的关系的时候,我们可以选择加其加入到当前的继承关系图形中来。在页面点击右键,选择 Add Class to Diagram,然后输入你想加入的类就可以了:

b3926b0823ab6b24df3d5503b1b9b547.png

例如我们添加了一个Student类,如下图所示。好吧,并没有任何箭头,看来它和当前这几个类以及接口并没有发生什么不可描述的关系:

cf551476a7f1b9861bf67f8fdcd7bd60.png

2.4 查看具体代码

如果你想查看某个类中,比如某个方法的具体源码,当然,不可能给你展现在图形上了,不然屏幕还不得撑炸?关注 我是程序汪

但是可以利用图形,或者配合IDEA的structure方便快捷地进入某个类的源码进行查看。

双击某个类后,你就可以在其下的方法列表中游走,对于你想查看的方法,选中后点击右键,选择 Jump to Source:

a700e1ed65943ea2a1e3c75e7fda5bb0.png7e348c85d8d80754e57673e737177852.png

在进入某个类后,如果还想快速地查看该类的其他方法,还可以利用IDEA提供的structure功能:

b4960e84b339b3cb0caec031b9da114d.png

选择左侧栏的structure之后,如上图左侧会展示该类中的所有方法,点击哪个方法,页面内容就会跳转到该方法部分去。

3、最后

用上面提到的的IDEA这些功能,学习和查看类关系,了解诸如主流框架源码之类的东西,可以说是非常舒服了。

--完--

刚刚整理好了的第五版《Java大厂面试题》,而且已经分类 25份 PDF,累计 2098页!


整理的面试题,内容列表



互联网大厂面试题,怎么领取?


 注意,不要乱回复 (一定要回复 面试题 )否则获取不了
点分享
点收藏
点点赞
点在看
<think>好的,我需要帮助用户找到基于Java和IntelliJ IDEA开发订餐系统的教程或示例代码。首先,用户提到了三个引用,但看起来这些引用内容可能不相关,或者用户可能混淆了引用来源。我需要仔细检查这些引用内容,看看是否有关于订餐系统的具体实现细节。 引用1提到了使用数组和对象保存订单信息,包括访问、删除订单,计算总金额等。引用2详细描述了订单系统的各个功能,如点餐、查看订单、签收、删除、点和退出。引用3补充了订单的具体字段,如订餐人姓名、菜品选择、送餐时间、地址、状态和总金额。这些引用提供了系统的基本需求,但用户需要的是具体的开发教程或示例代码。 接下来,我需要考虑如何构建一个Java项目,使用IntelliJ IDEA作为开发工具。首先,项目结构应该包括主类、订单类、菜品类等。然后,根据引用中的功能点,逐步实现各个模块。 用户可能需要指导如何初始化数据,比如使用数组或集合来存储菜品和订单。例如,引用2提到使用ArrayList来存储订单,这可以作为参考。另外,处理用户输入和菜单切换是关键部分,可能需要使用Scanner类来获取用户输入,并通过循环显示菜单选项。 关于示例代码,我需要提供一个简单的框架,包括类的定义、主菜单循环、订单管理的功能实现。例如,订单类应包含姓名、菜品列表、时间、地址、状态和总金额。菜品类则包含名称、价格和点数。 还需要考虑如何计算总金额,根据引用3,总金额需要根据所选菜品及份数计算。这涉及到遍历订单中的菜品,累加单价乘以份数。 此外,用户提到的点功能(引用2和3)需要能够为菜品增加点数,这可以通过在菜品类中添加点数属性,并在用户选择点时更新该属性。 最后,测试和调试也是重要的步骤,确保各个功能按预期工作,例如订单状态的转换(已预定到已完成)和输入验证(如送餐时间必须在10到20之间)。 总结来说,我需要提供一个结构清晰的步骤指南,涵盖项目设置、类设计、功能实现和示例代码,同时参考用户提供的引用内容,确保覆盖所有提到的需求点。</think>以下是为您整理的Java订餐系统开发指南,包含核心代码示例和实现思路: ### 一、项目环境搭建 1. 在IntelliJ IDEA中新建Java项目 2. 创建包结构:`com.chihuo.system` 3. 创建核心类: - `MainApp`(主程序) - `Food`(菜品类) - `Order`(订单类) - `DataCenter`(数据存储类) ### 二、核心数据结构设计 ```java // 菜品类 public class Food { int id; String name; double price; int likes; } // 订单类 public class Order { String customerName; List<Food> foods; int deliveryTime; String address; int status; // 0-已预定 1-已完成 double totalAmount; } ``` ### 三、核心功能实现 #### 1. 数据初始化(引用[3]) ```java public class DataCenter { public static List<Food> foods = new ArrayList<>(); public static List<Order> orders = new ArrayList<>(); static { foods.add(new Food(1, "红烧肉", 38.0, 0)); foods.add(new Food(2, "宫保鸡丁", 28.0, 0)); } } ``` #### 2. 主菜单逻辑(引用[2]) ```java public class MainApp { public static void main(String[] args) { while(true) { System.out.println("1.我要订餐 2.查看订单 3.签收订单 4.删除订单 5.我要点 6.退出"); Scanner sc = new Scanner(System.in); int choice = sc.nextInt(); switch(choice) { case 1: createOrder(); break; case 2: showOrders(); break; // ...其他功能实现 } } } } ``` #### 3. 创建订单功能(引用[3]) ```java private static void createOrder() { Order order = new Order(); Scanner sc = new Scanner(System.in); // 输入订餐人姓名 System.out.print("请输入姓名:"); order.customerName = sc.next(); // 选择菜品 System.out.println("可选菜品:"); for(Food f : DataCenter.foods) { System.out.println(f.id + "." + f.name + " " + f.price + "元"); } System.out.print("请输入菜品序号:"); int foodId = sc.nextInt(); // 验证送餐时间(引用[3]) do { System.out.print("请输入送餐时间(10-20点):"); order.deliveryTime = sc.nextInt(); } while(order.deliveryTime <10 || order.deliveryTime>20); // 计算金额 order.totalAmount = calculateAmount(foodId, quantity); DataCenter.orders.add(order); } ``` ### 四、关键功能实现要点 1. **订单状态管理**(引用[2]) ```java // 签收订单时验证状态 if(order.status == 0) { order.status = 1; } else { System.out.println("订单已完成,不可重复签收"); } ``` 2. **输入验证逻辑** ```java // 送餐时间验证(引用[3]) while(true) { System.out.print("请输入送餐时间:"); int time = sc.nextInt(); if(time >=10 && time <=20) break; System.out.println("输入错误!"); } ``` 3. **点功能实现**(引用[2]) ```java public static void addLike() { System.out.println("请选择要点的菜品:"); for(Food f : DataCenter.foods) { System.out.println(f.id + "." + f.name + " 当前点数:" + f.likes); } int choice = sc.nextInt(); DataCenter.foods.get(choice-1).likes++; } ``` ### 五、项目优化建议 1. 使用文件存储代替内存存储 2. 增加异常处理机制 3. 实现GUI界面(可参考JavaFX或Swing) 4. 添加数据库支持(推荐MySQL)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值