软件开发模式有两种:面向过程、面向对象。
面向概念中有以下几个特点:
面向对象的开发中有三个阶段:
类指的是具备某一共性的群体集合。而对象是一种个性的描述。对象包含具体的信息内容。对象所能具备的操作行为实际上由类定义的,要想使用类要有具体的描述对象,对象是可以明确使用的,而类是不能直接使用的。
开发中先有类,再有对象,要定义类,Java中使用class关键字来描述,而在类中组成包括:属性(变量)、方法。
class Person{
String name;
int age;
public void tell(){
System.out.println("hello");
}
}
类属于引用数据类型,先对其进行内存分析,分析前首先给出两块内存控件的概念:
按以上分析,可以得出如下内存关系图:
1)声明并实例化对象:Person per = new Person();
2)分步,先声明,再实例化:Person per= null; per = new Person();
注意:关于引用数据类型操作存在的重要问题
当对象开辟堆内存时,即实例化对象,属性才会进行内存的分配,那么如果使用了没有实例化的对象,程序编译OK,但是执行时会返回NullPointerEcepition异常,原因就是使用了没有开辟堆内存空间的引用对象。
引用传递是在引用数据类型上所用的一个操作定义,是Java的精髓,操作性质与C语言相同,进行内存的操作。换到程序中,就是一个堆内存空间可以被多个栈内存所指向。
【举例】:引用传递
Person perA = new Person();
perA.name = "张三";
perA.age= 30;
Person perB = perA
perB.name = "李四";
以上是采用了声明对象的方式进行引用数据类型的接收,如果两个对象都已经实例化并有内容会是什么效果?
【举例】:观察引用传递
Person perA = new Person();
Person perB = new Person();
perA.name = "张三";
perA.age= 30;
perB.name = "王五";
perB.age= 10;
perB = perA;
perB.name = "赵六";
//输出perA,可观察到"赵六",30
以上分析可知:
除了改变引用可以产生垃圾空间,还可以设置为null,eg:perB = null,这样perB放弃了原本的指向,变为一个没有指向的栈内存。