科普项:对 java 基础的总结

来源:互联网 发布:阿里云如何更换公网ip 编辑:程序博客网 时间:2024/06/03 23:46
虽然我的第一门开发语言是 c c++, 但是自己的启蒙开发语言应该是 java 了,因为在此之前除了 java 没有哪门开发语言我敢用"会"来形容自己,少废话,步入正题.
    1.JVM的的内存分区:
    可能一般情况下学习 java 的时候书里以及教程首先讲的是什么是类什么是对象之类的,但是个人总感觉有些话书里说的是没毛病,但是缺点是说的不够"透",用"人"是类,"张三"是一个具体对象这种说法,这种打比方的说法确实通俗易懂,但是具体操作起来就和心灵鸡汤一样中听不中用,那就先讲 JVM 运行时的内存分区吧如果这个理解了所有 java 的套路也就清楚了,
    这里说法有很多我只说我感觉比较有道理的说法,首先 JVM 的内存主要分三个区域,
        1栈区(负责存储局部变量,其中局部变量主要是指引用),
        2堆区(负责存储"对象",说白了对象就是所有 "new" 出来的东西),
        3代码区(代码区也分两部分第一部分就是咱们类的执行逻辑,这一部分在类加载完成之后就不变了,另一部分就是数据区数据区里面装的是所有的常量静态变量以及字符串常量池,这个区域在类初始化时就确定下来了)
        ps: 无根据的猜测:其中栈区在多线程的时候可能会有多个(一个线程对应一个栈区),每个栈区还可能会记录程序在每个类的执行位置.
            堆区可以暂时理解为所有 new 出来的东西,因为还有反射以及反序列化这种东西的存在
            String常量池只代表例如 String a = "happy";这种只带引号格式字符串,如果是例如String b = new String("b");这种格式的创建的字符 串仍然是在堆区的,如果看不懂就无视吧= =.
    2.回头再讲什么是类什么是对象:
    在现实中一个物体或者一件事是有无限的细节状态和属性的,但是在解决实际问题的时候我们却只关心其中的一个或者几个,打个比方,你去银行取钱,这时对于银行卡(对象),就只有,账号(成员变量1),密码(成员变量2),余额(成员变量3)等属性,而取钱这种行为(方法),会造成余额(成员变量3)减少,而银行卡是什么颜色什么材质什么图案这些我们都不关心,银行卡(类)里的账号密码余额我们不想让别人知道,因此要私有化,以上所述的东西就是简单的类与对象的一个关系,类就是在解决一个具体问题的时候把对象的状态,属性,抽象为成员变量,将对象的行为抽象为"方法"的一个东西,而局部变量由于不需要像银行卡的账号密码般那样长期保存因此都是有生存期的一般完成任务就没了.
    3.多态:
        多态可以说是随着继承自然而然产生的一个东西,打个比方冷水和热水都是"水"的子类,在有多态的情况下你可以拿水杯装冷水和热水,如果没有多态的的话,就只能拿"冷水杯"装冷水,拿"热水杯"装热水,拿"水杯"装"水",啥?"冷水""热水"不都是水吗?如果没有多态的话,那冷水就只是冷水,热水就只是热水,水就只是水,机器才不知道那么多,综上,多态的根本目的是弱化"引用"和"对象"的关系,这也符合我们的认知常识
    4.辣鸡回收: java 比吸加加好学的一个主要原因就是爪哇可以自动释放内存,其实什么时候释放这个问题并不难,难的问题是该"释放谁",如果一个对象正在使用的时候被释放了那执行的时候就直接空指针异常了,这里我比较印象深刻的辣鸡回收算法主要有两个
        第一个叫引用计数法其实很简单就是给每个对象一个字段用来记录有多少个引用指向它如果多一个指向它就加一否则就减一,当减到0的时候就可以被回收,这个算法主要的缺点是如果两个对象互相引用,并且他们游离在堆内存中就永远不会被回收了因此并不完美,但是算法简单,另一个回收算法就是判断每个对象从最开始的主函数是否可达,这个一想就很复杂很耗时我就没去追究细节,反正他们很厉害就可以释放内存了 = =,面向对象的东西不要过于执着于细节.关键是会用.
    5.好累,不想写了
原创粉丝点击