面向对象 与 String | DAY 2

本文介绍了如何使用面向对象思想优化代码,包括封装属性和行为、继承与接口的运用,以及关于String类型的讨论,如它不是基本类型、比较方式和不可变性。
摘要由CSDN通过智能技术生成

除夕特别任务

1. 如何用面向对象的思想来优化你的代码

我们知道 面向对象的核心就是  对象  所以要用面向对象的方法优化大作业 就需要抽象成对象   然后使用类来定义对象的属性和行为  在此基础上 我们还可以充分使用面向对象的三大特性来优化

  • 封装  用户的属性(id,地址,密码,报名项目等)使用private修饰符进行修饰 如果需要调用或者修改 设立相应的get和set方法进行操作 这样隐藏了内部的实现细节 只对外提供了必要的方法
  • 继承 用户 管理员 评审 都要进行登录操作 所以 我们可以设置一个公有的爸爸(父类) 将登录操作封装在爸爸内部 这样只需要继承爸爸类 就可以使用登录这一方法(检验账户和密码是否一致)
  • 多态  如果不想继承上文的父类 想继承其他的父类 我们可以将这一操作定为接口 然后使用方法重写 在每个登录权限的重写各自的登录方法

2. 什么是面向过程、面向对象

简简单单继续经典案例  把大象装进冰箱

首先是面向过程

  1. 打开冰箱
  2. 把大象放进去
  3. 关闭冰箱门

如果是面向对象该怎么做呢  确定两个对象分别是大象 和 冰箱 那么我们就可以创建一个大象类 和 冰箱类 在大象类中封装了大象的属相和行为 在冰箱类中同样封装了冰箱的属性和行为  那么大象装进冰箱的步骤就是   

  1. 冰箱.开门
  2. 大象.走进去 
  3. 冰箱.关门

是不是很简单

3. String是基本类型吗?

不是 

在java中 String是一个类 属于引用类型(包括 类 接口 数组 枚举 引用类型不直接储存数值 而是储存了对象在内存中的地址)

我们可以查看String的源码得知 String之所以能够存储字符串 其内部使用一个字符数组来存储 这个字符数组是私有的 只能使用String类提供的方法来访问

4. 比较两个字符串

要想比较两个字符串 我们就需要字符串的原理  我们刚才说到 String是一个类 是java中的引用类型 不直接存储数值 而是存储对象在内存中的地址,所以直接比较(==)两个字符串其实是比较两个字符串对象的地址是否相同 但是

public class Main {
    public static void main(String[] args) {
     String a="你好";
     String b="你好";
        System.out.println(a == b);
    }
}

这种情况他的输出值却是 true 这是怎么回事呢?

在上面我们创建String时 是直接为其赋值 在java底层中 创建对象时会先看一下内存(字符串常量池)中是否存在相同内容的字符串 如果不存在就会新开辟一块地址进行存储  但是存在的话(就如图中创建b时)java为了节省内存会直接将a的地址给到他 也就是说a和b共用一块地址 这个地址存储的内容就是“你好”   

public class Main {
    public static void main(String[] args) {
        String a = new String("Hello");
        String b = new String("Hello");
        System.out.println(a == b);
    }
}

如图 如果在创建字符串对象时 是直接new出来 系统默认会重新开辟一块地址 不会搜索内存是否存在该内容  相应的 a和b的地址也不会相同 所以 该程序运行结果为false

那么该如何比较两个字符串内容呢  

String提供了equal方法 该方法会逐个字符地比较两个字符串的内容,直到找到不同的字符或比较完所有字符。如果所有字符都相同,则方法返回 true,否则返回 false

public class Main {
    public static void main(String[] args) {
        String a = new String("Hello");
        String b = new String("Hello");
        System.out.println(a.equals(b));
    }
}

5. String的值能否被修改?

不能

在String源码中 字符数组被final修饰无法被更改

并且在String中 也未提供相应的修改方法

这样 方便在程序中多次使用而不用担心会被错误修改 提高了安全性


恭祝各位新年快乐

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值