资讯专栏INFORMATION COLUMN

Java知识点总结(内存分析)

lvzishen / 1616人阅读

摘要:知识点总结内存分析知识点总结面向对象对象内存类是创建对象的模板对象的使用时通过引用进行的基本数据类型直接赋值,引用类型传递的是一个地址栈存放局部变量堆存放出来的对象方法区存放类的信息代码变量常量池字符串常量等张三王武李四垃圾回收机制对象空间

Java知识点总结(内存分析)

@(Java知识点总结)[Java, Java面向对象]

[toc]

对象内存 类是创建对象的模板

Java对象的使用时通过引用进行的
基本数据类型直接赋值,引用类型传递的是一个地址
栈:存放局部变量
堆:存放new出来的对象
方法区:存放类的信息(代码) 、static变量、常量池(字符串常量)等...

Student s1 = new Student();
s1.name="张三";
s1.study();
s1.sayHello("王武");
 
Student s2 = new Student();
s2.age = 18;
s2.name="李四";

垃圾回收机制(Garbage Collection)

对象空间的分配:使用new关键字即可

对象空间的释放:将对象赋值null即可。垃圾回收器将负责回收所有"不可达"对象的内存空间

要点:程序员无权调用垃圾回收器
程序员可以通过System.gc() 通知GC运行,但是Java规范并不能保证立即运行
finalize方法,是java提供程序员用来释放对象,或资源的方法,但是尽量少用

一个对象没有被引用,就会被Java垃圾回收机制回收

static内存

在类中,用static声明的成员变量为静态变量,或者叫做:类属性,类变量,从属于类,给对象分配的内存里没有

它为类的公用变量,属于类,被该类的所有实例共享,在类被载入时被显示初始化

对于该类的所有对象来说,static成员变量只有一份,被该类的所有对象共享

可以使用"对象.类属性"来调用。不过一般都是用"类名.类属性"

static变量置于方法区中

用static声明的方法为静态方法

类名.方法名调用
在调用该方法时,不会将对象的引用传递给它,所以在static方法中,不可访问非static的成员

静态初始化代码块

static{

...

}

如果希望加载后,对整个类进行某些初始化操作,可以使用static初始化块

是在类初始化时执行,不是在创建对象时执行

静态初始化块中不能访问非static成员

执行顺序:上溯到Object类,先执行Object的静态初始化块,再向下执行子类的静态初始化块,直到我们的类的静态初始化块为止

多态内存

多态性是OOP的一个重要特性,主要是用来实现动态联编的,换句话说,就是程序的最终状态只有在执行过程中才被决定而非在编译期间就决定了。

这对于大型信息来说能提高系统的灵活性和扩展性

引用变量的两种类型:

编译时类型 (模糊一点,一般是一个父类)
由声明时的类型决定

运行时类型(运行时,具体哪个子类就是哪个子类)
由实际对应的对象类型决定

多态的存在要有3个必要条件:

要有继承

要有方法重写

父类引用指向子类对象

子类如果重写了父类中的方法,方法调用的时候与实际类类型相绑定(传递的隐式参数this指向的开辟内存空间的类的对象,而不是父类的对象)

public class Test {
  public static void testAnimalVoice(Animal c) {
    c.voice();
    if (c instanceof Cat) {
     ((Cat) c).catchMouse();
    }
  }
 
  public static void main(String[] args) {
    Animal a = new Cat();
    Cat a2 = (Cat) a;
    testAnimalVoice(a);
  }
}
 
class Animal {
  void voice() {
    System.out.println("发出动物的叫声");
  }
}
 
class Cat extends Animal {
  private String name = "Tom";
  void catchMouse() { //方法存在隐式参数this和super
    super.voice();
    System.out.println(this.name+"抓老鼠");
  }
}

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

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

相关文章

  • 内存 问题- 收藏集 - 掘金

    摘要:然而,中依然有可能发生内存泄漏。所以你的安卓快速定位解决内存泄漏掘金昨天是个好日子,程序员的节日,在这里给所有的程序员送上一份迟到的祝福。应用内存泄漏的定位分析与解决策略掘金,大家好,我是。 Android 性能优化之巧用软引用与弱引用优化内存使用 - Android - 掘金前言: 从事Android开发的同学都知道移动设备的内存使用是非常敏感的话题,今天我们来看下如何使用软引用与弱...

    TIGERB 评论0 收藏0
  • 你和阿里资深架构师之间,差的不仅仅是年龄(进阶必看)

    摘要:导读阅读本文需要有足够的时间,笔者会由浅到深带你一步一步了解一个资深架构师所要掌握的各类知识点,你也可以按照文章中所列的知识体系对比自身,对自己进行查漏补缺,觉得本文对你有帮助的话,可以点赞关注一下。目录一基础篇二进阶篇三高级篇四架构篇五扩 导读:阅读本文需要有足够的时间,笔者会由浅到深带你一步一步了解一个资深架构师所要掌握的各类知识点,你也可以按照文章中所列的知识体系对比自身,对自己...

    huaixiaoz 评论0 收藏0
  • Java学习路线总结,搬砖工逆袭Java架构师(全网最强)

    摘要:哪吒社区技能树打卡打卡贴函数式接口简介领域优质创作者哪吒公众号作者架构师奋斗者扫描主页左侧二维码,加入群聊,一起学习一起进步欢迎点赞收藏留言前情提要无意间听到领导们的谈话,现在公司的现状是码农太多,但能独立带队的人太少,简而言之,不缺干 ? 哪吒社区Java技能树打卡 【打卡贴 day2...

    Scorpion 评论0 收藏0

发表评论

0条评论

lvzishen

|高级讲师

TA的文章

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