【i码邦】java基础教程分享-06-对象

对象是类的一个实例,有状态和行为,是类的具体实现。
 
比如女人是一个类,而彭麻麻就是具体的对象。
 
类和对象是面向对象编程中最基本、也是最重要的特征之一,它们整个面向对象中最基础的组成单元。搞清楚了对象和类,学习java就不再是难事了。
 
从类和对象以后的学习内容,将介绍如何进行面向对象的程序开发,以及程序开发的过程中,所需要具备的重要思想是什么?编程思想是很多学习编程的人,学习时间长却学不好的一个主要原因。
 
Java中的对象

现在让我们深入了解什么是对象。看看周围真实的世界,会发现身边有很多对象,车,狗,人等等。
所有这些对象都有自己的状态和行为。

可以一句话来总结出类和对象的区别:类是对象的模板,对象是类的实例。类只有通过对象才可以使用,而在开发之中应该先产生类,之后再产生对象。类不能直接使用,对象是可以直接使用的

对象是一种个性的表示,表示一个独立的个体,每个对象拥有自己独立的属性,依靠属性来区分不同对象

对比现实对象和软件对象,它们之间十分相似。
软件对象也有状态和行为。软件对象的状态就是属性,行为通过方法体现。
在软件开发中,方法操作对象内部状态的改变,对象的相互调用也是通过方法来完成。
 
类与对象的定义和使用
在Java中定义类,使用关键字class完成。语法如下:
class 类名称 {
  属性 (变量) ;
  行为 (方法) ;
}

类定义完成之后,肯定无法直接使用。如果要使用,必须依靠对象,那么由于类属于引用数据类型,所以对象的产生格式(两种格式)如下:

(1)格式一:声明并实例化对象类名称
    对象名称 = new 类名称 () ;
(2)格式二:先声明对象,然后实例化对象:
   类名称 对象名称 = null ;
   对象名称 = new 类名称 () ;



引用数据类型与基本数据类型最大的不同在于:引用数据类型需要内存的分配和使用。所以,关键字new的主要功能就是分配内存空间,也就是说,只要使用引用数据类型,就要使用关键字new来分配内存空间。

当一个实例化对象产生之后,可以按照如下的方式进行类的操作: 
对象.属性:表示调用类之中的属性; 
对象.方法():表示调用类之中的方法。

范例:使用对象操作类

package com.wz.classandobj;
 class Person {
   String name ;
   int age ;
   public void get() {
     System.out.println("姓名:" + name + ",年龄:" + age);
 }
}
 
 public class TestDemo {
   public static void main(String args[]) {
     Person per = new Person() ;// 声明并实例化对象
     per.name = "张三" ;//操作属性内容
     per.age = 30 ;//操作属性内容
     per.get() ;//调用类中的get()方法
 }
}


运行结果:姓名:张三,年龄:301

以上完成了一个类和对象的操作关系,下面换另外一个操作来观察一下:

package com.wz.classandobj;
 class Person {
 String name ;
 int age ;
 public void get() {
   System.out.println("姓名:" + name + ",年龄:" + age);
   }
 }
 
 public class TestDemo {
    public static void main(String args[]) {
       Person per = null;//声明对象
       per = new Person() ;//实例化对象
       per.name = "张三" ;//操作属性内容
       per.age = 30 ;//操作属性内容
       per.get() ;//调用类中的get()方法
    }
 }


运行结果:姓名:张三,年龄:301

那么,问题来了,以上两种不同的实例化方式有什么区别呢? 
我们从内存的角度分析。首先,给出两种内存空间的概念: 
(1)堆内存:保存对象的属性内容。堆内存需要用new关键字来分配空间; 
(2)栈内存:保存的是堆内存的地址(在这里为了分析方便,可以简单理解为栈内存保存的是对象的名字)。
 
任何情况下,只要看见关键字new,都表示要分配新的堆内存空间,一旦堆内存空间分配了,里面就会有类中定义的属性,并且属性内容都是其对应数据类型的默认值。
 
如果上面的程序只声明了Person对象(Person per = null;//声明对象),但并没有实例化Person对象(只有了栈内存,并没有对应的堆内存空间),则程序在编译的时候不会出现任何的错误,但是在执行的时候出现了上面的错误信息。这个错误信息表示的是“NullPointerException(空指向异常)”,这种异常只要是应用数据类型都有可能出现。
 

0 个评论

要回复文章请先登录注册

Template error, template file not found