您的位置:首页 > 编程语言 > Java开发

JAVA菜鸟入门篇 - 类、面向对象思想和内存分析(九)

2015-01-06 09:45 549 查看
1、对象和类的概念

面向对象编程(OOP Oriented Object Program)的本质:

- 以类的方式组织代码,以对象的方式组织(封装)数据

面向对象思维:OOA,OOD

从OOD角度来说,是先有对象后抽象出类。

对象:是具体的事物

类:是对对象的抽象(抽象 抽出象的部分)

先对具体的对象,然后抽象各个对象之间象的部分,归纳出类通过类再认识其他对象。

Q:天使类如何归纳?

分析:通过具体对象抽象出类

抽象出天使类的特征,分析问题:



从抽象万事万物中抽出象的部分,具体问题具体分析。

对象和类的总结

对象和类的关系:特殊到一般,具体到抽象

类:我们叫做class

对象:我们叫做Object,instance(实例)。以后我们说某个类的对象,某个类的实例。是一样的概念。

类可以看成一类对象的模板,对象可以看成该类的一个具体实例。

类是用于描述同一类型的 一个抽象的概念,类中定义了这一类对象所应具有的静态和动态属性。

对象是java程序的核心,在Java程序中“万事万物皆对象”。

JDK提供了很多类供编程人员使用,编程人员也可以定义自己的类。

Java语言中除基本类型之外的变量类型都称为引用类型

Java中的对象是通过引用reference对其操作的。

2、类的属性

属性 field,或者叫成员变量

属性用于定义该类或该类对象包含的数据或者静态属性

属性作用范围是整个类体

在定义成员变量时可以对其初始化,如果不对其初始化,Java使用默认的值对其初始化。

属性定义格式:

变量的作用域:

3、类的方法

面向对象中,整个程序的基本单位是类,方法是从属于类的。

方法中定义的局部变量,在使用时必须初始化,系统不会默认初始化局部变量!

方法定义格式:

JAVA中方法参数传递的是:值传递!

类的方法定义实例:

4、内存分析(用Office自带的OneNote软件演示)

4.1 栈(自动分配连续的空间,后进先出) 存放:局部变量

4.2 堆(不连续空间) 存放new出来的对象

4.3 方法区(属于堆的一部分)

存放信息:类的信息(代码)、static变量、常量池(字符串常量)等

以Student类为例:Student s = new Student();

//通过类加载器(Class Loader)加载Student类,加载后,在方法区中就有了该类的信息!

内存分析当中涉及的问题总结:

静态

被静态(static)修饰的,放在内存中的 data segment 块中。

静态变量不属于对象中,他是 class 共用的一块区间,他是单独存放在 data segment 中的。

常量

常量(final)也放在内存中的 data segment 块中。

System.out.println("test");这里的"test"也是常量



类是一个静态概念,类保存在代码区(上图的方法区)。

同一个类的每个对象共享该类的方法。

方法

方法是一个静态概念,保存在代码区(上图的方法区)。

只有在执行的时候才会占用内存。

同一个方法可以由很多对象同时在调用并且运行。

(方法中的参数是一个局部的变量,他在方法使用时创建,使用过以后销毁。)

方法的返回值暂时在 栈 里储存,此时该值没有名称。

对象

对象是new出来的,位于堆中。

new在创建过程中,就是将不同的值赋给对象的属性中,然后创建一个对象。

类的每个成员变量在不同的对象中都有不同的值(除了静态变量)而方法只有一份,执行的时候才会占用内存。

垃圾回收

你一直无法使用的对象,将被垃圾回收机制回收。

垃圾回收机制是隔一段时间回收一次的,他并不是及时回收的。

垃圾回收是如何完成的:

如果堆里面没有指向他的栈,那么该对象无法被调用。

所以此时回收机制会将其回收。

本文参考:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: