从零开始学JAVA:从插入排序解析类执行过程(内存)

一.类的属性:

1.属性(field),或者叫成员变量

2.属性用于定义该类或该类对象包含的数据或者说静态属性
3.属性的作用范围是整个类体
4.**在定义成员变量时,可以对其初始化,如果不对其初始化,Java使用默认的值对其初始化:
数值:0、0.0
字符:\u0000(Unicode编码中对应的0)
boolean:false
所有引用类型:null**
5.属性定义格式:

[修饰符] 属性类型 属性名 = [默认值];

二.程序执行过程的内存分析

import java.util.Scanner;
public class Test
{
    public static void main(String[] args)
    {
        int [] a = new int [11];
        int n;
        Scanner in = new Scanner(System.in);
        System.out.println("请输入10个数据");
        for (int i = 1 ; i <= 10 ; i ++)
        {
            a [i]  = in.nextInt();
        }
        System.out.println("原始排序");
        for (int i = 1 ; i < 11 ; i ++)
        {
            System.out.print(a[i]+" ");
        }
        System.out.println();
        Insort sort = new Insort(a , 10);
        a = sort.insort();
        System.out.println("排列后的顺序:");
        for (int i = 1 ; i < 11 ; i ++)
        {
            System.out.print(a[i]+" ");
        }
    }
}

class Insort //自定义类Insort
{
    int a[];
    int n;

    Insort(int _a[], int _n)  //将数组和排列的数个数传入Insort中
    {
        a = _a;
        n = _n;
    }

    int[] insort() {
        int j;
        for (int i = 2; i <= n; i++) //数值下标从2开始,a[0]监视哨
        {
            a[0] = a[i];//给监视哨赋值
            j = i - 1;//确认要比较的元素最右边的位置
            while (a[0] < a[j])
            {
                a[j + 1] = a[j];//数据右移
                j--;//移向左边一个未比较的数
            }
            a[j + 1] = a[0];//在确定位置插入a[i]
        }
    return a;
    }
}

假设 输入的数是:9 8 2 1 3 4 5 6 7 10 3

当程序执行到

        Insort sort = new Insort(a , 10);

内存分析示意图: 


为了更方便理解 用下面这个代码

class Point {
    double x ,y ,z;
    Point(double _x, double _y, double _z){
        x = _x;
        y = _y;
        z = _z;
    }
    void setX(double _x){
        x = _x;
    }
    void setY(double _y){
        y = _y;
    }
    void setZ(double _z){
        z = _z;
    }
    double getDistanace(Point p){
    return (x - p.x)*(x - p.x) + (y - p.y) *( y - p.y) + (z - p.z) * (z - p.z);
    }
}
public class Test{
    public static void main(String[] args) {
        Point p1 = new Point(1.0,2.0,3.0);
        Point p2 = new Point(0.0,0.0,0.0);
        System.out.println(p.getDistanace(p2));
        p1.setX(5.0);
        p1.setY(3.0);
        p1.setZ(2.0);
        System.out.println(p.getDistanace(new Point(1.0,1.0,1.0)));
        System.out.println(p1.x);
        p.x = 300.0;
        System.out.println(p1.x);
    }
}	

当执行到

        System.out.println(p.getDistanace(p2));


p这个临时变量作为传入到getDistance。p中的值是传入getDistance这个方法的P2

方法执行后返回一个14.0 到stack内存中,在系统接受后,两个临时变量被回收

        p1.setX(5.0);
        p1.setY(3.0);
        p1.setZ(2.0);


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值