轻松上手:<Android Studio笔记应用开发>(二)笔记可显示Part2:定义笔记的数据结构类型

定义笔记的数据结构类型?先想明白下面这些问题!

  1. 定义数据结构类型的目的是什么?
  2. 它的意义何在?
  3. 是否有其他替代方案?
  4. 创建数据结构类型的步骤是什么?
  5. 选择哪些属性来表示笔记?
  6. 还有其他可能的属性吗?
  7. 如何表示这些属性?
  8. 内容通常是纯文本,但创建时间应使用何种数据类型?
  9. 如何在创建数据结构类型的实例时初始化属性?是在构造方法中接受参数还是使用默认值?
  10. 如何保护数据结构类型的属性,以确保只有授权的部分可以访问和修改?是否应该使用私有属性并提供公共的getter和setter方法?
  11. getter和setter方法是什么?是否有替代方案?
  12. 除了基本属性之外,是否需要其他方法来执行与数据结构类型相关的操作?

我如何回答前12个问题?

为何定义数据结构类型?

  1. 定义数据结构类型的目的是什么?

    • 数据结构类型的创建旨在将相关属性和方法封装到一个独立的对象中,以提高代码的可读性和可维护性。
  2. 它的意义何在?

    • 创建数据结构类型有助于清晰地定义数据对象的结构和行为,使应用可以轻松地处理数据的创建、修改、删除和显示。
  3. 是否有其他替代方案?

    • 虽然可以使用原始数据结构(如ArrayListHashMap)来管理数据,但这种做法通常会导致代码混乱,不易维护。因此,创建数据结构类型更符合面向对象编程原则。

如何创建数据结构类型?

  1. 创建数据结构类型的步骤是什么?

    • 创建数据结构类型需要在项目中编写一个Java类文件,其中包括属性和方法的定义。可使用Android Studio或其他Java开发工具来完成。
  2. 选择哪些属性来表示笔记?

    • 基本属性通常包括内容、创建时间和标签。但根据应用需求,可以添加其他属性。
  3. 还有其他可能的属性吗?

    • 其他可能的属性包括作者、修改时间、优先级、颜色等,具体取决于应用的需求。

属性的表示方式

  1. 如何表示这些属性?

    • 内容可以表示为字符串,而创建时间可以用日期对象或时间戳表示,标签可以是字符串或枚举类型,具体取决于数据的性质。
  2. 内容通常是纯文本,但创建时间应使用何种数据类型?

    • 通常情况下,创建时间应使用日期对象表示,以便于日期操作。这可以更容易地格式化日期和计算时间间隔。

初始化属性

  1. 如何在创建数据结构类型的实例时初始化属性?是在构造方法中接受参数还是使用默认值?
    • 属性的初始化可以通过构造方法接受参数或使用默认值进行。具体取决于应用需求,某些属性可能需要强制初始化,而其他属性可以使用默认值。

保护属性

  1. 如何保护数据结构类型的属性,以确保只有授权的部分可以访问和修改?是否应该使用私有属性并提供公共的getter和setter方法?

    • 为了保护属性,通常将其声明为私有(private),并提供公共的getter和setter方法以控制属性的访问权限。这种封装机制提供了数据的封装性和安全性。
  2. getter和setter方法是什么?是否有替代方案?

    • Getter方法用于获取属性的值,Setter方法用于设置属性的值,它们是标准的属性访问方式。虽然有替代方案,如直接访问属性,但使用getter和setter方法更好地封装和控制属性访问。

更多操作

  1. 除了基本属性之外,是否需要其他方法来执行与数据结构类型相关的操作?
    • 可根据需求在数据结构类型中定义其他方法,如格式化内容、计算字符数、生成摘要、检查数据是否包含特定关键词等。

本文将如何定义笔记的数据结构类型?

  1. 新建Java文件并命名为NoteDataStructure
  2. 仅包含三个属性:序号(id)、内容(content)、时间(time)
  3. 使用setter和getter方法

实现步骤

第一步,新建java文件

  1. 打开Android Studio

  2. java class 右键下图红色区域 鼠标左键点击下图红色区域

  3. 随便起个名字

    这边起名为NoteDataStructure

  4. 建好了

第二步,定义属性

如前文所言,我这里定义3个属性:

java 复制代码
private long id;
private String content;
private String time;

当然,你也可以自行定义更多属性 比如标签、颜色、优先级、位置、作者等

java 复制代码
private String tag;
private String color;
private String priority;
private String location;
private String author;

以上只是举例,实际上用什么数据类型表示这些属性完全取决于你的应用需求和设计。 比如使用枚举类型或整数类型来表示颜色,枚举类型或整数类型表示优先级等等,都可以。

第三步,创造构造函数

java 复制代码
    public Note(){
    }
    public Note(String content,String time,int tag){
        this.content=content;
        this.time=time;
        this.tag=tag;
    }

为何有两个Note函数?

  1. Java中常见的重载函数
  2. 无参数构造函数 public Note() {}:这个构造函数用于创建一个空的笔记对象,它没有任何参数。
  3. 有参数构造函数 public Note(String content, String time):这个构造函数接受两个参数,分别是笔记的内容、时间。创建笔记对象时,可以通过调用这个构造函数来为笔记对象设置这些属性的初始值。

为何有参数构造函数不接受id参数? 我们希望·id是自增1的,而非设置初始值。

第四步,setter与getter方法

关于setter与getter方法,前文已阐述(详见本文第10、11个问题),这里就不多说了。

至于创建setter与getter方法很简单,在Android Studio中你只需在定义的属性后面打上几个字母,比如psetpget,Android Studio就会弹出智能提示,这时候管它是啥东西,点就完了。

第五步,更多操作

  1. 格式化内容 如下所示,简单地将笔记内容包装在 HTML<strong>标签中,以加粗显示。
java 复制代码
public String formatContent() {
        return "<strong>" + content + "</strong>";
    }
  1. 计算字符数
java 复制代码
public int countCharacters() {
        return content.length();
    }
  1. 生成摘要 生成笔记内容的摘要,截取前50个字符并添加省略号。
java 复制代码
public String generateSummary() {
        int maxLength = 50; // 最大摘要长度
        if (content.length() <= maxLength) {
            return content;
        } else {
            return content.substring(0, maxLength) + "...";
        }
    }
  1. 检查数据是否包含特定关键词

检查笔记内容是否包含指定的关键词,并返回布尔值。

java 复制代码
public boolean containsKeyword(String keyword) {
        return content.contains(keyword);
    }

如果你对代码的实现有疑问,请继续阅读本文

  1. private是什么?
    • private 是一个访问修饰符。在代码中,private 使 idcontenttime 这些属性只能在 NoteDataStructure 类内部被访问和修改。
  2. 为什么用long表示id?而不是String?
    • String表示也许,都可以。只要确保id可以是唯一标识符,方便以后数据库操作就可以。
  3. setIdgetId这些这是啥?
    • 这是函数
  4. 我知道void表示函数返回值为空,但public是什么?和private有关联吗?
    • publicprivate一样,也是一个访问修饰符,它表示这个方法或属性是公开的,谁都能看。
  5. 我在整个代码中没有见到this的声明,为啥函数里用this
    • setId 方法内部的 this 就表示这个 NoteDataStructure 对象。所以,this.id 表示的是这个对象的属性 id,而 id(不带 this)表示方法接收到的参数。
  6. 生成摘要方法中`substring是啥?
    • substring 是个方法,能从字符串中提取子串。在 generateSummary 方法中,可以截取前 50 个字符。如果内容长度超过 50 个字符,就在末尾添加省略号。

求点赞、收藏、评论和关注。

更多内容,敬请期待,爆肝更新中....

相关推荐
扎克begod3 分钟前
JAVA并发编程系列(9)CyclicBarrier循环屏障原理分析
java·开发语言·python
青灯文案15 分钟前
SpringBoot 项目统一 API 响应结果封装示例
java·spring boot·后端
我就是程序猿15 分钟前
tomcat的配置
java·tomcat
阳光阿盖尔21 分钟前
EasyExcel的基本使用——Java导入Excel数据
java·开发语言·excel
二十雨辰22 分钟前
[苍穹外卖]-12Apache POI入门与实战
java·spring boot·mybatis
程序员皮皮林22 分钟前
开源PDF工具 Apache PDFBox 认识及使用(知识点+案例)
java·pdf·开源·apache
蔚一23 分钟前
Java设计模式—面向对象设计原则(三) -----> 依赖倒转原则DIP(完整详解,附有代码+案例)
java·开发语言·设计模式·intellij-idea·依赖倒置原则
liang899928 分钟前
SpringSecurity原理解析(七):权限校验流程
java·开发语言
搁浅°87937 分钟前
IO文件拷贝
java·开发语言
Python私教41 分钟前
Python国产新 ORM 框架 fastzdp_sqlmodel 快速入门教程
java·数据库·python