课后作业及动手动脑

动手动脑1

 以下代码为何无法通过编译?哪儿出错了?

public class Test {

public static void main(String[] args) {

// TODO 自动生成的方法存根

Foo obj1=new Foo();

}

class Foo()

{

  int value;

  public Foo(int intiValue)

  {

  value =intivalue;

  }

}

}

结论:如果类提供了一个自定义的构造方法,将导致系统不再提供默认构造方法。

运行试验

public class shi {

public static void main(String[] args) {

// TODO 自动生成的方法存根

IntializeBlockClass obj=new IntializeBlockClass();

System.out.println(obj.field);

obj =new IntializeBlockClass(300);

System.out.println(obj.field);

}

}

class IntializeBlockClass{

{

field =200;

}

public int field=100;

public IntializeBlockClass(int value){

this.field=value;

}

public IntializeBlockClass(){

}

}

结果:

java字段初始化规律:类成员定义时指定执行的默认值或类的初始化块,到底执行哪一个要看哪一个“排在前面”;执行类的构造函数;类的初始化块不接收任何的参数,而且只要一创建类的对象,它们就会被执行。因此,适合于封装那些“对象创建时必须执行的代码”。

动手动脑2://The program of java

//LinLinHe,Oct,15,2015

public class Jicheng {

public static void main(String[] args) {

// TODO 自动生成的方法存根

Son f=new Son();

f.output();

}

}

class Father{

int x=10;

Father()

{

}

Father(int newx){

x=newx;

}

}

class Son extends Father{

int y=0;

Son()

{

}

Son(int newy){

y=newy;

}

void output()

{

System.out.println(x+"  "+y);

}

}

结论:当多个类之间有继承关系时,创建子类对象会导致父类初始化块的执行。

动手动脑3:

public class Test {

public static void main(String[] args) {

// TODO 自动生成的方法存根

new Leaf();

}

}

class Root

{

static{

System.out.println("Root的静态初始化块");

}

{

System.out.println("Root的普通初始化块");

}

public Root()

{

System.out.println("Root的无参数的构造器");

}

}

class Mid extends Root

{

static{

System.out.println("Mid的静态初始化块");

}

{

System.out.println("Mid的普通初始化块");

}

public Mid()

{

System.out.println("Mid的无参数的构造器");

}

public Mid(String msg)

{

//通过this调用同一类中重载的构造器

this();

System.out.println("Mid的带参数构造器,其参数值:" + msg);

}

}

class Leaf extends Mid

{

static{

System.out.println("Leaf的静态初始化块");

}

{

System.out.println("Leaf的普通初始化块");

}

public Leaf()

{

//通过super调用父类中有一个字符串参数的构造器

super("Java初始化顺序演示");

System.out.println("执行Leaf的构造器");

}

}

静态初始化块的执行顺序:先执行静态初始化块,再执行普通初始化块,然后执行无参数的构造器。

 

问题:静态方法中只允许访问静态数据,那么,如何在静态方法中访问类的实例成员(即没有附加static关键字的字段或方法)?

public class Cheng {

public static void main(String[] args) {

// TODO 自动生成的方法存根

Test t=new Test();

t.getY(1);

t.I();

}

}

class  Test

{

int x=0;

static int y;

static public int getY(int newy)

{

y=newy;

System.out.println(y);

return y;

}

public int I()

{

int i=10;

return i;

课后作业://The homework of java

public class Inquiry {

private static int i;

public Inquiry ()

{

 i++;

}

public  static int get()

    {

     return i;

    }

public static void main(String[] args) {

// TODO 自动生成的方法存根

Inquiry t1=new Inquiry();

Inquiry t2=new Inquiry();

Inquiry t3=new Inquiry();

System.out.println("共创建了"+Inquiry.get()+"个对象");

}

}

}

}

原文地址:https://www.cnblogs.com/muamu/p/4885609.html