1、学习内容
1、面向对象的基本概念
2、面向对象的主要特性
面向对象:以一种组件化的形式进行代码的设计,这样的开发出来的代码有一个最大的好处就是可以重用。
面向对象的程序的特征:
- 封装性:保护内部的定义结构的安全性;
- 继承性:在已有的程序结构上继续扩充的功能;
- 多态性:指的是在某一个概念范围内满足。
面向对象程序的设计步骤:OOA(面向对象分析)、OOD(面向对象设计)、OOP(面向对象编程)。
2、具体内容
1、清楚类与对象的关系;
2、掌握类与对象的定义结构;
3、掌握对象的内存分配。
2.1、认识类与对象
类与对象是整个面向对象编程最为基础的组成单元,根据此类产生出的对象都具备相同的行为。对象所能够操作的行为都是由类来决定的。
类实际上是对象操作的模板,但是类不能够直接使用,对象是通过类产生的。
2.2、类和对象的定义与使用
对象的实例化方式有两种:
* 声明对象并实例化对象: 类名称 对象名称=new 类名称();
* 分步完成:
|-声明对象:类名称 对象名称=null;
|-实例化对象: 对象名称=new 类名称();
即:只要是引用数据类型想使用,那么就必须使用关键字new类开辟空间。
class Book{
String title;
double price;
public void getInfo(){
System.out.println("图书名称:"+title+",价格:");
}
}
public class TestDemo {
public static void main(String args[]){
Book bk=new Book();
bk.title="java开关";
bk.price=34.54;
bk.getInfo();
}
}
进行内存分析,给出两块内存空间的概念:
- 堆内存:保存每一个对象的属性内容,堆内存需要关键字new才可以开辟;
- 栈内存:保存的是一块堆内存的地址,但是为了分析方便,可以简单的理解栈内存保存的是对象地址;
假如使用没有实例化的Book类对象,程序在运行时将出现“NullPointException”异常,此类异常只要是引用数据类型都有可能出现。
2.3引用数据的初步分析
引用是整个java开发中的核心精髓所在,引用类似于C++中的指针所在,但是比指针的概念简单而已。
在引用分析的关键在于关键字“new”,
范例:对象引用传递
class Book{
String title;
double price;
public void getInfo(){
System.out.println("图书名称:"+this.title+",价格:"+this.price);
}
}
public class TestDemo {
public static void main(String args[]){
Book booka=new Book();//声明并实例化
Book bookb=null;//声明
booka.title="java开发";
booka.price=89.8;
bookb=booka;
bookb.price=69.8;
booka.getInfo();
}
}
严格来讲booka和bookb里面保存的是对象地址信息,以上的引用过程就是将booka的地址给了bookb。
booa和bookb指向是同一块内存地址,所以任何一个对象修改了堆内存地址中的数据后,另一个也将改变。在引用操作的过程之中,一块堆内存可以同时被多个栈内存所引用,反过来,一块栈内存只能够保存一块内存空间的地址。
class Book{
String title;
double price;
public void getInfo(){
System.out.println("图书名称:"+this.title+",价格:"+this.price);
}
}
public class TestDemo {
public static void main(String args[]){
Book bookA=new Book();//声明并实例化
Book bookB=new Book();
bookA.title="java开发";
bookA.price=89.8;
bookB.title="JSP开发";
bookA.price=69.8;
bookB=bookA;
bookB.price=100.5;
bookA.getInfo();
}
}
在通过内存分析后发现,在引用数据类型里面,一块没有任何栈指向的堆内存空间将成为垃圾,会不定期的被垃圾回收器(GC)进行回收,回收之后释放所占空间。虽然java支持垃圾的收集处理,但是代码中应回避垃圾。
总结
1、类描述的是公共特征,类必须通过对象才可以使用;
2、声明对象指的是未开辟堆内存的对象,如果直接使用此对象会出现“NullPointException”空指向异常,有了堆内存引用的对象才称为实例化对象;
3、堆内存保存的是对象中所有属性的内容,而栈内存保存的是堆内存地址数值(为了简单说明才称为栈保存的是对象名称);
4、垃圾空间指的是没有任何栈指向的堆内存空间,会被垃圾回收器收集。