美文网首页
Java 1 类与对象

Java 1 类与对象

作者: 反复练习的阿离很笨吧 | 来源:发表于2019-02-07 16:16 被阅读0次

1.1 用类制造对象

什么是类?
我们可以用类来创建对象和使用对象。类可以由系统提供(String),也可以自己定义。

什么是对象?
对象变量和普通变量的不同,对象变量是对象的管理者而非所有者,所以涉及到赋值、函数参数传递和比较都与普通变量有所不同。

类和对象的关系:
类定义了对象长什么样,对象则是按照类的定义所制造出来的实体,一个类可以创建很多对象,每个对象有自己的数据。

1.2 定义类

一个类由两种东西组成:表示对象有什么的成员变量和表示对象能做什么的成员函数。

一旦定义了类,我们就可以创建这个类的多个对象,这些对象都会做那个类所定义的动作(函数),但是各自具有不同的数据。

自动售货机:成员变量(参数属性,输入输出)与成员函数(动作)
package vendingmachine;

public class VendingMachine {
    int price=80;
    int balance;
    int total;  
    void showPrompt()
    {
        System.out.println("Welcome");
    }
    void insertMoney(int amount)
    {
        balance+=amount;
    }
    void showBalance()
    {
        System.out.println(balance);
    }
    void getFood()
    {
        if(balance>=price) {
            System.out.println("Here you are");
            balance=balance-price;
            total=total+price;
        }
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        VendingMachine vm=new VendingMachine();
        vm.showPrompt();
        vm.showBalance();
        vm.insertMoney(100);
        vm.getFood();
        vm.showBalance();
    }
}

创建变量
new VendingMachine();
VendingMachine v=new VendingMachine();

让对象做事
“.运算符”v.getfood();

1.3 成员变量 成员函数

这里的关键是理解类的定义和对象的关系,理解对象中的成员变量是怎么来的,怎么就能让成员函数明白自己在和哪个对象打交道。

在没有引入类之前,变量是跟着代码走的。代码写到哪儿,变量写在哪里,那么运行的时候变量就在那儿。现在,写在类里的成员变量,只是一个声明,变量并不在那里,变量不在类里,变量在每一个对象里。

(我想这里的成员变量就类似函数里的形参。)

函数与成员变量
写类时,在函数中可以直接写成员变量的名字来访问成员变量。
函数的外部调用对象名.调用函数
函数是通过对象来调用的v.insertMoney(),这次调用建立了临时的insertMoney()和对象v之间的联系,这个联系是通过this建立的。

this(成员函数内部调用,this.调用函数)
this是成员函数一个特殊的固有的本地变量,它表达了调用这个函数的那个对象。

    void setPrice()
    {
        this.price=price;
    }
也是调用成员函数的懒得打字的方法

调用函数:
通过“‘.’”运算符调用某个对象的函数
在成员函数的内部直接调用自己(this)的其他成员函数(this可以省去)

本地变量(定义在函数内部的变量),作用域和生存期都是函数的内部
成员变量(定义在函数外部的变量),成员变量的生存期是对象的生存期,作用域是类内部的成员函数

1.4 对象初始化

变量的初始化是程序安全很重要的一环。一旦创建了一个对象,有什么手段可以保证其中的每一个成员变量都有确定的初始值呢?

Java提供了多种手段来保障对象创建时的初始化,包括给每个成员变量默认的“0”值、定义初始化和构造函数。

  1. 成员变量在定义的地方就可以给出初始值,没有赋初值的成员变量自动获得0,对象0值表示没有管理任何对象,也可以主动给null值
  2. 成员变量定义初始化
定义初始化可以调用函数,甚至可以使用已经定义的成员变量
    int balance=f();
    int f()
    {
        return 10;
    }
  1. 构造函数(函数重载):如果一个成员函数的名字和类的名字完全相同,则在创建类的每个对象时都会自动调用这个函数。
构造函数
    VendingMachine()
    {
        total=0;
    }

构造函数不能有返回类型。

    VendingMachine()
    {
        total=0;
    }
    VendingMachine(int price)
    {
        this.price=price;
    }

一个类可以有多个构造函数,只要他们的参数表不同。创造对象的时候给出不同的参数值,就会自动调用不同的构造函数。
VendingMachine vm=new VendingMachine();会跳到前一个构造函数
VendingMachine vm1=new VendingMachine(100);会跳到后一个构造函数
一个类里同名但参数表不同的函数构成了重载关系。

    VendingMachine()
    {
        total=0;
    }
    VendingMachine(int price)
    {
        this();
        this.price=price;
    }

通过this()还可以调用其他的构造函数。比如上面的this();就调用了没有参数的那个VendingMachine()。但这个this只能在这个构造函数里出现,只能是第一句并且只能出现一次。

相关文章

网友评论

      本文标题:Java 1 类与对象

      本文链接:https://www.haomeiwen.com/subject/pimisqtx.html