动手动脑

实验1

package dsdn;

class InitializeBlockClass{

{

field=200;

}

public int field=100;  //field=100,覆盖了原来的field=100;

public InitializeBlockClass(int value){

this.field=value;  //函数调用使将value赋值给field

}

public InitializeBlockClass(){

}

}

public class dsdn {

public static void main(String[] args) {

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

InitializeBlockClass obj=new InitializeBlockClass();

System.out.println(obj.field);  //输出obj.field=100

obj=new InitializeBlockClass(300);  //调用函数将300赋给field

System.out.println(obj.field);  //输出obj.field=300

}

}

 

实验2

package dsdn;

class Root    //父类

{

{

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

}

public Root()

{

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

}

}

class Mid extends Root   //在Root下的子类

{

{

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   //在Mid extends Root下的子类

{

{

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

}

public Leaf()

{

super("Java初始化顺序演示");  //通过super调用父类中有一个字符串参数的构造器

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

}

}

public class dsdn {

public static void main(String[] args) {

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

new Leaf();

}

}

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

实验3

改前:

package dsdn;

public class dsdn

{

int j=0;

public static String reverseString(String inputStr)

{

StringBuffer buff=new StringBuffer();

j=inputStr.length();

System.out.println(j);

for(int i=inputStr.length()-1;i>=0;i--)

buff.append(inputStr.charAt(i));

return buff.toString();

}

public static void main(String args[])

{

String str="abcd";

System.out.println(reverseString(str));

}

}

 

改后:

package dsdn;

public class dsdn

{

int j;

static int Temp;

public static String reverseString(String inputStr)

{

StringBuffer buff=new StringBuffer();

for(int i=inputStr.length()-1;i>=0;i--)

buff.append(inputStr.charAt(i));

return buff.toString();

}

public static void A()

{

System.out.println(Temp);

}

public int B(int inputj)

{

j=inputj;

return j;

}

public static void main(String args[])

{

int j;

String str="abcd";

j=str.length();

dsdn e = new dsdn();

Temp = e.B(j);

e.A();

System.out.println(reverseString(str));

}

}

 

结论:

静态方法中只允许访问静态数据,不能静态方法中访问类的实例成员。静态方法中不能直接访问同一类中的非静态成员,要先创建对象,再通过对象访问成员。

实验4

package dsdn;

public class dsdn {

private static int i = 0;

public dsdn() 

{

i++;

}

public static int getNumber() 

{

return i;

}

public static void main(String[] args) {

  for (int i=0;i<5;i++)

  {

   dsdn t=new dsdn();

                System.out.println("一共创建了"+dsdn.getNumber()+"个对象");

               }

}

}

 

原文地址:https://www.cnblogs.com/gzgz/p/4887243.html