初步学习JAVA面向对象初步认识及面向对象内存分析图举例说明
1. 说到面向对象, 一个绕不开的话题,就是面向过程.
面向过程适合简单、不需要协作的事务。 面向过程 = 分解问题 + 逻辑为先 = 先细节,再整体。
对比面向过程, 面向对象是模块化的, 当我们思考比较复杂的问题,比如“如何造车?”,就会发现列出1234这样的步骤,是不可能的。那是因为,造车太复杂,需要很多协作才能完成。此时面向对象思想就应运而生了。面向对象 = 多态 + 继承 = 先抽象,后具体.
借参考资料描述对比:
面向过程(Procedure Oriented)和面向对象(Object Oriented,OO)都是对软件分析、设计和开发的一种思想,它指导着人们以不同的方式去分析、设计和开发软件。早期先有面向过程思想,随着软件规模的扩大,问题复杂性的提高,面向过程的弊端越来越明显的显示出来,出现了面向对象思想并成为目前主流的方式。两者都贯穿于软件分析、设计和开发各个阶段,对应面向对象就分别称为面向对象分析(OOA)、面向对象设计(OOD)和面向对象编程(OOP)。
面向对象具有三大特征:封装性、继承性和多态性,而面向过程没有继承性和多态性,并且面向过程的封装只是封装功能,而面向对象可以封装数据和功能。所以面向对象优势更明显。
2. 面向对象是具有模块化, 也就是类.
类就是一个模版, 一个集群事物的抽象集合.
一个车类,所有车的抽象结合体,具体什么类看怎么区分. 车类的实体按照大小级别, 有轿车,面包车,火车,汽车等. 按照牌子分奔驰,奥迪,宝马,沃尔沃等等.
在java中, 共同抽象的叫类,class. 具体有类产生的实体叫对象. object.
总结一下:类和对象之间关系: 类是用于描述同一类型的对象的一个抽象概念,类中定义了这一类对象所应具有的共同的属性, 方法等.
java类和对象例:
package cn.sxt.oop; public class Test_s {
int id;
String name = "pikaqiu";
double score; public static void main(String[] args) {
System.out.println("面向对象的学习....");
// 对于类,获取对象
Test_s stu = new Test_s();
System.out.println(stu.name);
}
}
2. 类的属性和方法
类的属性用于定义该类或者该类对象包含的数据或静态特征. 属性作用范围是整个类.
在定义成员变量时,可以对其初始化, 如果不对其初始化, java使用默认值对其初始化.
数据类型 | 默认值 |
整型 | 0 |
浮点型 | 0.0 |
字符型 | '\u0000' |
布尔型 | false |
所有引用类型 | null |
方法用于定义该类或者该类实例的行为特征和功能是想. 方法是类和对象行为特征对抽象.
方法很类似于面向过程中对函数. 面向过程中, 函数是最基本单位, 整个程序由一个或者多个函数调用组成. 面向对象中, 整个程序对基本单位是类,方法是从属于类和对象对.
3. 面向对象对内存分析;
Java虚拟机对内存可以分为三个区域: 栈stack, 堆heap, 方法区method area.
栈对特点如下:
(1). 栈描述对是方法执行对内存模型. 每个方法被调用都会创建一个栈桢(储存局部变量,操作数,方法出口等)
(2). JVM为每个线程创建一个栈,用于存放该线程执行方法都信息(实际参数,局部变量等)
(3). 栈属于线程私有, 不能实现线程间都共享
(4). 栈都存储特性是“先进后出,后进先出”
(5). 栈是由系统自动分配,速度快. 栈是一个连续都内存空间.
堆都特点如下:
(1). 堆用于存储创建好都对象和数组(数组也是对象)
(2). JVM只有一个堆, 被所有线程共享
(3). 堆是一个不连续都内存空间,分配灵活,速度慢.
方法区(又叫静态区)特点如下:
(1). JVM只有一个方法区,被所有线程共享
(2). 方法区实际也是堆, 只是用于存储类,常量相关信息
(3). 用来存放程序中永远是不变或者唯一都内容. (类信息[class对象], 静态变量static,字符串,方法等)
例子一: Student类说明栈, 堆, 方法区
package cd.bjtxt.array; public class Student {
String name;
int id;
int age;
String gender;
int weigåht;
static int number = 100; //静态常量存储在方法区 public void study(){
this.name = "高进";
System.out.println(name+"正在学习中,请勿打扰...");
} public void sayHello(String sname){
System.out.println(name+"向"+sname+"问好");
} public static void main(String[] args) {
/*
* s1,s2是类构造等实例对象,它是一个指针,指向对中的一一对应对象
* name, id, age是实例对象的属性
* study() 和 sayHello()是实例对象的方法
*/
Student s1 = new Student();
s1.study();
s1.sayHello("Tom"); System.out.println("####################");
Student s2 = new Student();
s2.name = "皮卡丘";
s2.sayHello("小儿");
}
}
控制台显示举例一打印结果
高进正在学习中,请勿打扰...
高进向Tom问好
####################3
皮卡丘向小儿问好
参照举例一画的对应的面向对象内存分析图
举例二, 集合举例一稍微改进, Student 和 Compuent类说明 栈, 堆, 方法区.
public class Student {
String name;
int id;
int age;
String gender;
int weight;
Computer comp; // 每人一台电脑,一个类可以作为属性 public void study(){
System.out.println("我们的学生学习都用"+comp.brand+" 电脑的cpu是" +comp.cpu);
} public void sayHello(String sname){
System.out.println(name+"向"+sname+"问好");
} public static void main(String[] args) {
Computer c = new Computer();
c.brand = "联想";
c.cpu = 920; Student s1 = new Student();
// Student具有Computer这个属性
s1.comp = c;
s1.study();
s1.sayHello("Tom"); System.out.println("####################");
Student s2 = new Student();
s2.name = "皮卡丘";
s2.sayHello("小儿");
}
} class Computer{
String brand;
int cpu;
}
控制台显示举例一打印结果
我们的学生学习都用联想 电脑的cpu是920
null向Tom问好
####################
皮卡丘向小儿问好
参照举例二画的对应的面向对象内存分析图
初步学习JAVA面向对象初步认识及面向对象内存分析图举例说明的更多相关文章
- 大话JS面向对象之扩展篇 面向对象与面向过程之间的博弈论(OO Vs 过程)------(一个简单的实例引发的沉思)
一,总体概要 1,笔者浅谈 我是从学习Java编程开始接触OOP(面向对象编程),刚开始使用Java编写程序的时候感觉很别扭(面向对象式编程因为引入了类.对象.实例等概念,非常贴合人类对于世间万物的认 ...
- 重新学习Java——对象和类(一)
之前通过记笔记的方法,对于<Java核心技术>这本书的前一章进行了重新的复习,感觉效果很好,比单独看书带来了更好的复习效果,了解了很多以前不是很注意的一些细节,但是在一些自己较为熟悉的地方 ...
- 如何学习Java基础
Java是用于软件开发的最流行的编程语言,无论做自动化测试或者测试开发,Java依然是最重要的选项之一. 为什么要学习Java? Java很容易学习 Java是通用的,面向对象的,高性能,解释型,安全 ...
- 深入理解java:1.3.1 JVM内存区域的划分(运行时数据区)
学习Java GC机制,可以帮助我们在日常工作中 排查各种内存溢出或泄露问题,解决性能瓶颈,达到更高的并发量,写出更高效的程序. 我们将从4个方面学习Java GC机制, 1,内存是如何分配的: 2, ...
- JavaScript面向对象初步认识
一.面向对象初步认识 1.什么是对象? 一句话解释: 万物皆对象 对象是有属性的:用{ }来写入! 2.对象的应用(接口) json 接口简单的说就是后台提供给前端提供数据的,让我们进行渲染! 请求接 ...
- 《疯狂Java讲义》学习笔记——第2章 理解面向对象
面向对象的三种基本特征:继承,封装,多态 UML(统一建模语言) 2.1 面向对象 2.1.1 结构化程序设计简介 图2.1 结构化软件的逻辑结构示意图 从图2.1可以看出,结构化设计需要采用自顶向 ...
- 初步学习python
自计算机诞生以来,也伴随着计算机语言的诞生,现在,全世界的编程语言有600多种,但流行的编程语言也就20多种. Java和C一直占据着前两名.但是近年来伴随着人工智能的发展,Python发展迅猛,以其 ...
- json2.js的初步学习与了解
json2.js的初步学习与了解,想要学习json的朋友可以参考下. json2.js的初步学习与了解 1.)该js的下载地址是:http://www.json.org/json2.js 2.)在页面 ...
- Java的初步认识
PS:弥补那些错过的时间,弥补那些本是决定做而没有做的事情,当初说好了学习编程要把自己学到的或是理解的写到博客中记录下来,可是由于各种缘由最终是没有实现...经过几番周折决定把那些丢掉的重新捡起来.对 ...
随机推荐
- HTML基础知识---文本编辑练习
飘柔兰花去油洗发水液露去屑止痒控油 阿道夫净屑舒爽清洁头皮去屑洗发水520ml ...
- DAVID 进行 GO/KEGG 功能富集分析
何为功能富集分析? 功能富集分析是将基因或者蛋白列表分成多个部分,即将一堆基因进行分类,而这里的分类标准往往是按照基因的功能来限定的.换句话说,就是把一个基因列表中,具有相似功能的基因放到一起,并和生 ...
- Golang(七)golang.org/x/time/rate 实现频率限制
1. 源码阅读 整个包实现原理基于令牌桶算法:随时间以 1/r 个令牌的速度向容积为 b 个令牌的桶中添加令牌,有请求就取走令牌,若令牌不足则不执行请求或者等待 Allow 方法的调用链:lim.Al ...
- centos7.5 搭建上FTP服务
1.安装FTP # 查看ftp 是否安装 rpm -qa | grep vftpd # 安装vsftp yum install -y vsftpd # 设置ftp 开机启动 systemctl ena ...
- 微信第三方平台代公众号发起网页授权 48001 api unauthorized 问题
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&gr ...
- python迭代有限制,突破限制
python默认迭代次数为996 需要修改才能迭代超过996 import sys sys.setrecursionlimit() #自定义扩展极限,可以自己改 def fun(n): print(n ...
- win10 .net framework 3.5 离线安装 不需要外网
win 10如果安装系统时没有安装.net 3.5 那么在以后安装时就必须联网. win10 .net framework 3.5 离线安装工具: 链接: https://pan.baidu.com/ ...
- 微信公众号 --- 获取access_token
获取access_token 在左侧菜单栏中也可以找到 可以一步步的进行设置 , 身份验证的时候要 注意:密码是你创建微信公众号的密码 往一步步的执行就可以了 接下来就是获取ip 白名单,进行设置 ...
- Python基础笔记(四)
1. 返回函数与闭包 如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure) def getSum(*args): def add(): ...
- Lodash之throttle(节流)与debounce(防抖)总结
全手打原创,转载请标明出处:https://www.cnblogs.com/dreamsqin/p/11305028.html 先重点说一下可能遇到的坑:主要在原本默认参数的设置以及两个方法的选择上, ...