[Java][常用API]Object,Objects,StringBuilder

本文探讨了Java中的Object类基础知识,重点讲解了toString方法的作用和重写,以及equals方法的默认行为和如何自定义比较规则。通过Student类实例,展示了如何覆盖equals方法并确保内容比较而非地址。还提到了Objects类的使用,以增强安全性。

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

Object类:

Object类要么默认继承Object类,要么简接继承Object类,Object类是祖宗类;

Object类的方法一切子类都可使用;

Object类常用方法:

toString:

父类toString方法存在的意义是为了被子类重写,以便返回对象内容信息

package wryyyyy;

public class Student
{
    private String name;
    private char sex;
    private int age;

    public Student(String name, char sex, int age) {
        this.name = name;
        this.sex = sex;
        this.age = age;
    }

    public Student() {
    }

    @Override
    public String toString()
    {
        return "Student {name=" + name + ",sex" + sex + ",age=" + age +"}";
    }
}
package wryyyyy;

public class Test
{
    public static void main(String[] args)
    {
        Student s = new Student("小王",'男',19);
        String rs = s.toString();
        System.out.println(rs);//wryyyyy.Student@776ec8df 默认打出当前对象在堆内存中的地址
        System.out.println(s.toString());//toString可以不写


    }
}

equals:

父类equals方法存在的意义是为了被子类重写,以便返回子类自己制定比较规则

package wryyyyy;

public class Test
{
    public static void main(String[] args)
    {
        Student s1 = new Student("小王",'男',19);
        Student s2 = new Student("小王",'男',19);
        System.out.println(s1.equals(s2));//equals默认比较两个对象地址是否相同
    }
}

重写后equals比较内容,==比较地址: 

@Override
    public boolean equals(Object o)//用Object可以兼容与所有对象进行比较,不仅仅是学生对象
    {
        //先判断o是不是学生类型
        if(o instanceof Student)//判断o的真实类型
        {
            //判断两个对象内容是否一样
            if(this.name.equals(((Student) o).name) && this.sex==((Student) o).sex && this.age==((Student) o).age)
            /*
            * 字符串用equals 不用==
            * o要进行类型转换,否则o作为父类无法访问
            * */
            {
                return true;
            }
            //或者直接写成:
            //return this.name.equals(((Student) o).name) && this.sex==((Student) o).sex && this.age==((Student) o).age;
        }
        else//如果o不是学生类型(包括o是空类型)
        {
            return false;
        }
    }

Objects:

更安全

package wryyyyy;

import java.util.Objects;

public class Test
{
    public static void main(String[] args)
    {
        String s1 = null;
        String s2 = "teacher";
        //System.out.println(s1.equals(s2));//比较内容,返回true
        //可能出现空值异常
        System.out.println(Objects.equals(s1, s2));
        //这个更安全
    }
}

System.out.println(Objects.isNull(s1));//true

StringBuilder:

构造器:

常用方法:

StringBuilder sb = new StringBuilder();
        sb.append("a");
        sb.append("b");
        sb.append("c");
        sb.append(1);
        sb.append(false);
        sb.append(3.3);
        sb.append("qwer");
        System.out.println(sb);//输出的不是地址,说明已经进行了重写

StringBuilder链式编程

 StringBuilder sb1 = new StringBuilder();
        sb1.append("a").append("b").append("c");//拼完之后又返回原对象,所以继续拼
        System.out.println(sb1);

反转内容 

        sb1.reverse().append("d");//反转之后还会返回这个对象
        System.out.println(sb1);

取长度: 

System.out.println(sb1.length());

StringBuilder只是手段,最终的目的还是要恢复成String 

        String rs = sb1.toString();

String效率低的原因:
每次拼接都会产生新对象,不断占新对象的空间
每写一个+,都new一个StringBuilder,拼完后打出String对象

StringBuilder只在堆内存中产生一个对象

### 使用Java和Shopify API实现分页获取订单 为了高效地使用Java与Shopify API交互并实现分页获取订单,可以采用基于游标的分页方法而非传统的`OFFSET/LIMIT`方式[^5]。这种方式能够显著提高性能,并减少随着页面深入而增加的时间延迟。 #### 构建请求URL 当调用Shopify Admin API来检索资源列表时,可以通过指定参数控制返回的数据量以及如何遍历这些记录。对于订单查询而言,重要的是设置好`limit`(每页显示的最大项数)和`since_id`或`page_info`用于导航不同页面之间的链接[^1]。 ```java import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; public class ShopifyOrderFetcher { private static final String BASE_URL = "https://your-shop-name.myshopify.com/admin/api/2023-07/orders.json"; public List<Order> fetchOrders(String nextPageToken) throws Exception { OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url(buildUrl(nextPageToken)) .addHeader("X-Shopify-Access-Token", "YOUR_ACCESS_TOKEN") .build(); try (Response response = client.newCall(request).execute()) { if (!response.isSuccessful()) throw new RuntimeException("Unexpected code " + response); // Parse JSON and convert to Order objects... return parseJson(response.body().string()); } } private String buildUrl(String pageToken){ StringBuilder urlBuilder = new StringBuilder(BASE_URL); urlBuilder.append("?limit=250"); // Adjust limit as needed if(pageToken != null && !pageToken.isEmpty()){ urlBuilder.append("&page_info=").append(pageToken); }else{ urlBuilder.append("&order=id%20ASC"); } return urlBuilder.toString(); } } ``` 上述代码片段展示了如何利用OkHttp库发送HTTP GET请求给Shopify服务器以取得一批新的订单条目。注意这里采用了`page_info`作为翻页依据,在首次加载时不提供此参数而是按照ID升序排列;之后每次迭代都应传递上一次响应中的下一页令牌(`next_page_token`)来进行连续读取操作直到完成全部数据抓取为止[^2]。 #### 解析JSON响应体 接收到的API回复通常是以JSON格式呈现的一组对象数组加上一些元数据字段如`current_page`, `total_pages`, 和最重要的两个属性——`previous_page_info` 及 `next_page_info` 。解析这部分内容可以帮助应用程序理解当前所处位置并且知道何时停止进一步拉取消息流[^3]。 ```json { "orders": [ {"id": 987654, ...}, ... ], "meta": { "has_more": true, "next_cursor": "abcde..." } } ``` 在实际应用中应当将这段文本转换成易于处理的形式,例如映射至自定义类实例或者直接交给第三方序列化工具处理: ```java // Assuming you have a method that converts the string into an object of type OrdersWrapper. private List<Order> parseJson(String jsonString) { ObjectMapper mapper = new ObjectMapper(); OrdersWrapper wrapper = mapper.readValue(jsonString, OrdersWrapper.class); return wrapper.getOrders(); } static class OrdersWrapper { @JsonProperty("orders") private List<Order> orders; @JsonProperty("meta") private Meta meta; public List<Order> getOrders() {return this.orders;} public boolean hasNextPage(){return Objects.nonNull(meta.getNextCursor());} public String getNextCursor(){return meta.getNextCursor();} } static class Meta { @JsonProperty("next_cursor") private String nextCursor; public String getNextCursor() {return this.nextCursor;} } ``` 通过以上步骤即可实现在Java程序里借助于Shopify RESTful接口按需增量式下载客户购买历史记录等功能需求的同时保持良好的用户体验及系统效率[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值