【Java】构造器及其内存分析

构造器
  1. package com.star2;
  2. /**
  3.  * @Auther: Starshine
  4.  */
  5. public class Person {
  6.     //构造器:没有任何参数的构造器我们叫做:空参构造器--》空构造器
  7.     public Person(){
  8.         /*age = 19;
  9.         name = "lili";
  10.         height = 169.5;*/
  11.     }
  12.     //属性:
  13.     String name;
  14.     int age;
  15.     double height;
  16.     //方法:
  17.     public void eat(){
  18.         System.out.println("我喜欢吃饭");
  19.     }
  20. }

  1. package com.star2;
  2. /**
  3.  * @Auther: Starshine
  4.  */
  5. public class Test {
  6.     //这是一个main方法,是程序的入口:
  7.     public static void main(String[] args) {
  8.         //创建一个Person类的具体的对象/实例/实体:
  9.         /*
  10.         创建对象的过程:
  11.         1.第一次遇到Person的时候,进行类的加载(只加载一次)
  12.         2.创建对象,为这个对象在堆中开辟空间
  13.         3.为对象进行属性的初始化动作
  14.         new关键字实际上是在调用一个方法,这个方法叫构造方法(构造器)
  15.         调用构造器的时候,如果你的类中没有写构造器,那么系统会默认给你分配一个构造器,只是我们看不到罢了。
  16.         可以自己显式 的将构造器编写出来:
  17.         构造器的格式:
  18.         [修饰符] 构造器的名字(){
  19.         }
  20.         构造器和方法的区别:
  21.         1.没有方法的返回值类型
  22.         2.方法体内部不能有return语句
  23.         3.构造器的名字很特殊,必须跟类名一样
  24.         构造器的作用:不是为了创建对象,因为在调用构造器之前,这个对象就已经创建好了,并且属性有默认的初始化的值。
  25.         调用构造器的目的是给属性进行赋值操作的。
  26.         注意:我们一般不会在空构造器中进行初始化操作,因为那样的话每个对象的属性就一样了。
  27.         实际上,我们只要保证空构造器的存在就可以了,里面的东西不用写
  28.          */
  29.         Person p = new Person();
  30.         System.out.println(p.age);
  31.         System.out.println(p.name);
  32.         System.out.println(p.height);
  33.         Person p2 = new Person();
  34.         System.out.println(p2.age);
  35.         System.out.println(p2.name);
  36.         System.out.println(p2.height);
  37.     }
  38. }

构造器的重载
  1. package com.star3.star2;
  2. /**
  3.  * @Auther: Starshine
  4.  */
  5. public class Person {
  6.     //属性:
  7.     String name;
  8.     int age;
  9.     double height;
  10.     //空构造器
  11.     public Person(){
  12.     }
  13.     public Person(String name,int age,double height){
  14.         //当形参名字和属性名字重名的时候,会出现就近原则:
  15.         //在要表示对象的属性前加上this.来修饰 ,因为this代表的就是你创建的那个对象
  16.         this.name = name;
  17.         this.age = age;
  18.         this.height = height;
  19.     }
  20.     public Person(String a,int b){
  21.         name = a;
  22.         age = b;
  23.     }
  24.     //方法:
  25.     public void eat(){
  26.         System.out.println("我喜欢吃饭");
  27.     }
  28. }

  1. package com.star3.star2;
  2. /**
  3.  * @Auther: Starshine
  4.  */
  5. public class Test {
  6.     //这是一个main方法,是程序的入口:
  7.     public static void main(String[] args) {
  8.         /*
  9.         1.一般保证空构造器的存在,空构造器中一般不会进行属性的赋值操作
  10.         2.一般我们会重载构造器,在重载的构造器中进行属性赋值操作
  11.         3.在重载构造器以后,假如空构造器忘写了,系统也不会给你分配默认的空构造器了,那么你要调用的话就会出错了。
  12.         4. 当形参名字和属性名字重名的时候,会出现就近原则:
  13.         在要表示对象的属性前加上this.来修饰 ,因为this代表的就是你创建的那个对象
  14.          */
  15.         Person p = new Person();
  16.         /*p.age = 19;
  17.         p.name = "lili";
  18.         p.height = 180.4;*/
  19.         Person p2 = new Person("lili",19,180.4);
  20.         System.out.println(p2.age);
  21.         System.out.println(p2.height);
  22.         System.out.println(p2.name);
  23.     }
  24. }

内存分析
代码1

 public class Person {

        int  id;

        int  age;

        public static void main(String args[]){

                Person p1= new Person();

        }

}

内存分析:

代码2
  1. public class Person {
  2.         int id;
  3.         int age;
  4.         String school;
  5.         public Person (int a,int b,String c){
  6.                 id=a;
  7.                 age=b;
  8.                 school=c;
  9.         }
  10.         public static void main(String args[]){
  11.                 Person p= new Person(1,20, "海淀");
  12.         }
  13. }

代码3

class Person{

        int id;

        int age;

        String school;

        Person (int a,int b,String c){

                id=a;

                age=b;

                school=c;

        }

        public void setAge(int a){

                age=a;

        }

}

public class Test {

    public static void main(String[] args) {

                  Test t=new Test();

                  int age=40;

                  Person tom=new Person(1,20,"海淀");

                  Person jack=new Person(2,30,"朝阳");

                  t.change1(age);

                  t.change2(tom);

                  t.change3(jack);

                  System.out.println(age); //40

                  System.out.println("id:"+jack.id+",age:"+jack.age+",school:"+jack.school); //id:2,age:66,school:"朝阳"

    }

    public void change1(int i){

                i=3366;

    }

    public void change2(Person p){

              p=new Person(3,22,"西城");

    }

    public void change3(Person p){

        p.setAge(66);

    }

}




 

this

【1】创建对象的过程:

(1)在第一次遇到一个类的时候,对这个类要进行加载,只加载一次。

(2)创建对象,在堆中开辟空间

(3)对对象进行初始化操作,属性赋值都是默认的初始值。

(4)new关键字调用构造器,执行构造方法,在构造器中对属性重新进行赋值

this:

从上面的效果能够看到:this指代的就是当前对象:

内存:

  • 15
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值