对象创建过程、参数传递机制、static初始块

静态初始块

静态初始化块只在类加载时执行,且只会执行一次,同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量。    {}也是初始化块,,这种会按顺序执行。在类的声明中,可以包含多个初始化块,当创建类的实例时,就会依次执行这些代码块。如果使用 static 修饰初始化块,就称为静态初始化块。

方法参数的传递:值传递,值传递是先将参数复制一份,然后将复制的内容传递到方法中。此时方法操作的内容与原来的参数无关。

1)基本数据类型参数的传值

传递的是值的副本。 副本改变不会影响原件。

2)引用类型参数的传值

传递的是值的副本。但是,引用类型指的是“对象的地址”。因此,副本和原参数都指向了同一个“地址”,改变“副本指向地址对象的值,也意味这原参数指向对象的值也发生了改变”。

 public class   User {

    int id;           //id

    String name;  //账户名

    String pwd;   //密码

   

    public   User(int id, String name) {

       this.id =   id;

       this.name = name;

    }

   

    public static void   main(String[] args) {

       User u1 = new   User(100, "高小七");

       User u3 = u1;

       System.out.println(u1.name);

       u3.name="张三";

       System.out.println(u1.name);

    }

}

 

 

详细的静态初始化见末尾。

 

 

 

 

 

 

静态初始化块

构造方法用于对象的初始化!

静态初始化块,用于类的初始化操作!在静态初始化块中不能访问非static成员。

静态初始化块执行顺序(学完继承再看这里):

上溯到Object类,先执行Object的静态初始化块,再向下执行子类的静态初始化块,直到我们的类的静态初始化块为止。

构造方法执行顺序和上面顺序一样!! 

【示例1】static初始化块

public class   User {

    int id;           //id

    String name;  //账户名

    String pwd;   //密码

    static   String company; //公司名称

 

    static {

       System.out.println("执行类的初始化工作");

       company = "北京尚学堂";

       printCompay();

    }

   

    public static void   printCompay(){

       System.out.println(company);

    }

   

    public static void   main(String[] args) {

       User  u3 = new   User();

    }

}

 

   示例1 运行结果图 

参数传值机制

JAVA中,方法中所有参数都是“值传递”,也就是“传递的是值的副本”。 也就是说,我们得到的是“原参数的复印件,而不是原件”。因此,复印件改变不会影响原件。

1)基本数据类型参数的传值

传递的是值的副本。 副本改变不会影响原件。

2)引用类型参数的传值

传递的是值的副本。但是,引用类型指的是“对象的地址”。因此,副本和原参数都指向了同一个“地址”,改变“副本指向地址对象的值,也意味这原参数指向对象的值也发生了改变”。

【示例 2】 多个变量指向同一个对象

 public class   User {

    int id;           //id

    String name;  //账户名

    String pwd;   //密码

   

    public   User(int id, String name) {

       this.id =   id;

       this.name = name;

    }

   

    public static void   main(String[] args) {

       User u1 = new   User(100, "高小七");

       User u3 = u1;

       System.out.println(u1.name);

       u3.name="张三";

       System.out.println(u1.name);

    }

}

 

   示例2 运行结果图 

 

3)this隐式参数

对象的所有方法(包含构造方法)都被编译器默认增加了一个隐式参数this

 

 

 

 


「全栈Java笔记」是一部能帮大家从零到一成长为全栈Java工程师系列笔记。笔者江湖人称 Mr. G,10年Java研发经验,曾在神州数码、航天院某所研发中心从事软件设计及研发工作,从小白逐渐做到工程师、高级工程师、架构师。精通Java平台软件开发,精通JAVAEE,熟悉各种流行开发框架。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值