Java对于内存分析的学习

1.Java内存分配:
    1.1:栈:存放局部变量,栈帧。使用效率最高。
    1.2:堆:New出来的东西。使用效率比栈低点。
    1.3:方法区:存放Class文件,静态区,常量池。使用效率最低。

2.一个对象的内存分配
    eg:public static void main(String[] args) {
        //创建一个对象
        Student1 stu1=new Student1();
        //用对象调用方法
        stu1.setSname("Lucy");
        stu1.setSage(70);
        System.out.println("姓名:"+stu1.getSname()+",年龄:"+stu1.getSage());
    }

     

3.多个对象的内存分配图:
eg:public static void main(String[] args) {
        Student1 stu1=new Student1();
        stu1.setSname("Jack");
        stu1.setSage(17);
        
        Student1 stu2=new Student1();
        stu2.setSname("Tom");
        stu2.setSage(18);
        
        System.out.println("姓名:"+stu1.getSname()+",年龄:"+stu1.getSage());
        System.out.println("姓名:"+stu2.getSname()+",年龄:"+stu2.getSage());
    }

     

4.值传递:

方法的参数是基本数据类型,叫值传递。值传递传的是变量的值,方法中对值进行改变,方法执行完了后,传递的变量的值是不变。
    eg:/**
     * 交换两个数方法
     */
    public void chageNum(int num1,int num2) {//num1=8,num2=10
        int temp=num1;
        num1=num2;
        num2=temp;
    }

        public static void main(String[] args) {
        int a=8;
        int b=10;
        
        System.out.println("a="+a+",b="+b);//a=8,b=10
        //创建一个对象
        Student2 stu1=new Student2();
        //用对象调用交换两个数的方法
        stu1.chageNum(a, b);
        System.out.println("a="+a+",b="+b);//a=8,b=10
    }

     

5.引用传递:

方法的参数是引用数据类型,叫引用传递。引用传递传的内存地址,在方法中对值改                变,方法执行完后,值也改变。
   eg:/**
     * 引用传递:改变学生对象的属性方法
     */
    public void changeStu(Student2 stu) {//stu=stu2=0x01
        stu.setSname("张三");
        stu.setSage(88);
    }

public static void main(String[] args) {
        Student2 stu2=new Student2("aa", 11);
        System.out.println("姓名:"+stu2.getSname()+",年龄:"+stu2.getSage());//aa,11
        //用对象调用方法改变对象属性
        stu2.changeStu(stu2);
        System.out.println("姓名:"+stu2.getSname()+",年龄:"+stu2.getSage());//张三,88
    }

6.数据的内存分析
    6.1:基本类型的数组:
    eg:public static void main(String[] args) {
        int[] ages=new int[5];
        ages[0]=19;
        ages[1]=22;
        ages[2]=23;
        ages[3]=28;
        ages[4]=35;
        
        for (int i = 0; i < ages.length; i++) {
            System.out.println(ages[i]);
        }
    }
     

    6.2:对象数组内存分配
        eg:public static void main(String[] args) {
        Student3[] stus=new Student3[3];
        
        stus[0]=new Student3();
        stus[0].setSname("a1");
        stus[0].setSage(19);
        
        stus[1]=new Student3();
        stus[1].setSname("a2");
        stus[1].setSage(20);
        
        stus[2]=new Student3();
        stus[2].setSname("a3");
        stus[2].setSage(21);
        
        for (int i = 0; i < stus.length; i++) {
            //System.out.println(stus[i]);
            System.out.println(stus[i].getSname()+"\t"+stus[i].getSage());
        }
    }

         

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值