• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
秘银徽章
博客园    首页    新随笔    联系   管理    订阅  订阅
动手动脑

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

               }

}

}

 

posted on 2015-10-17 12:03  秘银徽章  阅读(195)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3