类和对象1

1、面向对象

        面向对象是解决问题的一种思想,主要依靠对象交互完成一件事情。在这一思想中,我们只关心完成这件事情的对象,并不关心完成这件事情的过程。例如:完成洗衣服这件事,我们只要负责把衣服丢进洗衣机里漂洗,其中的对象就是:人、衣服和洗衣机。Java就是一门面向对象的语言,那么Java是如何产生对象的呢?让我们接着往下看!

2、对象的产生

        在Java中,对象的产生依赖于类。我们可以通过class+类名来创建一个类,在类中我们可以创建对象的一些特性(成员变量也可称为属性)和对象的一些行为(成员方法),通过文字说明未免过于抽象,我们还是通过代码来进行理解。下面是创建一个洗衣机对象的代码:

class WashMachine{
    //属性(成员属性):定义在类里边方法的外边,而局部变量定义在方法内部
    public String brand;    //品牌
    public String type;     //型号
    public String color;    //颜色
    //行为(成员方法)
    public void washCloths(){//洗衣服
        System.out.println("洗衣服");
    }
    public void dryCloth(){//甩干
        System.out.println("甩干");
    }
}

        注意:成员变量可以不赋值,Java会给它们赋初值,基本类型赋值为0,String类型会被赋值为null 。

        通过上述代码就产生了洗衣机这个类,那么我们应该怎么访问它里面的属性和方法呢? 在Java中,我们通过对象的引用来访问对象的属性和方法。要访问类中的属性和方法,我们首先得进行类的实例化。可以通过new关键字来完成类的实例化:

WashMachine washMachine = new WashMachine();//类的实例化

        实例化这个过程其实就是创建一个引用变量(washMachine)再让它指向对象(WashMachine),下面我们通过画图来帮助理解实例化这个过程: 

        每new一个对象都会为这个对象开辟一块内存,即不仅要在栈上开辟一块内存存储这个引用变量,还要在堆中开辟一块内存存储它的属性和方法。在Java中,我们通过引用.属性(成员方法)来访问对象中的成员属性和方法,代码如下:

public static void main(String[] args) {
        WashMachine washMachine = new WashMachine();//类的实例化
        washMachine.brand = "美的";//品牌
        washMachine.color = "白色";//颜色
        washMachine.type = "BIG";//型号
        //输出属性
        System.out.println(washMachine.brand);
        System.out.println(washMachine.color);
        System.out.println(washMachine.type);
        //洗衣服
        washMachine.washCloths();
        //甩干
        washMachine.dryCloth();
    }
}

3、this关键字

        在介绍this关键字的作用前,我们先来看一段错误的代码。

注意:这是一串错误的代码,这串代码想实现的功能是:给成员属性赋值

class WashMachine{
    //属性(成员属性):定义在类里边方法的外边,而局部变量定义在方法内部
    public String brand;    //品牌
    public String type;     //型号
    public String color;    //颜色
    //给属性赋值
    public void getSome(String brand,String type,String color){
        brand = brand;
        type = type;
        color = color;
    } 

这是这段代码输出的结果: 

        为什么会输出这样的结果呢?这是因为Java语言的就近原则,在方法的参数与属性同名时,优先会给距离近的一方赋值,这个方法的实现也就变成了参数给参数赋值,因此对象的属性仍然是初始值null。

        解决这个问题一共有两个方法:1、改变形参的值,让它不要和属性同名。2、使用this关键字。(建议使用第2种方法,它的代码可读性更高)。 

        代码如下:

class WashMachine{
    //属性(成员属性):定义在类里边方法的外边,而局部变量定义在方法内部
    public String brand;    //品牌
    public String type;     //型号
    public String color;    //颜色
    public void getSome(String brand,String type,String color){
        this.brand = brand;
        this.type = type;
        this.color = color;
    }

         这里this关键字代表的是当前对象的引用也就是谁调用这个getSome这个方法就代表谁,通过this关键字可以访问当前对象的成员属性和成员变量(静态的成员变量/方法不支持)。

        注意事项:1、this的类型:哪个对象调用就是哪个对象的引用类型。

                          2、this只能在方法中使用。

                          3、在方法中,this只能引用当前对象,不能再引用其他对象。

4、构造方法

        构造方法的作用是对对象中的成员进行初始化,构造方法的方法名和类名必须相同,且构造方法没有返回值下面是一个构造方法的代码:

    public WashMachine(String brand, String type, String color) {
        this.brand = brand;
        this.type = type;
        this.color = color;
    }

        

        可以看到,当我们写完构造方法之后,main方法中实例化对象的代码开始报错了,这时候我们需要把参数给它补上去,就可以解决错误。

        很多同学可能会感到奇怪,为什么刚才没有构造方法的时候,不填参数没有报错?这是因为:当一个类中没有任何一个构造方法的时候,Java会自动提供不带参的构造方法 ,而当一个类中,有一个构造方法的时候,Java就不会再给你提供构造方法了。当调用完构造方法之后对象才产生了。

        那么这时候我们想调用不带参的构造方法应该怎么办呢?其实,构造方法和普通方法一样,都是可以构成重载的(方法名相同,参数列表不同)。我们只要在类中再写一个空构造方法,就可以解决这个问题了。

public WashMachine() {//空构造方法
    }

        除此之外,我们还可以通过this(参数),来调用类中的其他构造方法 。(只能放在构造方法内部,且只能放在第一行)。例如:要在空构造方法中调用上面三个参数的构造方法,代码如下:

 public WashMachine() {
        this("美的","big","黑色");
    }

        最后,我们知道了在Java中完成一个对象的构造,主要分两步:1、分配内存。2、调用合适的构造方法(看类实例化时所带的参数个数)。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值