• Thinking in java(二)


    1.函数执行是JVM的内存加载问题:
    使用javac 启动编译器,检查源代码中是否有语法错误,没有错误会编译之后生成class文件。
    使用java 命令启动JVM,然后JVM会分配内存,把class文件加载内存中。class文件加载完成之后,开始在class文件中找main方法运行。

    2.注意:所有的函数都必须在栈内存中运行。
    而jvm只会运行处于栈内存顶部的函数。
    函数被加载到栈内存的动作,称为函数的压栈(入栈、进栈)。
    函数执行完之后就会从栈中消失(函数的弹栈,或者叫做出栈)

    3.一个函数没有返回值可以写return吗? 可以,为了快速结束函数;
    函数传参方式:按值传递和按引用传递;
    值的传递和引用的传递区别:在程序中如果把具体的一个值传递给其他的方法,那么在方法中只能操作传递过来的那个值。在程序中如果把某个地址传递给了其他的方法,这是在其他方法中获取到的是地址,那么通过地址就可以找到真实存放数据的空间,这是通过地址去操作同一个空间。

    4.函数的重载:一个类中的多个同名函数;参数列表不同(参数列表不同,主要针对的参数的个数,类型,顺序不同。)并且,重载和返回值类型没有关系。
    函数的重写:父类子类之间;子类中的方法具有父类中方法的相同的名称和参数类型;又被称为方法层面的多态.

    5.数组:数组表示的一串连续的存储空间;是一类容器
    数据类型[] 数组名 = new 数据类型[长度] ;
    Int [] arr = new int[10]; 如果不定义,整数数组默认值是0
    数据类型[] 数组名 = {值,值,值…….};

    二维数组:
    a) 格式:
    数据类型[][] 数组名 = new 数据类型[行的个数][每行中列的个数];
    b) 格式二:
    数据类型[][] 数组名 = {
    {值,值,值……..},
    {值,值,值……..},
    …….
    };
    c) 格式三:如
    int[][] arr = new int[3][];
    arr[0] = new int[2];
    arr[1] = new int[3];
    arr[2] = new int[4];

    多维数组:…
    6.JVM把内存划分成5片区域:(TODO:这一部分再JVM中回顾)
    栈内存:主要是用来运行函数的,函数定义的所有变量,在此内存开辟空间。
    在栈内存中定义的变量,不初始化,是不能直接使用的。
    注意:所有的函数都必须在栈内存中运行。
    而jvm只会运行处于栈内存顶部的函数。
    堆内存:在程序中使用new 关键字创建的所有东西,保存在堆内存中。
    堆内存中开辟的空间,不赋值,都会有默认的初始化数据。
    整数:默认是0
    小数 默认0.0.
    boolean 默认是false
    char 默认是 ‘u0000’

    方法区:JVM在加载class文件的时候,所有的class文件就要加载在这个内存中。
    本地方法区:主要是保存native关键字标注的方法
    寄存器:是给CPU使用的。

    7.数组常见问题:
    a) 数组下标越界:ArrayIndexOutOfBoundsException
    b) 空指针异常:NullPointerException;null常量,不能赋值给基本类型变量空间,可以赋值给引用类型变量空间。
    c) ClassCastException(类型转换异常)。多态
    注意:在Java中当被new出来的堆中的内存,没有任何一个引用指向它的时候,这时它就是一个垃圾,JVM就使用gc把当前这片内存清理。

  • 相关阅读:
    c#中out与ref的用法与区别
    一次不该出现的bug
    js弹出蒙版
    foreach中不能修改元素的值
    C#中使用正则表达式来过滤html字符
    细微之处才能显示水平
    js画直线 拓荒者
    XSLT模板转换XML文档 拓荒者
    怪异的JavaScript Date对象 拓荒者
    [转]C++ 笔记点滴 拓荒者
  • 原文地址:https://www.cnblogs.com/DiZhang/p/12545097.html
Copyright © 2020-2023  润新知