JAVA菜鸟入门篇 - 类、面向对象思想和内存分析(九)
来源:互联网 发布:2016网络赚钱方法 编辑:程序博客网 时间:2024/06/06 00:18
1、对象和类的概念
面向对象编程(OOP Oriented Object Program)的本质:- 以类的方式组织代码,以对象的方式组织(封装)数据
面向对象思维:OOA,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在创建过程中,就是将不同的值赋给对象的属性中,然后创建一个对象。
类的每个成员变量在不同的对象中都有不同的值(除了静态变量)而方法只有一份,执行的时候才会占用内存。
垃圾回收
你一直无法使用的对象,将被垃圾回收机制回收。
垃圾回收机制是隔一段时间回收一次的,他并不是及时回收的。
垃圾回收是如何完成的:
如果堆里面没有指向他的栈,那么该对象无法被调用。
所以此时回收机制会将其回收。
本文参考:
- JAVA菜鸟入门篇 - 类、面向对象思想和内存分析(九)
- JAVA菜鸟入门篇 - 面向对象三大特征之一:继承 ,方法重写(override)和Object类 (十四)
- [学习笔记]Java面向对象思想和内存模型
- java基础--面向对象(内存分析)
- 【原创】面向对象思想入门(示范语言:Java)
- Java中面向对象思想分析
- 菜鸟之旅——Java入门篇(四)面向对象
- JAVA菜鸟入门篇 - 接受键盘输入Scanner、面向对象编程 (八)
- JAVA菜鸟入门篇 - 面向对象特征之:多态 (十八)
- Java菜鸟学习笔记--面向对象篇(九):Oerride与super限定
- Java-equals()和toSting()用法(面向对象编程思想)
- Java 编程思想(一)面向对象和JVM基础
- 面向对象(oo)分析设计思想
- JAVA(八)java面向对象2-变量和内存分析
- java面向对象思想
- JAVA面向对象思想
- JAVA面向对象思想
- JAVA面向对象思想
- USB基本(自用)
- 如何配置tomcat以运行java的servlet程序?
- 黑马程序员————Java基础之多线程
- printf输出%f %lld问题。输出类型和数据类型不匹配会发生什么?
- Handler,Looper分析
- JAVA菜鸟入门篇 - 类、面向对象思想和内存分析(九)
- mfc dll
- Windows_Server_2008虚拟机中安装VMware_vCenter
- @Resource和@Autowire的区别
- 统一设计,iOS6也玩扁平化
- Xshell连接CentOS7中文乱码问题
- Struts国际化
- 系统总线 amba
- 认识AndEngine选自Android 2D游戏引擎AndEngine快速入门教程