栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java面向对象基础(下)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java面向对象基础(下)

4. this关键字

先看这个例子

//Op1.java
public class Op1 {
    String name;

    public void set() {
        String name;
        name = "Find X";
    }
}

在set()函数中,局部变量name与Op1类中的成员变量name同名,"Find X"这个字符串会给到谁呢?其实在这里有一个就近原则,即"Find X"会给到离它最近的局部变量name。这种情况要想给到成员变量name该怎么做呢?this关键字就派上了用场,this表示当前对象,使用this.成员变量名  来表示成员变量以区分同名的局部变量。C++也有个this指针,同样用来区分成员变量和局部变量,只不过代码格式为this->成员变量名。this关键字在后面提到的构造函数或setter函数中经常用到。

this使用场景:当成员函数中定义的局部变量与成员变量同名时,使用this来标识成员变量。

5. 构造函数

定义:名字与类名相同的函数叫做构造函数。

构造函数不同于我们学到的

构造函数在创建对象时用到,具有两大作用:

1. 与new关键字搭配可创建对象

2. 给对象赋初值

在C++中,对象使用完要销毁时会用到析构函数,析构函数相对于构造函数,函数名前多了~波浪号,不过Java有良好的垃圾回收机制,不需要析构函数。

当自己的类中没有写构造函数,系统会默认生成一个无参构造函数,不执行任何操作。

虽然无参构造函数不执行任何操作,但属性(成员变量)并非没有初始值,对于基本数据类型的属性,对象创建时初始值为0;对于引用类型的属性,对象创建时初始值为null。

若自己已经写了构造函数,系统将不再生成构造函数,也就是说,如果你写的构造函数里面有参数,就不能用默认的无参构造函数来创建对象,如果非要用无参构造函数,就需要自己写一个了。

所以,不管是否用到无参构造函数,你都至少要写一个无参构造函数。如果要写一个有参构造函数,应该在其参数列表中加入类的所有属性,这样就可以在创建对象时实现一次性地为全部属性赋初值。

完美的构造函数应该这样定义

//Car.java
public class Car {
    //成员变量:颜色、品牌、车牌号、价格
    String color;
    String brand;
    String id;
    double price;
    
    public Car() {
    }
    //构造函数:通过传参给对象的各个属性初始化
    public Car(String color, String brand, String id, double price) {
        this.color = color;
        this.brand = brand;
        this.id = id;
        this.price = price;
    }
}

构造函数适用场景:创建新的对象

6. 面向对象编程第一要素——封装

作为面向对象编程的一个核心要素,封装也不是一种技术,而是一种指导我们高效编程的思想。对封装最直观的理解就是把可以代表类的属性包装在一起,隐藏内部细节,只开放有限个方法来访问数据或操纵数据,避免数据被意外修改。这就好比一台手机,它的各种电子元器件都封装在里面,我们使用者不需要关心它里面是什么样,只需要操控屏幕或按键就行了。

其实,在学习方法(函数)时我们就已经用到了封装,只不过两者封装的东西不同

函数是对代码的封装,而类则是对数据的封装。

封装的方式就是将类中的成员变量访问权限全部设为private,对外开放getter和setter方法来访问和操纵成员变量。所以上面的Car.java的实例可以改成

//Car.java
public class Car {
    //成员变量:颜色、品牌、车牌号、价格
    private String color;
    private String brand;
    private String id;
    private double price;

    public Car() {
    }
    //构造函数:通过传参给对象的各个属性初始化
    public Car(String color, String brand, String id, double price) {
        this.color = color;
        this.brand = brand;
        this.id = id;
        this.price = price;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public String getBrand() {
        return brand;
    }

    public void setBrand(String brand) {
        this.brand = brand;
    }

    public String getId() {
        return id;
    }

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

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

现在的Car.java,其所有成员变量(属性)均为private,但Car类中又提供了对外开放的getter(用于查看属性)和setter(用于修改属性)函数,所以这个Car类也叫JavaBean类(实体类)。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1019851.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号