一种调试方法: 利用Log.v和toString()调试

本文介绍了如何通过重写Java对象的toString()方法,并结合Log.v进行调试。通过示例展示了在Android Studio中自动生成toString()方法的过程,以及在日志中输出对象状态的方法,强调了这种方法在不使用调试器时检查对象状态的实用性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

调试提示

在继续创建应用的其他功能之前,我想介绍一条快速调试提示(如果你尚未 听说过的话)

你可以使用日志语句来了解任何 Java 对象的状态。最简单的方式是实现 toString() 方法, 并输出 Java 对象的内容。该方法旨在将整个对象当做字符串,通常用于调试目的。

Word 类示例
我来演示下 Word 对象示例。在 Word 类中,重写 toString 方法。

  1. 将光标放在文件的空白处(即在现有方法之外,但依然位于该类中)。

查看示例:
在这里插入图片描述
2) 然后使用键盘快捷键自动“生成一个方法”(Getter、Setter、 构造函数、toString 等等)”。在 Windows 上,键盘快捷键是 ALT + Insert。在 Mac 上,键盘快捷键是 CMD + N。

  1. 你应该会看到下面这个弹出对话框。选择 toString()。
    在这里插入图片描述

  2. 点击“确定”接受默认的选项。

  3. Android Studio 将自动生成这个 toString() 方法并将其添加到你的 Word 类中。 此方法连结了各种变量和文本,以便将 Word 类中的所有变量都输出为字符串。你可以看到, 该方法的返回值是一个字符串。

     /**
     * Returns the string representation of the {@link Word} object.
     */
     @Override
      public String toString() {
       return "Word{" +
            "mDefaultTranslation='" + mDefaultTranslation + '\'' +
            ", mMiwokTranslation='" + mMiwokTranslation + '\'' +
            ", mAudioResourceId=" + mAudioResourceId +
            ", mImageResourceId=" + mImageResourceId +
            '}';
     }
  1. 一旦你具有了 Word 对象,例如位于 OnItemClickListener 的 onItemClick() 方法中,就可以向日志中输出 Word 对象了。
// Set a click listener to play the audio when the list item is clicked on
listView.setOnItemClickListener(
    new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
            // Get the {@link Word} object at the given position the user clicked on
            Word word = words.get(position);
            Log.v("NumbersActivity", "Current word: " + word);
            // Create and setup the {@link MediaPlayer} for the audio resource associated with the current word
            mMediaPlayer = MediaPlayer.create(PhrasesActivity.this, word.getAudioResourceId());
            // Start the audio file
            mMediaPlayer.start();
        }
    }
);

注意: 如果你(使用“+”运算符)将字符串与 Word 对象相连结,那么 Java 将 在后台对该对象调用 toString() 方法。意味着,下面这两个语句是相同的:

Log.v("NumbersActivity", "Current word: " + word);

Log.v("NumbersActivity", "Current word: " + word.toString());
  1. 接着,在 Android logcat 中,你将看到类似于下面的输出内容。 我用绿色字体颜色标出了日志标记 (NumbersActivity),并用紫色字体颜色 标出了 toString() 的返回值。

在这里插入图片描述
总结下,我们刚刚介绍了如何重写任何类中的 toString() 方法,这是可选内容。 但是,却是很有用的练习过程。因为在未来,你可能想要在日志中输出某个对象的当前状态(而不是在 Android Studio 中使用逐步调试器)。

### JSON.stringify toString 的区别 #### 定义与基本功能 `JSON.stringify()` 是用于将 JavaScript 对象或数组转换成 JSON 字符串的方法。此方法可以接受三个参数:要序列化的对象、replacer 函数或数组以及 space 缩进字符数量,从而实现更复杂的序列化需求[^2]。 而 `toString()` 则是所有 JavaScript 对象默认继承自 `Object.prototype` 的一个方法。对于不同类型的对象,默认行为会有所不同;例如,在数值型对象上调用它可以根据指定的基数(radix)来改变数字的表现形式[^3]。 #### 返回值差异 - **JSON.stringify**: 将整个对象结构按照 JSON 格式转化为字符串表示。 ```javascript const obj = { name: "Alice", age: 25 }; console.log(JSON.stringify(obj)); // 输出 '{"name":"Alice","age":25}' ``` - **toString**: 不同于 `JSON.stringify` 转换的是完整的数据结构,`toString` 主要是用来获取简单类型的字符串描述或者是特定上下文中对象的一种简易表达方式。对于普通对象而言,默认情况下只会给出 `[object Object]` 这样的信息量较少的结果。 ```javascript const numObj = new Number(10); console.log(numObj.toString()); // 输出 '10' console.log(({}).toString()); // 输出 '[object Object]' ``` #### 应用场景对比 ##### 使用 JSON.stringify 场景 当需要保存复杂的数据结构至文件系统、发送给服务器端API接口或是跨域通信时,通常会选择使用 `JSON.stringify` 来确保数据能够被正确无误地传输并解析回原始状态。此外,通过设置第二个参数还可以控制哪些属性应该参与序列化过程,甚至可以通过第三个参数使得生成的 JSON 更加易读[^1]。 ##### 使用 toString 场景 相比之下,`toString` 更适合那些只需要快速获得某个变量或对象基本信息的情况。比如调试过程中查看某些内置类型的具体内容,或者是在模板渲染引擎里作为占位符填充少量动态文本等场合下非常有用。特别是针对数值类型来说,利用其可选的 radix 参数还能方便地完成进制间的相互转化操作。 ```python print("注意以上代码为JavaScript语法") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值