• 动手动脑


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

                   }

    }

    }

     

  • 相关阅读:
    loadrunner获取Http信息头中指定值作为参数
    soapUI使用-DataSource获取oracle库中的参数
    [转]vim编辑器---批量注释与反注释
    String() 函数把对象的值转换为字符串。
    自定义滚动条mCustomScrollbar
    css实现强制不换行/自动换行/强制换行
    在网页中添加新浪微博“加关注”按钮
    移动前端调试方案(Android + Chrome 实现远程调试)
    font-family
    移动端touch事件滚动
  • 原文地址:https://www.cnblogs.com/gzgz/p/4887243.html
Copyright © 2020-2023  润新知