tij学习笔记 第四章 初始化与清理

一):方法重载注意的几点:

1,根据参数列表的签名调用相应的函数,但是不能根据返回值的不同来重载方法.

2,基本数据类型在重载时,从一个较小的数据类型自动提升为一个大的数据类型. 

char型略有不同,如果没有合适的方法,则直接被提升至int型.

二):构造器

缺省构造器是没有形参的,如果你的类中没有构造器,则编译器会帮你自动创建一个.

如果你已经定义了一个构造器,则系统不会帮你创建.

如果有多个构造器,可以在构造器中调用别的构造器--通过this关键字.只能调用一个,不能调用多个,

并且必须放在最起始处.

三):初始化顺序

先找程序的main方法,加载main方法所在类的所有成员,优先初始化static成员,

1.main方法内首次创建Card对象时,或者Card的静态字段或静态方法访问时,java虚拟机必须查找类路径定位Card.class文件.

2.然后载入Card.class文件,有关静态初始化的所有动作都会执行,静态初始化只在类首次加载的时候进行一次.

3.用new创建对象时,首先在堆上为其分配空间.并且这块空间被清零,这就为对象中的所有基本数据类型设为了缺省值,数字类型 为0,引用类型为null,boolean类型为false;

4.执行字段的初始化,比如成员int i的赋值操作,首先是0再被赋值.

5,静态成员和所有成员均被初始化(包括默认初始化),再执行构造器;

继承中的初始化顺序,先初始化最高基类的静态成员,一次下一级的子类的静态成员,基类实例变量,子类的实例变量

,基类构造器,子类构造器

class Tag{
 Tag(int maker){
  System.out.println("Tag("+maker+")");
 }
}
class Card{
 Tag t1 = new Tag(1);
 int i;
 Card(){
  System.out.println("Card()");
  t3 = new Tag(33);
 }
 Tag t2 = new Tag(2);
 
 void f(){
  System.out.println("f()");
 }
 Tag t3 = new Tag(3);
 static {
  System.out.println("card static");
 }
 
 
}
public class OrderOfInitialization{
 public static void main(String args[]){
  System.out.println("inside main");
  Card t = new Card();
  t.f();
  
 
  
 }
 static int n;
 static {
  System.out.println(OrderOfInitialization.n);
  System.out.println("static initialization");
  }
 
}

结果

0
static initialization
IWAV0055I Java Bean test.OrderOfInitialization started with the main method
inside main
card static
Tag(1)
Tag(2)
Tag(3)
Card()
Tag(33)
f()

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值