zoukankan      html  css  js  c++  java
  • 动手动脑

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

                   }

    }

    }

     

  • 相关阅读:
    AtCoder Regular Contest 093
    AtCoder Regular Contest 094
    G. Gangsters in Central City
    HGOI 20190711 题解
    HGOI20190710 题解
    HGOI 20190709 题解
    HGOI 20190708 题解
    HGOI20190707 题解
    HGOI20190706 题解
    HGOI 20190705 题解
  • 原文地址:https://www.cnblogs.com/gzgz/p/4887243.html
Copyright © 2011-2022 走看看