新朋友关注“尚学堂java培训”轻松学编程知识 面向对象的编程思想力图使在计算机语言中对事物的描述与现实世界中该事物的本来面目尽可能地一致,类(class)和对象(object)就是面向对象方法的核心概念。 类是对某一类事物的描述,是抽象的、概念上的定义;对象是实际存在的该类事物的个体,因而也称实例(Instance)。如图 2 就是一个说明类与对象的典型范例。 图1:类与对象的实例说明 上图中,汽车设计图就是“类”,由这个图纸设计出来的若干的汽车就是按照该类产生的“对象”。可见,类描述了对象的属性和对象的行为,类是对象的模板。对象是类的实例,是一个实实在在的个体,一个类可以对应多个对象。可见,如果将对 象比作汽车,那么类就是汽车的设计图纸,所以面向对象程序设计的重点是类的设计,而不是对象的设计。 同一个类按同种方法产生出来的多个对象,其开始的状态都是一样的,但是修改其中一个对象的时候,其他的对象是不会受到影响的,比如修改第一辆汽车的时候,其他的汽车是不会受到影响的。 在使用类之前,必须先定义它,然后才可利用所定义的类来声明变量,并创建对 象。类定义的语法如下: 【格式1:类的定义】
图2:类的定义 下面举一个 Person 类的例子,来清楚认识类的组成。 范例:Person.java class Person { String name int age void talk() { System.out.println("我是:" name ",今年:" age "岁"); } } 程序说明: 1、 程序首先用 class 声明了一个名为 Person 的类,这里 Person 是类的名称。 2、 在第 3、4 行,先声明了两个属性 name 和 age,name 为 String(字符串类型)型、 age 为 int(整型)型。 3、 在第 5~8 行,声明了一个 talk()方法,此方法用于向屏幕打印信息。 为了更好的说明类的关系,请参见图3。 图3:面向对象类图 小提示: 可以发现在本例中,声明类 Person 时,类名中单词的首字母是大写的,这是规定的一种符合标准的写法,在本书以后的范例中都将采用这种写法。 在上面的范例中,已经创建好了一个 Person 的类,相信类的基本形式读者应该已经很清楚了,但是在实际中单单有类是不够的,类提供的只是一个摸板,必须依照它 创建出对象之后才可以使用。下面定义了由类产生对象的基本形式: 【格式2:对象的产生】 类名 对象名 = new 类名 () 了解了上述的概念之后,便可动手编写程序了。创建属于某类的对象,需要通过 下面两个步骤来实现: 1、 声明指向"由类所创建的对象"的变量 2、 利用 new 创建新的对象,并指派给先前所创建的变量。 举例来说,如果要创建 Person 类的对象,可用下列的语句来实现: Person p ; // 先声明一个 Person 类的对象 p p = new Person() // 用 new 关键字实例化 Person 的对象 p 当然也可以用下面这种形式来声明变量: Person p = new Person() // 声明 Person 对象 p 并直接实例化此对象 小提示: 对象只有在实例化之后才能被使用,而实例化对象的关键字就是 new。关于对象实例化的过程,请参见图 图4:Person 类对象的实例化过程 由图中可以看出,当语句执行到 Person p 的时候,只是在栈内存中声明了一个Person 的对象 p,但是这个时候 p 并没有在堆内存中开辟空间,所以这个时候的 p 是一个未实例化的对象,用 new 关键字实际上就是开辟堆内存,把堆内存的引用赋给了p,这个时候的 p 才称为一实例化对象。 如果要访问对象里的某个成员变量或方法时,可以通过下面语法来实现: 【 格式3:访问对象中某个变量或方法】 访问属性:对象名称.属性名 访问方法:对象名称.方法名() 例如:如果想访问 Person 类中的 name 和 age 属性,可以用如下方法来访问: p.name // 访问 Person 类中的 name 属性 p.age // 访问 Person 类中的 age 属性 因此:若想将 Person 类的对象 p 中的属性 name 赋值为"张三",年龄赋值为 25, 则可以采用下面的写法: p.name = "张三" p.age = 25 如果想调用 Person 中的 talk()方法,可以采用下面这种写法: p.talk() // 调用 Person 类中的 talk()方法 看下面的完整的程序: 范例:Person.java class Person { String name int age void talk() { System.out.println("我是:" name ",今年:" age "岁"); } } 范例:TestPersonDemo.java // 下面这个范例说明了使用 Person 类的对象调用类中的属性与方法的过程 class TestPersonDemo { public static void main(String[] args) { Person p = new Person() p.name = "张三" p.age = 25 p.talk(); } } 输出结果: 我是:张三,今年:25岁 程序说明: 1、 第 6 行声明了一个 Person 类的实例对象 p,并直接实例化此对象 2、 第 7、8 行给 p 对象中的属性赋值 3、 第 9 行调用 talk()方法,在屏幕上输出信息 可以参照上述程序代码与图5 的内容,即可了解到 Java 是如何对对象成员进行 访问操作的。 图5:对 Person 对象 p 的访问操作过程 在上面的 TestPerson.java 程序中,只建立了一个 Person 的对象 p,如果需要创建 多个对象的话,则可以依照【格式2】 产生多个对象,如下范例所示: 范例:TestPersonDemo1.java class Person { String name int age void talk() { System.out.println("我是:" name ",今年:" age "岁"); } } public class TestPersonDemo1 { public static void main(String[] args) { // 声明并实例化一 Person 对象 p1 Person p1 = new Person() // 声明并实例化一 Person 对象 p2 Person p2 = new Person() // 给 p1 的属性赋值 p1.name = "张三 p1.age = 25 // 给 p2 的属性赋值 p2.name = "李四 p2.age = 30 // 分别用 p1、p2 调用 talk()方法 p1.talk() p2.talk() } } 输出结果: 我是:张三,今年:25 岁 我是:李四,今年:30 岁 程序说明: 1、 1~9 行声明了一个新的类 Person,类中有 name、age 两个属性,还有一个 talk() 方法用于输出信息。 2、 15~18 声明了 Person 的两个实例对象 p1、p2。 3、 21、22 行给 p1 对象的属性赋值。 4、 24、25 行给 p2 对象的属性赋值。 5、 28、29 行分别用 p1、p2 调用 Person 类中的 talk()方法,用于在屏幕上打印信息。 6、 在程序中声明了两个对象 p1 和 p2,之后为 p1 与 p2 分别赋值,可以发现 p1 与 p2 赋的值互不影响,此关系可由图6表示出来。 图6:Person 中 p1 与 p2 的内存分配图 可以发现 p1 与 p2 各自占有一块内存空间,p1、p2 中各有自己的属性值,所以 p1、p2 不会互相影响。 相关阅读: |