面向程序对象

1.1类与对象

在面向对象中,为了坐到让程序对事物的描述与事物在现实中的形态保持一致,面向对象思想中提出了两个概念,即类和对象。在Java程序中类和对象是最基本、最重要的单元。类表示某些群体的一些基本特征抽象,对象表示一个个具体的事物。

例如,在现实生活中,学生可以表示一个类,而一名具体的学生,就可以称为对象。这名具体的学生会有自己的姓名和年龄等信息,这些信息在面向对象的概念中称为属性;学生可以看书和打球,而看书和打篮球这些行为在类中就称为方法。类与对象的关系如图3-1所示。

在图3-1中,学生可以看做是一个类;小明、李华、大军都是学生类型的对象。类用于描述多个对象的共同特征,它是对象的模板。对象用于描述现实中的个体,它是类的实例。对象是根据类创建的,一个类可以对应多个对象。

1.1.1类的定义

在面向对象的思想中最核心的就是对象,而创建对象的前提是需要定义一个类,类时Java中一个重要的引用数据类型,也是组成Java程序的基本要素,所有的Java程序都是基于类的。

类是对象的抽象,用于描述一组对象的共同特征和行为。类中可以定义成员变量和成员方法,其中,成员变量也被称为对象的属性;成员方法用于描述对象的行为,可简称为方法。

类的定义格式如下:

class 类名{
    成员变量;
    成员方法;
}

根据上述格式定义一个学生类,成员变量包括姓名(name)、年龄(age)、性别(sex);成员方法包括读书(read)。学生类定义的示例代码如下:

class student{
    string name;
    int age;
    string sex;
    void read(){
        system.out.println("大家好,我是"+ name +",我在看书!");
    }
}

上面代码中定义了一个学生类。其中,student是类名,name、age、sex是成员变量,read()是成员方法。在成员方法read()中可以直接访问成员变量name。

在Java中,定义在类中的变量称为成员变量,定义在方法中的变量称为局部变量。如果在某一个方法中定义的局部变量与成员变量同名,这种情况是允许的,此时,在方法中通过变量名访问到的是局部变量,而并非成员变量,请阅读下面的代码示例:

class student{
    int age =30;
    void read(){
         int age =50;
         system.out.println("大家好,我"+ age +"岁了,我在看书!");
    }
}

上述代码中,在student类的read()方法中有一条打印语句,访问了变量age,此时访问的是局部变量age,也就是说当另有一个程序调用read()方法时,输出的age值为50,而不是30。

1.1.2对象的创建与使用

在1.1.1节中定义看一个student类,要想使用一个类则必须要有对象。在Java程序中可以使用new关键字创建对象,具体格式如下:

类名 对象名称 = null;
对象名称 = new 类名();

上述格式中,创建对象分为声明对象和实例化对象两步,也可以直接通过下面的方式创建对象,具体格式如下:

类名 对象名称 = new 类名();

例如,创建student类的实例对象,实例代码如下:

student stu = new student();

上述代码中,new student()用于创建student类的实例对象,student stu则是声明了一个student类型的变量stu。运算符“=”将新窗口的student对象地址赋值给变量stu,变量stu引用的对象简称为stu对象。

了解了对象的创建之后,就可以使用类创建对象了,实例代码如下:

class student{
    string name;
    void read (){
        system.out.println("大家好,我是"+ name +",我在看书!");
    }
}
public class test{
    public static void main (string[] args[] ){
        student stu = new student();
    }
}

上述代码在main()方法中实例化了一个student对象,对象名称为stu。使用new关键字创建的对象在堆内存空间。stu对象的内存分配如图3-2所示。

从图3-2中可以看出,对象名称stu保存在栈内存中,而对象的属性信息则宝次年在对应的堆内存中。

创建student对象后,可以使用对象访问类中的某个属性或方法,对象属性和方法的访问通过"."运算符实现,具体格式如下: 

对象名称.属性名

对象名称.方法名

 下面通过一个案例学习对象属性和方法的访问 ,如文件3-1所示

                           //文件3-1 Example.Java
class Student {
    String name;                   //声明姓名属性
    void read(){
        System.out.println("大家好,我是"+ name);
    }
}
class Example01{
    public static void main (String [] ages){
        Student stu1 = new Student ();         //创建第一个Student对象
        Student stu2 = new Student();          //创建第二个Student对象
        stu1.name = "小明";                   //为stu1对象的name属性
        stu1.read();                         //调用对象的方法
        stu2.name ="小华";
        stu2 .read();

    }
}

文件3-1运行结果如图所示:

在文件3-1中,第2~5行代码声明了一个String类型的name属性和一个read()方法,第9~10行代码创建了stu1对象和stu2对象;第11行代码为stu1对象name属性赋值;第12行代码通过stu1对象调用read()方法;第13行代码为stu2对象name属性赋值;第14行代码通过stu2对象调用read()方法。

从文件3-1所示的运行结果可以看出,stu1对象和stu2对象在调用read()方法时,打印的name值不相同。这是因为stu1和stu2 对象是两个完全独立的个体,它们分别拥有各自的name属性,对stu1对象的name属性赋值并不会影响到stu2对象name属性的值。为stu1对象和stu2对象中的属性赋值后,stu1对象stu2对象的内存变化如图3-4所示。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值