java构造函数的使用

          java构造函数的使用

java程序依旧是从main函数入口。但是初始化时先对变量进行初始化,即使变量的定义在方法的后面。静态变量只能被初始化一次,且它的初始化是位于其他变量之前的。

例:对下面程序

//有了静态,非静态成员的构造调用

//下面程序执行步骤:public 类中有静态变量,先执行。到具体的类中,执行顺序是先静态,非静态,在构造函数

//特别重要的一点是静态变量只能被初始化一次

package first;

class Bowl{

Bowl(int marker){

System.out.println("Bowl("+marker+")");

}

void f(int marker){

System.out.println("f("+marker+")");

}

}

class Table{

static Bowl b1=new Bowl(1);

Table(){

System.out.println("Table()");

b2.f(1);

}

void f2(int marker){

System.out.println("f2("+marker+")");

}

static Bowl b2=new Bowl(2);

}

class Cupboard{

Bowl b3=new Bowl(3);

static Bowl b4=new Bowl(4);

Cupboard(){

System.out.println("Cupboard()");

b4.f(2);

}

void f3(int marker){

System.out.println("f3("+marker+")");

}

static Bowl b5=new Bowl(5);

}

public class Hello {

  public static void main(String args[]){

  System.out.println("Creating new Cupboard() in main");

  new Cupboard();

  System.out.println("Creating new Cupboard() in main");

  new Cupboard();

  t2.f2(1);

  t3.f3(1);

  }

  static Table t2=new Table();

  static Cupboard t3=new Cupboard();

}

实验的运行结果应该:

Bowl(1)

Bowl(2)

Table()

f(1)

Bowl(4)

Bowl(5)

Bowl(3)

Cupboard()

f(2)

Creating new Cupboard() in main

Bowl(3)

Cupboard()

f(2)

Creating new Cupboard() in main

Bowl(3)

Cupboard()

f(2)

f2(1)

f3(1)

二:关于存在继承关系的构造函数。对于有父类的类,初始化时要层层向上找,直到找到最基类。然后依次开始进行初始化。

下面示例:

package first;

class Meal {

Meal() { System.out.println("Meal()"); }

}

class Bread {

Bread() { System.out.println("Bread()"); }

}

class Cheese {

Cheese() { System.out.println("Cheese()"); }

}

class Lettuce {

Lettuce() { System.out.println("Lettuce()"); }

}

class Lunch extends Meal {

Lunch() { System.out.println("Lunch()"); }

}

class PortableLunch extends Lunch {

PortableLunch() { System.out.println("PortableLunch()");}

}

public class Hello extends PortableLunch {

private Bread b = new Bread();

private Cheese c = new Cheese();

private Lettuce l = new Lettuce();

public Hello() {

System.out.println("Sandwich()");

}

public static void main(String[] args) {

new Hello();

 

}

} ///:~

运行结果:

Meal()

Lunch()

PortableLunch()

Bread()

Cheese()

Lettuce()

Sandwich()

三:存在抽象类的规则:抽象类中存在未定义的函数,所以调用时,函数中的值全初始化为0

示例:package first;

abstract class Glyph {

abstract void draw();

Glyph() {

System.out.println("Glyph() before draw()");

draw();

System.out.println("Glyph() after draw()");

}

}

class RoundGlyph extends Glyph {

private int radius = 1;

RoundGlyph(int r) {

radius = r;

System.out.println(

"RoundGlyph.RoundGlyph(), radius = " + radius);

}

void draw() {

System.out.println(

"RoundGlyph.draw(), radius = " + radius);

}

}

public class Hello {

 

public static void main(String[] args) {

new RoundGlyph(5);

}

} ///:~

运行结果:

Glyph() before draw()

RoundGlyph.draw(), radius = 0

Glyph() after draw()

RoundGlyph.RoundGlyph(), radius = 5

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值