资讯专栏INFORMATION COLUMN

java中的面向对象

shusen / 1740人阅读

摘要:在栈中运行方法,当看到时,会自动把类加载到方法区当看到局部变量时,会在栈中开辟一块空间当看到时,会在堆内存中开辟空间,并将堆内存中的对应地址赋值给还会拿到方法区的地址值指向方法区。变量指向堆内存中的空间,寻找方法信息,去执行该方法。

类对象的格式

类名 标识符(变量名/对象的引用)= new 类名();

public class Tool {
    public  static  double Sum(double [] scores){
        double sum=0.0;
        for( int i = 0; i
面向过程和面向对象的区别

1.关注点不同:

面向过程:关心的是事件中的每一步功能怎么做;

面向对象:关心的是事件中的每一步功能有没有什么对象已经实现好了,然后直接拿来使用

2.效率不同:

面向过程:因为自己要参与每一步的实现,所以效率比较慢;

面向对象:因为大多数都是调用别人已经实现好的功能,所以效率比较高;

3.开发质量:

面向过程:因为是自己一步步实现的,大多数情况会有地方出现问题;

面向对象:因为大多数都是调用别人写好的功能,而这些功能一般都进过大量的验证,质量有保证;

4.使用范围不同:

面向过程:适合解决需求简单的问题;

面向对象:更适合解决复杂的需求;

面向对象是基于面向过程的;

面向对象代码例子:

public class Car {
    String color;
    void  run(){
        System.out.println(color+"颜色的车在行驶");
    }
}
class Test{
    public static void  main(String[] args){
        Car car = new Car();
        car.color="红";
        car.run();
    }
}
一个对象调用一个方法内存图


首先JVM运行一个class文件时,使用类加载器先将Demo类加载到方法区,然后main方法压栈(入栈)。

·在栈中运行main方法,当jvm看到Phone时,会自动把Phone类加载到方法区;当看到局部变量p时,会在栈中开辟一块空间;当看到new Phone()时,会在堆内存中开辟空间,并将堆内存中的对应地址0x123赋值给p;还会拿到方法区的地址值指向方法区。

·在main方法中运行到给对象p的属性赋值时,通过地址去堆内存中找到相应属性并赋值,运行p.sendMessage()这一步时,也是根据地址值去堆内存中找到相应的对象,再用对象去方法区中找到sendMessage()方法,然后将sendMessage()方法压到栈中(入栈),调用完毕sendMessage()方法会出栈。

·main方法运行结束后会出栈。

通过以上步骤描述,我们可以理解,在栈内存中运行的方法,遵循"先进后出,后进先出"的原则。变量p指向堆内存中的空间,寻找方法信息,去执行该方法。

两个对象调用同一个方法内存图


对象调用方法时,根据对象中方法标记(地址值),去类中寻找方法信息。这样哪怕是多个对象,方法信息只保存一份,节约内存空间。

一个引用,作为参数传递到方法中内存图


引用类型作为参数,传递的是地址值。

局部变量和成员变量

成员变量:直接定义在类中的变量--直接定义在类的变量。

局部变量:定义在类中局部位置(函数中)的变量--直接定义在函数的变量。

public class test {
    int a = 10;//成员变量
    public static void   main(String[] args ){
        int a =100;//局部变量
        System.out.println("a:"+a);//100
    }
}

区别

1.从定义的位置上:

局部变量:函数里面

成员变量:直接定义在类中

2.从内存上看:

局部变量:栈内存中

成员变量:堆内存中

3.从生命周期(指的是从分配空间到回收空间)上看:

局部变量:随着函数进栈执行,开始分配空间;函数之行结束出栈,空间被回收

成员变量:随着创建对象开始分配空间;随着对象的空间变成垃圾空间被回收而被回收;

4.从使用范围上:

局部变量:仅限于定义它的局部范围里面(比如函数中)

成员变量:整个类中

5.从初始值上看:

局部变量:没有默认值,使用前必须先要初始化

匿名对象

匿名对象:没有名字的对象;

匿名对象,就是创建对象后,不将引用赋值给任何变量;

匿名对象虽然没有那个变量持有它的引用,但是对象创建出来的时候,自己是知道自己的引用,这个时候可以使用它;

匿名对象的应用

如果一个对象只需要作为参数被使用一次,就可以定义为匿名对象,好处是在那行代码执行结束后,不会继续占有内存空间;

开源地址

开源项目地址:https://github.com/371854496/...

java学习资料:https://github.com/371854496/...

各位觉得还阔以的话,点下Star,分享不易,thank you!

公众号 全战开花

获取更多技术干货

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/75982.html

相关文章

  • Java学习笔记——面向对象

    摘要:对象既是该类事物实实在在存在的个体。类与对象的关系图类就是汽车汽车就是堆内存中的对象。成员变量成员变量成员函数的车,轮胎数个,跑起来了对象的创建创建对象中创建对象,使用关键字在堆内存中开辟了空间,产生了一个实体。 声明:本文首发于我的个人微信公众号【Java编程社区】,查看更多文章与学习资源请移步我的公众号Java编程社区 万物皆对象 学习Java,我们都听过这句话:万物皆对象。那么什...

    DoINsiSt 评论0 收藏0
  • 谈谈我所理解的面向对象

    摘要:众多面向对象的编程思想虽不尽一致,但是无论哪种面向对象编程语言都具有以下的共通功能。原型编程以类为中心的传统面向对象编程,是以类为基础生成新对象。而原型模式的面向对象编程语言没有类这样一个概念。 什么是面向对象?这个问题往往会问到刚毕业的新手or实习生上,也是往往作为一个技术面试的开头题。在这里我们不去谈如何答(fu)好(yan)问(guo)题(qu),仅谈谈我所理解的面向对象。 从历...

    avwu 评论0 收藏0
  • Java知识点总结(面向对象

    摘要:知识点总结面向对象知识点总结面向对象面向对象概念是相对于面向过程而言,过程其实就是函数,对象是将函数和属性进行了封装。指向了该对象关键字代表对象。静态变量所属于类,所以也称为类变量成员变量存在于堆内存中。 Java知识点总结(面向对象) @(Java知识点总结)[Java, Java面向对象] [toc] 面向对象概念 是相对于面向过程而言,过程其实就是函数,对象是将函数和属性进行了封...

    itvincent 评论0 收藏0
  • 7. 初步理解面向对象 【连载 7】

    摘要:是一种典型的面向对象编程语言。这篇文章主要是来初步理解一下面向对象的思维为下面的内容先给一个基础。针对面向对象编程的更多内容,会在后面的文章里面详细解释。他们都称之为对象。之后,我们再用编程语言,把这种映射编写出来,就是的面向对象编程啦。 showImg(https://segmentfault.com/img/remote/1460000012983458?w=900&h=500);...

    keelii 评论0 收藏0
  • Java小白进阶笔记(3)-初级面向对象

    摘要:面向对象编程从不同的角度来看待计算机程序,它注重的是计算机所完成的任务,而非处理方式。传统的语言属于面向过程编程,语言属于面向对象编程。面向对象编程根据要解决的问题,可以抽象出如下对象客户银行卡现金票据等。 面向过程编程&面向对象编程 从面向过程到面向对象,不仅仅是编程方式的改变,更重要的是思维方式的改变。 面向过程编程按照顺序执行的一系列指令,通常是分析出解决问题所需要的步骤,然后用...

    AnthonyHan 评论0 收藏0
  • SegmentFault 技术周刊 Vol.32 - 七夕将至,你的“对象”还好吗?

    摘要:很多情况下,通常一个人类,即创建了一个具体的对象。对象就是数据,对象本身不包含方法。类是相似对象的描述,称为类的定义,是该类对象的蓝图或原型。在中,对象通过对类的实体化形成的对象。一类的对象抽取出来。注意中,对象一定是通过类的实例化来的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 马上就要到七夕了,离年底老妈老爸...

    李昌杰 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<