实验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()+"个对象");
}
}
}