• 动手动脑


                           动手动脑

    1.请输入并运行以下代码,得到什么结果?

     

     

     

    2.以下代码为何无法通过编译?哪儿出错了?

     

    答:Foo obj1=new Foo()与public staticint initValue)错了,在此处调用时没有参数

    3.如果一个类中既有初始化块,又有构造方法,同时还设定了字段的初始值,谁说了算?

    答:执行类成员定义时指定的默认值或类的初始化块,到底执行哪一个要看哪一个“排在前面”。

    4.使用上页幻灯片中定义的类,以下代码输出结果是什么?

    答:结果是100  300

    5.依据代码的输出结果,总结Java字段初始化的规律。

    答:java进行初始化的地方有两个:初始化块和和构造函数,其中初始化块又分为静态初始化块和实例初始化块。静态初始化块是类中由static修饰的初始化块,实例初始化块为类中没有任何关键字修饰的初始化语句。如果在主函数中创建对象时没有形参时,如果在类中定义了公共的变量并给与了赋值,那么就会把值赋给主函数中的变量,再调用类中的默认构造函数,如果在主函数中创建对象时有形参,则调用类中对应的构造函数。

    6.请运行TestStaticInitializeBlock.java示例,观察输出结果,总结出“静态初始化块的执行顺序”。 

    答:静态初始化块时类相关的,系统将在类初始化阶段执行静态初始化块,而不是在创建对象时才执行。

    8.静态方法中只允许访问静态数据,那么,如何在静态方法中访问类的实例成员(即没有附加static关键字的字段或方法)?请编写代码验证你的想法。

    class Outer

    {

    int  x=3;

    static class inner//静态内部类     

    {

       void  fun()

       {

             System.out.println(“inner--”+new Outer().x);

       }

    }

    9.(StrangeIntegerBehavior.java)输出诡异的结果,原因何在?

     答: 因为它们调用的Interger类的方法不同,所以结果不同。

    10.使用命令行运行示例:Hello.java。为何生成的.class文件无法运行?

    答:java要求文件和类名严格对应,javac后面跟的参数是文件名,但java后面跟的是类名。

    修改后的运行结果:

     

    **课后作业

    使用类的静态字段和构造函数,我们可以跟踪某个类所创建对象的个数。请写一个类,在任何时候都可以向它查询“你已经创建了多少个对象?”。

    public class Test{

         private static int n;

         public Test()

         {

             n++;

         } 

         public static int getNum()

         {

             return n;

         }

         public static void main(string[] args){

         Test a=new Test();

         Test b=new Test();

         Test c=new Test();

         System.out.println(“共有对象个数为:”+Test.getNum());

         }

    }

  • 相关阅读:
    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/znn123/p/4887453.html
Copyright © 2020-2023  润新知