面向对象_对象的内存分析

一、new关键字详解

    1、new关键字表示创建一个对象
    2、new关键字表示实例化对象
    3、new关键字表示申请内存空间

  注意:如果使用一个没有申请内存空间的对象,会报空指针异常:java.lang.NullPoingerException

 

 

二、对象内存分析的四种情况

  1、对象内存分析第一种情况

  面向对象_对象的内存分析_第1张图片

   面向对象_对象的内存分析_第2张图片

 1 public class sixtyThree {
 2     public static void main(String[] args) {
 3         Dog d = new Dog();//声明一个对象并且实例化对象
 4         
 5         //给对象的属性赋值
 6         d.name = "小白";
 7         d.age = 4;
 8         //执行对象的方法
 9         d.say();
10     }
11 
12 }
13 class Dog{
14     String name;
15     int age;
16     void say(){
17         System.out.println("我的名字是:"+name+",我的年龄是:"+age);
18     }
19 }

 

 

  2、对象内存分析第二种情况,在内存中创建多个对象

    面向对象_对象的内存分析_第3张图片

    面向对象_对象的内存分析_第4张图片

 1 public class sixtyThree {
 2     public static void main(String[] args) {
 3         Dog d1 = new Dog();//声明一个对象并且实例化对象
 4         
 5         //给对象的属性赋值
 6         d1.name = "小白";
 7         d1.age = 4;
 8         //执行对象的方法
 9         d1.say();
10         
11         
12         //--------------------------------
13         Dog d2 = new Dog();
14         d2.name = "小黑";
15         d2.age = 5;
16         d2.say();
17     }
18 
19 }
20 class Dog{
21     String name;
22     int age;
23     void say(){
24         System.out.println("我的名字是:"+name+",我的年龄是:"+age);
25     }
26 }

 

 

  3、对象内存分析第三种情况,对象之间的赋值(类型相同的对象才可以)

    面向对象_对象的内存分析_第5张图片

 1 public class Object_Memory {
 2     public static void main(String[] args) {
 3         Car c=new Car();
 4         c.color="blue";
 5         c.run();
 6 
 7 
 8         //两个对象直接的赋值(地址值)的关系
 9         Car c1=new Car();
10         c1.num=5;
11         Car c2=c1;//把c1赋给c2  c2就和c1指向了同一个对象  就想两个人用同一台电脑,这叫多个引用指向了同一个对象
12         c2.color="green";
13         c1.run();//结果是  5和green
14     }
15 
16 }
17 class Car{
18     String color="red";
19     int num=4;
20     
21     void run(){
22         System.out.println(color+"...."+num);
23     }
24 }

 

 

  4、第四种情况

    面向对象_对象的内存分析_第6张图片

    面向对象_对象的内存分析_第7张图片

 1 public class sixtyThree3 {
 2     public static void main(String[] args) {
 3         Doggg d1 = new Doggg();//声明一个对象并且实例化对象
 4         
 5         d1.name = "小白";
 6         d1.age = 4;
 7         d1.say();
 8         
 9         Doggg d2 = new Doggg();
10         d2.name = "小黑";
11         d2.age = 6;
12         d2.say();
13         
14         d2 = d1;//把d1赋值给d2(赋值的是堆内存地址值)
15         d2.name = "嘿嘿";
16         d2.say();
17         d1.say();
18         
19     }
20 
21 }
22 class Doggg{
23     String name;
24     int age;
25     void say(){
26         System.out.println("我的名字是:"+name+",我的年龄是:"+age);
27     }
28 }

 

 

三、作业

  1、根据面向对象思想,设计一个猪类

public class SixtySix {

    public static void main(String[] args) {
        Pig p = new Pig();
        p.age = 4;
        p.name = "包包pig";
        p.weight = 120;
        p.say();
        p.eat();
        p.gong();    
    }
}
class Pig{
    String name;
    int age;
    int weight;
    void say(){
        System.out.println("我的年龄是:"+age+",我的名字:"+name+",我的体重:"+weight);
    }
    void eat(){
        System.out.println("吃猪饲料...........");
    }
    void gong(){
        System.out.println("拱地..............");
    }
}

 

  

  2、根据面向对象思想,设计一个美女类

public class SixtySeven {
    public static void main(String[] args) {
        Girl g = new Girl();
        g.name = "包包pig";
        g.type = "温柔的女神";
        g.datingIndex = 5;
        g.desc();
        g.coquetry();
    }
}
class Girl{
    String name;
    String type;//女孩类型
    int datingIndex;//约会指数
    //自我介绍
    void desc(){
        System.out.println("我的名字叫"+name+",我是属于"+type+",约会指数"+datingIndex+"星;");
    }
    void coquetry(){
        System.out.println("讨厌..............");
    }
    
}

 

 

 

 

你可能感兴趣的:(面向对象)