2017-01-14
以一种组建化的形式进行代码设计
1)在面向对象程序设计中包含有如下几种特性
封装性:保护内部结构的安全性
继承性:在已有的程序结构上扩充新的功能
多态性:在某一个该娘范围内满足
2) 面向对象开发分为以下几个步骤:
OOA(面向对象分析)
OOD(面向对象设计)
OOP(面向对象编程)
1) 了解类与对象的关系
认识类与对象
类与对象是整个面向对象之中最基础的组成单元,类是共性的一个集合,而对象是某一个体的产物。
例如:
人类(姓名,年龄,工作,除了这些属性类还包括一些方法比如吃饭,玩等等)
对象(对象就是具体到某一个人)
2) 掌握类与对象的定义结构
类与对象的基本定义
一个类需要包含属性和方法
定义类:
- 1 public class ClassDemo1 { //定义一个类
- 2 public String name; //类中的name属性
- 3 public int age; //类中的age属性
- 4 private void eat() { //类中的eat()方法
- 5 System.out.println("我在吃饭");
- 6
- }
- 7
- }
类现在已经产生了,但是如果要使用类,就必须得实例化对象。
实例化对象的两种方式:
声明并实例化对象: 类名称 对象名称 = new 类名称() ;
分布完成:
类名称 对象名称 = null;
对象名称 = new 类名称() ;
引用数据类型与基本数据类型最大的区别就是,引用数据类型需要内存的开辟及使用,关键字 new 就是开辟内存空间,既只要是引用数据类型想要使用,就必须使用关键字 new 来开辟内存空间
使用类:
对象. 属性:表示类操作属性中的内容
对象. 方法():表示类操作方法中的内容
- 1 class Person1 {
- 2 public String name; //类中的name属性
- 3 public int age; //类中的age属性
- 4 public void eat() { //类中的eat()方法
- 5 System.out.println("我在吃饭");
- 6
- }
- 7
- }
- 8 public class ClassDemo1 { //定义一个类
- 9 public static void main(String args[]) {
- 10 Person1 p1 = new Person1(); //声明并实例化对象
- 11 p1.eat(); //调用Person1类中的eat()方法
- 12
- }
- 13
- }
对以上程序进行分析:
堆内存:保存对象的属性内容,一般使用 new 关键字来开辟堆内存空间
栈内存:保存的是一块堆内存的地址,从严格来说占内存保存的是对象的地址,但简单理解栈内存中保存的就是对象的名称。
如果只声明了对象而没有实例化对象就会出现 java.lang.NullPointerException(空指向)异常 。 只要是引用数据类型就有可能出现此异常。
3)掌握对象的内存分析
引用数据的初步分析
对象的引用传递
- 1 class Person2 {
- 2 public String name; //类中的name属性
- 3 public int age; //类中的age属性
- 4 public void eat() { //类中的eat()方法
- 5 System.out.println("姓名:" + name + "年龄" + age);
- 6
- }
- 7
- }
- 8 public class ClassDemo2 { //定义一个类
- 9 public static void main(String args[]) {
- 10 Person2 p2 = new Person2(); //声明并实例化对象
- 11 p2.name = "zhangbojie";
- 12 p2.age = 20;
- 13 Person2 p3 = null;
- 14 p3 = p2; //把p2的引用传递给P3
- 15 p3.name = "张博杰"; //p3修改了姓名和年龄
- 16 p3.age = 21;
- 17 p3.eat(); //调用Person2类中的eat()方法
- 18
- }
- 19
- }
此时两个对象指向 的是同一块内存空间,所以任何一个对象修改了属性的内容,都会影响另一个对象。 在引用操作过程中,一块堆内存可以被多个栈内存索引用。但是反过来,一个栈内存只能保存一块堆内存的地址。
继续观察引用传递
- 1 class Person2 {
- 2 public String name; //类中的name属性
- 3 public int age; //类中的age属性
- 4 public void eat() { //类中的eat()方法
- 5 System.out.println("姓名:" + name + "年龄" + age);
- 6
- }
- 7
- }
- 8 public class ClassDemo2 { //定义一个类
- 9 public static void main(String args[]) {
- 10 Person2 p2 = new Person2(); //声明并实例化对象
- 11 Person2 p3 = new Person2();
- 12 p2.name = "zhangbojie";
- 13 p2.age = 20;
- 14 p3 = p2; //把p2的引用传递给P3
- 15 p3.name = "张博杰"; //p3修改了姓名和年龄
- 16 p2.eat(); //调用Person2类中的eat()方法
- 17
- }
- 18
- }
通过内存的分析可以看出来,在引用数据关系里面,一块没有栈内存指向的堆内存的空间,就将成为垃圾,所有的垃圾会被垃圾回收机制(GC)不定期的进行回收,回收之后就会释放掉其所占的内存。
总结:
1、类描述的是公共的特征,类必须要实例化对象才可以使用。
2、堆内存中保存的是所有属性的内容,而栈内存保存的是堆内存的地址。
3、垃圾空间指的是没有栈内存空间引用的堆内存空间。
来源: