第四课:面向对象(基础) M

1、面向对象概念

  面向对象是一个比较先进的设计思路,在这之前有一种开发设计,称为面向过程,两者之间的区别为:

    面向过程:专注于解决问题

    面向对象:经过完整的分析、设计之后才可以进行开发

  面向对象的程序开发实际上分为三种:OOA、OOD、OOP

    OOA:面向对象分析

    OOD:面向对象设计

    OOP:面向对象程序

2、面向对象的三大特征

  封装性:对外部不可见,保护类中的操作不被外部直接访问

  继承性:扩展类的功能。

  多态性:方法的重载,不同的方法名称根据传入的参数类型或个数不同调用的方法也不同。多态是在整个Java中最重要的概念,而且一个好的面向对象设计中肯定要大量的使用多态性

3、类与对象

  类和对象是面向对象中两个最重要的概念:

    类:表示一个共性的产物,是对某一类实物的描述,是抽象的、概念上的定义。

    对象:就是一个个性的体现,是实际存在的该类实物的每个个体,因而也称为实例(instasnce)。

  实际上,类就相当于是一个对象的操作图纸,按照此图纸生产出来的对象,才可以被用户所使用:

    没有类则肯定没有对象的产生

    没有对象的产生类不能使用

    对象的所有活动范围在类中已经完整的定义出来了

4、类与对象的定义

  (1)、类要使用class来进行定义,类由属性和方法组成,类的定义格式为:

    class 类名称{

      数据类型 属性 ;  //声明成员变量(属性)

      public 返回值的数据类型 方法名称 ( 参数1, 参数2...) {  //定义方法的内容

        程序语句 ;

        [return表达式 ;]

      }

    };

  属性跟标量一样,数据类型就是使用Java的两种数据类型:基本数据类型、引用数据类型。

  但是,此时在方法的定义上与直接使用主方法调用的时候声明不一致的是,不再出现static关键字。

  (2)、对象的创建及使用的两种方式:

    类名 对象名称 = null ;  //声明对象

    对象名称 = new 类名() ;  //实例化对象

    或者:

    类名 对象名称 = new 类名() ;  //产生实例化对象

  (3)、对象的操作分为两种情况:

    访问属性:对象名称.属性名 = 值 ;

    访问方法:对象名称.方法() ;

  (4)、对象的产生

    对象的产生步骤实际上是分为两步完成的:

      声明对象:类名称 对象名称 = null ;

      实例化对象:对象名称 = new 类名称() ;

    如果对象在使用中只是声明的话,则无法使用,会出现下面的错误必须实例化之后才可以正确使用:

    Exception in thread "main" java.lang.NullPointerException

    出现上面错误的原因:是由于对象未被实例化,所以出现的空指向异常,此异常在开发中会经常出现。

    实际上对于对象的产生,也是与数组一样,需要划分堆栈空间的:

      对象实际上是保存在栈内存中的:Person per = null ;

      实例化之后对象会开辟对应的堆内存空间:per = new Person() ;

        在堆内存中实际上存放的是对象的各个属性,因为对象中只能依靠属性的不同来区分。

        全部的方法保存在全局代码区中,这是一个其他的存储空间,这个方法被所有的对象所共同拥有。

     

声明几个对象,就会在栈内存中开辟几个空间来保存对象,然后分别实例化对象,也就是说,只要一出现关键字new就表好似要开辟新的内存空间。而且这些对象之间不会互相影响。

5、对象的引用传递

  在对象的操作中实际上是存在引用传递的,所谓的引用传递,就是将一个堆内存空间的使用权交给了其他的对象,就相当于为一个堆内存空间起了一个别名。

class Person{
	String name ;
	int age ;
	public void tell(){
		System.out.println("姓名:" + name + ",年龄:" + age) ;
	}
}
public class SimpleDemo{
	public static void main(String args[]){
		Person per1 = null ;	//声明对象per1
		Person per2 = null ;	//声明对象per2
		per1 = new Person() ;	//实例化对象per1
		per2 = per1 ;	     //引用传递
		per1.name = "张三" ;	//为对象属性赋值
		per1.age = 30 ;
		per2.age = 33 ;
		per1.tell() ;
		per2.tell() ;
	}
}

  一个栈内存只能引用一个堆内存空间,但是一个堆内存空间可以被多个栈内存同时指向。在Java中不用的内存空间成为垃圾空间,垃圾空间要等待垃圾收集机制进行空间释放,垃圾收集机制成为GC

【2011-12-27】

原文地址:https://www.cnblogs.com/chuanstone/p/2303827.html