方法入参

    方法从创建之初就定义了它本身所代表的含义,它代表的是一个或一类行为,所以方法的设计和程序的稳健性是紧密相关的。这本身也对方法的定义有更高的要求,这里我们只讲方法入参的一些规范技巧。

    入参分两种类型:必需和非必需。必需比较好理解,方法执行必需这个入参,像常见的 String.valueOf(Object),这种情况就比较好判断;非必需指这个入参可有可无,即方法需要的对象可以通过入参的形式获取,也可以在方法中定义,对于这种情况需要仔细斟酌。

    一些总结可供参考:常量可直接在方法中使用,变量通过入参获取。这里的常量和变量都是是相对于方法而言。

   举一个例子供大家理解:

AbstractApplicationContext 里面的 getBean 方法
@Override
public <T> T getBean(Class<T> requiredType) throws BeansException {
   assertBeanFactoryActive();
   return getBeanFactory().getBean(requiredType);
}

getBean 方法其定义是从 beanFactory 中通过 classType 获取bean实例。classType  相对于方法而言可变的, beanFactory 自始至终只有一个。所以这里 getBean 方法对 量 的管理便是:定义一个  requiredType 的入参,和方法内 getBeanFactory() 获取 beanFactory 对象。

### 使用 Arthas 工具查看 Java 方法 Arthas 是一款强大的 Java 诊断工具,能够帮助开发者实时监控和排查 JVM 中运行的应用程序。通过 `watch` 命令可以方便地查看目标方法与返回值。 以下是具体的操作方式: #### 1. 启动 Arthas 并连接到目标进程 首先需要启动 Arthas,并选择对应的 Java 进程 ID 来建立连接。假设已经成功进 Arthas 控制台,则可以直接输命令操作。 #### 2. 使用 watch 命令查看方法 `watch` 命令用于观察指定方法的行为,包括其数、返回值以及异常信息。基本语法如下: ```bash watch [类全名] [方法名] '{params, returnObj}' '-x [展开层数]' ``` - `[类全名]`: 要观测的目标类的完整名称(含包路径)。 - `[方法名]`: 需要监测的具体方法名称。 - `{params, returnObj}`: 表示希望获取该方法的所有数 (`params`) 和返回值对象 (`returnObj`) 的信息。 - `-x [展开层数]`: 可选数,定义调用栈信息展示的深度层次,默认只显示最顶层的一级数据结构。 例如,对于某个名为 `com.example.MyService.processRequest(String input)` 的方法,可以通过下面这条指令来追踪它的实际传数情况: ```bash watch com.example.MyService processRequest '{params, returnObj}' -x 2 ``` 此条语句的作用在于当每次触发 `processRequest` 执行时都会自动捕获并打印出当前传递给它的字符串型变量 `input` 的具体内容及其最终运算得出的结果[^2]。 需要注意的是,虽然利用 `watch` 功能我们可以轻易读取函数外部可见范围内的各种属性值或者全局状态变化趋势图谱等等有用的数据资料,但对于那些仅仅局限于内部作用域下的临时局部量而言却无能为力——也就是说无法直接输出像例子代码片段里那样声明于特定流程块中的中间计算产物比如 `index`, 或者由其他子过程间接产生的衍生数值如 `b` 等等[^3]。 因此,在设计调试方案的时候应该充分考虑到这一点局限性,并合理规划好待检测环节的位置选取策略以便获得更加全面详尽的第一手原始素材供后续分析处理之需。 ```python # 示例 Python 版本模拟逻辑 (仅作理解辅助用途) def arthas_watch(class_name, method_name, expression="{params}", expand_level=1): command = f"watch {class_name} {method_name} '{expression}'" if expand_level > 0: command += f" -x {expand_level}" print(f"Executing Arthas Command: {command}") # 测试调用 arthas_watch("com.example.MyService", "processRequest", "{params, returnObj}", 2) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值