11初级 - Java对象系统基础-练习

561 阅读3分钟

11

  • 1
package com.github.hcsp.encapsulation;

public class Cat {
    /** 猫咪的名字 */
    private static String name;
    /** 猫咪的年龄 */
    private static int age;
    /** 猫咪是否萌,true为萌,false为不萌 */
    private static boolean cute;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public boolean isCute() {
        return cute;
    }

    public void setCute(boolean cute) {
        this.cute = cute;
    }
}
  • 2
package com.github.hcsp.encapsulation;

public final class UserBuilder {
    private String firstName;
    private String lastName;
    private String phoneNumber;
    private String address;

    private UserBuilder() {
    }

    public static UserBuilder anUser() {
        return new UserBuilder();
    }

    public UserBuilder withFirstName(String firstName) {
        this.firstName = firstName;
        return this;
    }

    public UserBuilder withLastName(String lastName) {
        this.lastName = lastName;
        return this;
    }

    public UserBuilder withPhoneNumber(String phoneNumber) {
        this.phoneNumber = phoneNumber;
        return this;
    }

    public UserBuilder withAddress(String address) {
        this.address = address;
        return this;
    }

    public User build() {
        return new User(firstName, lastName, phoneNumber, address);
    }
}
  • 3
package com.github.hcsp.encapsulation;

public final class UserBuilder {
    private String firstName;
    private String lastName;
    private String phoneNumber;
    private String address;

//    public UserBuilder() {
//    }

    public static UserBuilder UserBuilder() {
        return new UserBuilder();
    }

    public UserBuilder firstName(String firstName) {
        this.firstName = firstName;
        return this;
    }

    public UserBuilder lastName(String lastName) {
        this.lastName = lastName;
        return this;
    }

    public UserBuilder phoneNumber(String phoneNumber) {
        this.phoneNumber = phoneNumber;
        return this;
    }

    public UserBuilder address(String address) {
        this.address = address;
        return this;
    }

    public User build() {
        return new User(firstName, lastName, phoneNumber, address);
    }
}
  • 4序列化
  • student.java
package com.github.hcsp.encapsulation;

public class Student {
    // 请按照Main类的要求,补全本类
    /**
     * 姓名
     */
    private String name;

    /**
     * 是否重考。true为重考,falase为非重考。
     */
    private boolean retakingExam;

    /**
     * 分数
     */
    private int score;

    public boolean isFail() {
        return fail;
    }

    public void setFail(boolean fail) {
        if (this.score < 60) {
            this.fail = true;
        } else {
            this.fail = false;
        }
    }

    private boolean fail;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public boolean isRetakingExam() {
        return retakingExam;
    }

    public void setRetakingExam(boolean retakingExam) {
        this.retakingExam = retakingExam;
    }

    public int getScore() {
        return score;
    }

    public void setScore(int score) {
        this.score = score;
    }
}
  • Main.java
package com.github.hcsp.encapsulation;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;

public class Main {
    /*
         假设你正在为学校开发一个学生分数记录系统
         你和前端约定的JSON接口格式是:
         {
           "name": "张三",
           "retakingExam": true,
           "score": 59,
           "fail": true // 是否挂科,如果分数低于60则返回true,代表挂科
         }
         请:
         1. 设计并完成Student类
         2. 挑选一种你喜欢的JSON类库,完成序列化/反序列化的方法
    */
    public static void main(String[] args) {
        Student student = new Student();
        student.setName("张三");
        student.setScore(60);
        student.setRetakingExam(true);
        String json = serialize(student);
        System.out.println(json);
        student = deserialize(json);
        System.out.println("student = " + student);
    }

    // 序列化:将Student类转换成JSON字符串
    public static String serialize(Student student) {
        return JSON.toJSONString(student);
    }

    // 反序列化:将JSON字符串转换成Student对象
    public static Student deserialize(String json) {
        Student resultJson = JSONObject.parseObject(json, Student.class);
        return resultJson;
    }
}
  • 4
package com.github.hcsp.encapsulation;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;

public class Main {
    /*
         假设你正在为学校开发一个学生分数记录系统
         你和前端约定的JSON接口格式是:
         {
           "name": "张三",
           "retakingExam": true,
           "score": 59,
           "fail": true // 是否挂科,如果分数低于60则返回true,代表挂科
         }
         请:
         1. 设计并完成Student类
         2. 挑选一种你喜欢的JSON类库,完成序列化/反序列化的方法
    */
    public static void main(String[] args) {
        Student student = new Student();
        student.setName("张三");
        student.setScore(60);
        student.setRetakingExam(true);
        String json = serialize(student);
        System.out.println(json);
        student = deserialize(json);
        System.out.println("student = " + student);
    }

    // 序列化:将Student类转换成JSON字符串
    public static String serialize(Student student) {
        return JSON.toJSONString(student);
    }

    // 反序列化:将JSON字符串转换成Student对象
    public static Student deserialize(String json) {
        Student resultJson = JSONObject.parseObject(json, Student.class);
        return resultJson;
    }
}
  • 5
  • bridge.java
package com.github.blindpirate.extensions;

public class Bridge {
    public static Object newInstance() {
        return new CaptureSystemOutputExtension();
    }
}
  • main.java
package com.github.hcsp.encapsulation;

import com.github.blindpirate.extensions.Bridge;

public class Main {
    public static void main(String[] args) {
        System.out.println(createCaptureSystemOutputExtension().getClass().getName());
    }

    public static Object createCaptureSystemOutputExtension() {
        // 因为CaptureSystemOutputExtension是包级私有的,因此无法直接创建它
        // https://github.com/blindpirate/junit5-capture-system-output-extension/blob/4ee3aa0a0d9b2610b482e4571ecc33828c60248a/src/main/java/com/github/blindpirate/extensions/CaptureSystemOutputExtension.java#L44
        // 想办法绕过这个限制,创建一个这样的实例。提示:你可以创建一些别的类和别的方法,并不一定非要在这个类中完成这件事。祝你好运!
        return new Bridge().newInstance();
    }
}