ooday10_00面向对象总结--内存管理

精华笔记:

  1. 内存管理 :JVM来管理的

    • 存储new出来的的对象(包括实例变量)
    • 垃圾:没有任何引用指向的对象
      垃圾回收器(GC)不定时到内存中清扫垃圾,回收过程中是透明的(看不到的);
      并不一定一发现垃圾就自动回收,调用System.gc()可以建议JVM尽快调度GC来回收
    • 实例变量的声明周期:
      • 创建对象时,存储在堆中,对象被回收时,一并被回收。
    • 内存泄漏:不再使用的对象没有被及时的回收,严重的泄漏会导致系统的崩溃,建议:不再使用的对象应及时将引用设置为null
    • 存储正在调用的方法中的局部变量(包括方法的参数)

    • 调用方法时,会为该方法在栈中分配一块对应的栈帧,栈帧中存储局部变量(包括方法的参数),方法调用结束时,栈帧被自动清除,局部变量一并被清除。

    • 局部变量的生命周期:
      ​ 调用方法时存储在栈中,方法调用结束时与栈帧一并被清除

  • 方法区:

    • 存储.class字节码文件(包括静态变量、所有方法)
    • 方法只有一份,通过this来区分具体的调用对象

补充:

  1. 实例变量和局部变量的区别:

    • 实例变量:
      • 写在类中、方法外
      • 创建对象时存储在堆中,对象被回收时一并被回收
      • 有默认值
    • 局部变量:
      • 写在方法中
      • 调用方法时存储在栈中,方法调用结束时与栈帧一并被清除
      • 没有默认值
    Aoo o = new Aoo();-------------a=0
    o.show(5);---------------------b=5
    
    class Aoo{
        int a;
        void show(int b){
            int c;
            System.out.println(a); //0
            System.out.println(b); //5
            System.out.println(c); //发生编译错误
        }
    }
    
  2. 面试题:

    • 问:java是值传递还是引用传递?
    • 答:java只有值传递,基本类型传递的是具体的数,引用类型传递的是具体的地址
  3. 文档注释:

    • 为功能性注释,只在三个地方使用,分别是类上、方法上和常量上
    //文档注释是功能性注释,只在三个地方使用,分别是类上、方法上和常量上
    /**
     * 在类上使用时用于说明当前类的设计目的和整体功能介绍
     * 例如: 此类用于演示java文档注释
     *
     * @author 作者WKJ
     */
    public class ApiDocDemo {
        /**
         * sayHi方法中使用的问候语
         */
        public static final String INFO = "你好!";
    
        /**
         * 为指定用户添加问候语
         * @param name 指定用户的名字
         * @return 含有问候语的字符串
         */
        public String sayHi(String name){
            return INFO+name;
        }
    }
    
  4. getter/setter:

    class Student{
        private String name;
        private int age;
    
        public String getName(){ //getter获取
            return name;
        }
        public void setName(String name){ //setter设置
            this.name = name;
        }
        public int getAge(){ //getter获取
            return age;
        }
        public void setAge(int age){ //setter设置
            this.age = age;
        }
    }
    
    //getter和setter的演示
    public class GetterSetterDemo {
        public static void main(String[] args) {
            Student zs = new Student();
            zs.setName("zhangsan");
            zs.setAge(25);
            System.out.println(zs.getName());
            System.out.println(zs.getAge());
    
            Student ls = new Student();
            ls.setName("lisi");
            ls.setAge(24);
            System.out.println(ls.getName());
            System.out.println(ls.getAge());
        }
    }
    

潜艇游戏---------------共300到400行代码

不要求:特别特别熟练得写下来

最基本要求:坑坑巴巴写出来就行、哪怕能看着笔记写出来

面向对象要求:复用性

这个项目我还有一些地方没有搞懂,搁置它

posted @ 2022-03-20 10:24  Y_Zoran  阅读(20)  评论(0)    收藏  举报
-->