java字段中初始化的规律与如何用静态成员函数调用非静态成员

java字段中初始化的规律:

执行以下代码,出现的结果是什么?

class InitializeBlockClass{

{

    field=200;

}

public int field=100;

public InitializeBlockClass(int value){

this.field=value;

}

public InitializeBlockClass(){

}

}

public class InitializeBlockDemo {

/**

 * @param args

 */

public static void main(String[] args) {

InitializeBlockClass obj=new InitializeBlockClass();

System.out.println(obj.field);

obj=new InitializeBlockClass(300);

System.out.println(obj.field);

}

}

输出的结果为100300

原因:Java中进行初始化的地方有两个:一个是构造函数,一个是初始化块,

在一个,当类中有初始化块是,如果调用无参数的构造函数,他会按照程序的顺序逐一调用函数,后边的函数可以把前边的都替换掉。若调用的是有参数的构造函数,则输出的是自己赋给的初值。

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

执行以下代码:

package tur3;

public class Jingtai {

public  int num;

 static void change(Jingtai a)

 {

 a.num=10;

 }

public static void main(String[] args)

{

Jingtai b=new Jingtai();

b.num=100;

b.change(b);

System.out.println(b.num);

}

}

输出的结果为:

该程序的输出结果为  10

原因:通常情况下,静态方法是不能访问类的非静态成员函数以及非静态的变量,因为类里边的静态成员属于类,不用声明类的对象时,静态成员就已经存在了,而非静态成员必须在声明类的对象后才可以分配内存空间,所以类的对象不可以访问类中静态成员。但是,如果先要在静态成原函数中调用非静态中的变量或方法,可以在静态成员函数中声明一个类的对象,然后再调用类的非静态成员或方法。