添砖Java(其五)——封装,String,StringBuilder类。

封装:

封装意义:更好的维护数据,让使用者无需关心如何使用,只需要知道怎么使用。

Java Bean:

然后我们要知道Java Bean(实体类)标准。
1.对于这个类的成员都需要设为私有,而且要对外提供相应Get,Set的接口。
2.类中要有公有的无参和带参构造。

意义:对于实体类只需要负责数据的存取,而对数据的处理交给其他方法类完成,以实现数据与业务的分离。

比如我们实现一个学生信息管理系统,学生就是实体类。
如将一个学生信息的封装:

public class StudentInfor {
    
    //成员变量用private修饰
    private String id;
    private String name;
    private int age;
    private String sex;
    private int MathScore;
    private int ChineseSocre;
    private  int EnglishScore;

    private   int arrSocre;


    

    //无参构造
    public StudentInfor() {

    }
    //带参构造
    public StudentInfor(String id, String name, int age, String sex, int mathScore, int chineseSocre, int englishScore) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.sex = sex;
        MathScore = mathScore;
        ChineseSocre = chineseSocre;
        EnglishScore = englishScore;
        arrSocre=mathScore+chineseSocre+englishScore;
    }

    //各个成员的Get和Set
    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public int getArrSocre() {
        return arrSocre;
    }

    public void setArrSocre() {
            arrSocre=MathScore+EnglishScore+ChineseSocre;
    }

    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 String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public int getMathScore() {
        return MathScore;
    }

    public void setMathScore(int mathScore) {
        MathScore = mathScore;
    }

    public int getChineseSocre() {
        return ChineseSocre;
    }

    public void setChineseSocre(int chineseSocre) {
        ChineseSocre = chineseSocre;
    }

    public int getEnglishScore() {
        return EnglishScore;
    }

    public void setEnglishScore(int englishScore) {
        EnglishScore = englishScore;
    }
}

权限修饰:

这里我截了一张黑马的图:10c4e9e7ac424f6799a41110cd9ab9c5.png

具体有什么用后面再说。

String:

首先我们要知道" "双引号里的类容都是String的对象。
jdk8之前内部存储定义的是char类型数组
jdk9以后是定义的byte类型数组存储,可以更好的节省了空间

这里有jdk9版本之后的图。

c27bc196af3b4654b226f34f36f09af5.png

我们要知道直接new一个String的话会在堆中,而直接赋值的话会在先在常量池中找,我们看一下具体怎么做的。

我们来看个例子:

    public static void main(String[] args) {
            String s1="abc";
            String s2="abc";
            if(s1==s2)
            {
                System.out.println("地址相同");
            }
            else {
                System.out.println("地址不同");
            }

    }

这两个地址会相同吗?

运行一下发现是相同的。
0ef4badfd88b42b98fd764fd27f91b60.png

为什么呢?

这里画一张对应的堆图来理解5296d619329f4bcfb8edbd955628305b.png

其中的创建用的是toString方法

这是一张及其简单的图片,但是要注意jdk7版本之前常量池在方法区中,jdk7版本之后常量池在堆中。

Java中还存在常量优化机制。
比如:

    public static void main(String[] args) {
            String s1="abc";
            String s2="a"+"b"+"c";
            if(s1==s2)
            {
                System.out.println("地址相同");
            }
            else {
                System.out.println("地址不同");
            }
    }

这个地址也是相同的哟!

a4f08a13023b4f6bb60cf6865afee25a.png

常量优化机制会将   String s2="a"+"b"+"c";->优化为:Stirng s2="abc";

所以地址会相同

StringBuilder:

1.它是一个可变字符。
2.StringBuilder是字符缓冲区,可以理解为容器,这个容器可以储存任何类型的数据类型,只要进入这个容器全部都是变成字符。

我们来举个例子:

   public static void main(String[] args) {
        StringBuilder s1=new StringBuilder();
        s1.append("abc");
        s1.append(11);
        s1.append(false);
        System.out.println(s1);
    }

409025bb32ef486e86e0aaf4bcdcf0ee.png

Java中有个叫做链式编程的东西。

StringBuilder也能演示链式编程,首先我们要知道append返回的是什么,我们可以去API里面查:53ed6dd8b94544c59995f1d793338b82.png

可见全都是返回的StringBuilder,所以这时候就可以用前面一个的返回值调用方法,这就是链式编程。

类似这样:

    public static void main(String[] args) {
        StringBuilder s1=new StringBuilder();
        s1.append("abc").append(11).append(false);;
        System.out.println(s1);
    }

409025bb32ef486e86e0aaf4bcdcf0ee.png

结果是一样的

 

  • 28
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值