博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JVM学习03_new对象的内存图讲解,以及引出static方法(转)
阅读量:6119 次
发布时间:2019-06-21

本文共 1659 字,大约阅读时间需要 5 分钟。

  1. 目录

    1.   -=-讲解对象创建过程中,-=-堆内存和栈内存的情况

         -=-构造函数对类对象的成员变量的初始化过程

         -=-构造函数出栈

         -=-类的方法在不访问类对象的成员变量时造成的内存资源浪费怎么解决?

         -=-引出static方法

    2. 扯淡

      1. --明确概念:

      2.   -=-类:是对现实事物的抽象描述;举例:人,有年龄,姓名,高矮胖瘦等特征;有吃喝睡等行为动作;现实中的人由特征和行为组成{思想这种东东暂时还是不考虑吧}

        1. -=-怎么判别一个类里面时候需要有主函数mian():看这个类是否需要独立运行

        2. -=-描述事物的类有很多,有一个类来调用其他的描述事物的类就可以了,就像是不用给每一个居民家中都配一个警察一样

                       -=-有主函数main的类被称为启动类,也就是在JVM启动的时候就启动的类,启动之后便进去main()中执行语句

                        -=-想描述具体的事物就需要给出具体的形象,比如在校园里面看到一个很漂亮的姑娘,你像被人形容的时候不能和别人说:“我今天在学校里面看到一个女的”。谁听了都想抽你

                        -=-而是应该具体形容:"我今天在学校里面看见一个姑娘,笑靥如花,身材苗条,唇白齿红,她是院系的,我还要了她的手机号码。。。"这样谁听了谁都想问你要手机号。。。。

                        -=-那么怎么把一个抽象的描述人的类具体化呢(也称实例化,就是创造一个实实在在的 人)-java中使用new关键字实现

                        -=-比如 new Person(21,"笑靥如花,唇白齿红,身材高挑");好吧这就是创建一个人的过程。这个实例化(把类具体化的过程)的产物就是创建一个Person类的对象(活生生的人)

        3.   -=-所以人们有时候调侃程序员:没有女朋友怎么办?new 一个对象就可以了、、、、

           -=-可是这个人连个名字都没有,一些给一个唯一的名字吧--->Person p=new Person();这句话就是创建了Person类型的变量[引用类型,还有就是数组和String类型]。比如说:人民一听大众就知道:哦,这是一个汽车类型;一听卡西欧,就知道是手表类型

        4.  现在来说一下

          1.  Person p=new Person();

          2.  [引用数据类型   类型变量指向创建的该类型的对象  = 初始化的值[对象的地址,必须要运行时候才能确定] ]【那些数据在编译时候和运行时候才能确定?】

          3. int i=6;

          4. [基本数据类型  变量 = 初始化值[此处在编译时候就可以确定]]

          5. 好了,现在我们创建好了一个人之后就要像别人描述了:balabalba{也即是创建对象可以被别的类调用和访问}

    3.  --下面才是重点:上面都是。。。。

       --new Person() 根据下面的代码创建的吗?——NO,不是根据.java文件,而是.class文件,这个才是可以被JVM加载和运行的

       --那为什么写下面的.java格式的代码啊?——因为.java文件是给人看的,.class文件一般人都看不懂,,,原来是这样,我智商被鄙视了

    4. 下面具体根据内存图来小小看下 Person p=new Person("周迅",21);这句话到底发生了什么?

      1. 贴出代码

        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        16
        17
        18
        19
        20
        21
        22
        23
        24
        25
        26
        27
        public
        class
        Test {
         
                
        public
        static
        void
        main(String[] args) {
                    
        Person p1=
        new
        Person(
        "周迅"
        ,
        21
        );
                    
        p1.speak();
                     
                
        }
        }
         
         
        class
        Person{
             
            
        private
        String name;
            
        private
        int
        age;
         
            
        public
        Person(String  name,
        int
        age) {
                
        this
        .name=name;
                
        this
        .age=age;
            
        }
            
        public 
        void
        speak(){
                 
                
        System.out.println(
        "周迅在说话"
        );
            
        }
             
        }
         
        //执行结果:周迅在说话
      2.  
      3.  
      4.  

又看了毕向东老师的教程

 

 

 

转载地址:http://nhpka.baihongyu.com/

你可能感兴趣的文章
jQuery最佳实践
查看>>
centos64i386下apache 403没有权限访问。
查看>>
vb sendmessage 详解1
查看>>
jquery用法大全
查看>>
Groonga 3.0.8 发布,全文搜索引擎
查看>>
PC-BSD 9.2 发布,基于 FreeBSD 9.2
查看>>
网卡驱动程序之框架(一)
查看>>
css斜线
查看>>
Windows phone 8 学习笔记(3) 通信
查看>>
重新想象 Windows 8 Store Apps (18) - 绘图: Shape, Path, Stroke, Brush
查看>>
Revit API找到风管穿过的墙(当前文档和链接文档)
查看>>
Scroll Depth – 衡量页面滚动的 Google 分析插件
查看>>
Windows 8.1 应用再出发 - 视图状态的更新
查看>>
自己制作交叉编译工具链
查看>>
Qt Style Sheet实践(四):行文本编辑框QLineEdit及自动补全
查看>>
[物理学与PDEs]第3章习题1 只有一个非零分量的磁场
查看>>
深入浅出NodeJS——数据通信,NET模块运行机制
查看>>
onInterceptTouchEvent和onTouchEvent调用时序
查看>>
android防止内存溢出浅析
查看>>
4.3.3版本之引擎bug
查看>>