没有对象怎样面向对象编程呢?真让人头秃!
- 惨败阿里,洒泪复习25天,我还能抓住2019的小尾巴上岸网易?
- 微服务架构之春招总结:SpringCloud、Docker、Dubbo与SpringBoot
- 拼多多三面惨败,java中间件、数据库与spring框架,答不上…
image.png
Java中最核心的东西就是面向对象,我们只需把面向对象这个概念,和它的少量语法还有用法,思想掌握好,那对于我们后面去学习Java的任何东西,甚至去学习其它的语言的时候,都是轻车熟路啊!所以它的作用还是非常非常关键滴!
01 面向对象的基本概念
1.1 什么是面向对象
提到面向对象,我们就不得不提到面向过程,什么是面向过程呢,假如小伙伴们在大学的时候学过C语言的话,想必对面向过程应该是不陌生的,或者者学过C plus plus 的前半部分,c plus plus 也是有面向对象的。。,面向过程:以步骤为单位,一步一步完成某一个具体的事情,面向对象:以对象为单位,通过调度组合不同的对象来完成某一个事情,面向对象更高级少量!
举个例子:轩轩买彩票中了600块钱,打算去创业卖煎饼,我做事情的过程全都我一个人来,租三轮,买原料,灌煤气,亲手摊煎饼,而后亲手收钱每件事情都得自己亲手来,这个创业的过程就是面向过程,但是后来呢我摊的 煎饼很好吃,非常好吃,忙不过来了,我就开始招人了,有专门收钱的,专门摊煎饼的,专门买面的,还有专门蹬三轮的。。。,而后轩轩呢就负责支配他们,让他们帮我卖煎饼,轩轩调度人手的办事的过程就是面向对象了!
面向对象是一种编程思想
面向对象是一种思考问题的思维方式
1.2 建立面向对象思维方式
先整体,再局部
先笼统,再具体
能做什么,再做什么
1.3 如何学习面向对象
掌握一门面向对象语言的语法
熟习面向对象的设计准则
熟习面向对象设计模式 大概23中 常用的十来种
02 类与对象
2.1 什么是类?
- 类是:分类、类别。
- 通过分类,我们可以区别不同的事物种类,在日常生活当中,我们常常这样做。
- 所以,类是一组具备相同特性(属性)与行为(方法)的事物集合。 我们除了特征和 行为之外,还能通过其余的东西分类了,我们发现没有了!属性和行为如同就能把所有的东西都能分类了
2.2 类与对象的关系
- 类表示一个共性的产物,是一个综合的特征,而对象,是一个个性的产物,是一个个体的特征。
- 类由属性和方法组成:
· 属性:就相当于一个个的特征
· 方法:就相当于人的一个个的行为,例如:说话、吃饭、唱歌、睡觉
类就是类别分类,对象就是这个类里边的实例,比方男人这个分类,那我就是一个对象!再举个例子轩轩就是个对象,程序员就是类!程序员的属性就是头发少,钱多,话少,死的早!
03 类和对象的定义格式
在Java中可以使用以下的语句定义一个类:
class 类名称{ 属性名称; 返回值类型 方法名称(){}}
对象的定义: 一个类要想真正的进行操作,则必需依靠对象,对象的定义格式如下:
类名称 对象名称 = new 类名称() ;
按照以上的格式即可以产生对象了,我去…原来搞个对象那么容易哈..new 一下就一个对象啧啧啧
假如要想访问类中的属性或者方法(方法的定义),则可以依靠以下的语法形式:
访问类中的属性:
对象.属性 ;
调用类中的方法:
对象.方法();
在java中对象公告有两种含义
公告对象:
Horse horse= null; ; // 表示公告了一个对象,但是此对象无法使用,horse没有具体的内存指向
实例化对象:
horse= new Horse() ;// 表示实例化了对象,可以使用//通过对象调用方法:horse.eat()//匿名对象调用方法:new Horse().eat()
代码实例:
public class Test8{ public static void main(String[] args){ //类的使用 Horse h=null;//公告一个类的变量(变量 除了八种基本数据类型 都是引用类型,包括数组) //创立一个Horse类型的对象 (实例化一个对象) h=new Horse(); //有了对象,我们即可以调用对象的属性和方法 h.name="赤兔马"; h.age=350; h.run();//调用方法 方法就被执行了 h.eat(); //匿名对象:只能使用一次 用完后就会被释放 new Horse().eat(); h=null;//把对象释放掉 // h.eat(); 当对象不存在时,调用改对象的方法和属性会报空指针异常 } }//自己设置一个类(类型 引用类型) Horse 类class Horse{ //在类中定义属性(特征) String name; int age; //定义方法 public void run(){ System.out.println("我是"+name+",我"+age+"岁了,我还能日行千里"); } public void eat(){ System.out.println("我吃仙草,还吃得多"); }}
04 对象内存分析
- new 关键字表示创立一个对象
- new 关键字表示实例化对象
- new 关键字表示申请内存空间
注意:假如使用一个没有申请内存空间的对象,会报空指针异常:java.lang.NullPointerException
对象在内存中的结构:
Horse horse= null;
image.png
horse 存的是地址由于=null 所以现在horse里面没有地址
horse = new Horse();
image.png
字符串的默认值是null, int的默认值是0;
给对象的属性赋值:
image.png
注意,在堆内存的 name它存的也是地址,我是为了方便了解所以把它和字符串放在一起了,name存的也是地址它指向一个内存空间,这个空间存的是真正的字符串小白。
在内存中创立多个对象:
image.png
分别给两个对象的属性赋值:
image.png
公告两个对象,一个实例化,一个没实例化
image.png
对象之间的赋值:
image.png
horse2没有实例化,但是把horse1赋值给horse2了,赋值的过程就是,将horse1的地址给了horse2,所以现在是horse1和horse2指向了同一块内存,所以现在把horse2.name=”嘿嘿”,你打印出来horse1的name也等于嘿嘿
分别实例化两个对象:
image.png
对象之间的赋值:
image.png
这个赋值过程和上边的是一样的,不一样的是horse2原价指向的内存,由于没有被指向,所以它会被gc认为是垃圾就会被释放掉,什么是gc呢,gc就是虚拟机里的Garbage Collection垃圾回收器
05 小结
- new关键字:表示向内存申请空间,也表示实例化一个对象,创立一个对象。
- 一个对象在内存中的大小,由该对象的所有属性所占的内存大小的总和。引用类型变量在32位系统上占4个字节,在64位系统上占8个字节。加上而外的对象隐性数据所占的大小。
- 相同的类型才可以赋值
- 不同的引用,指向同一个对象,任何一个引用改变对象的值,其它引用都会反映出来。
- 编程时要注意的问题,在确定不使用对象时,要尽早释放对象:引用=null
- 当一个堆中的对象没有被任何引用变量所指向时,该对象会被JVM 的 GC 程序认为是垃圾对象,从而被回收。
作者:赵Sir
原文链接:https://juejin.im/post/5e19c67b6fb9a02fcf18d778#heading-0
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 没有对象怎样面向对象编程呢?真让人头秃!