zoukankan      html  css  js  c++  java
  • 类与对象的作业

    (1)请依据代码的输出结果,自行总结Java字段初始化的规律

    源代码:public class InitializeBlockDemo {

             /**

              * @param args

              */

             public static void main(String[] args) {

                      

                       InitializeBlockClass obj=new InitializeBlockClass();

                       System.out.println(obj.field);

                      

                       obj=new InitializeBlockClass(300);

                       System.out.println(obj.field);

             }

    }

    class InitializeBlockClass{

             //下面这句在初始化块之前与之后,会影响到field字段的初始值

             //public int field=100;

            

             {

                 field=200;

             }

             public int field=100;

             public InitializeBlockClass(int value){

                       this.field=value;

             }

             public InitializeBlockClass(){

                      

             }

    }

    实验截图:

     

    规律:java字段的初始化分为静态初始化和实例的初始化,而静态的初始化就是我们所看到的static所修饰的地方。实例的初始化则没有一些关键字了。

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

    源代码:

    class Root

    {

             static{

                       System.out.println("Root的静态初始化块");

             }

             {

                       System.out.println("Root的普通初始化块");

             }

             public Root()

             {

                       System.out.println("Root的无参数的构造器");

             }

    }

    class Mid extends Root

    {

             static{

                       System.out.println("Mid的静态初始化块");

             }

             {

                       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

    {

             static{

                       System.out.println("Leaf的静态初始化块");

             }

             {

                       System.out.println("Leaf的普通初始化块");

             }       

             public Leaf()

             {

                       //通过super调用父类中有一个字符串参数的构造器

                       super("Java初始化顺序演示");

                       System.out.println("执行Leaf的构造器");

             }

    }

    public class TestStaticInitializeBlock

    {

             public static void main(String[] args)

             {

                       new Leaf();

                      

             }

    }

    实验截图

     

    规律:首先执行父类中的静态初始化块,然后接着去执行子类中的静态初始化块。

    (3)静态方法中只允许访问静态数据,那么,如何在静态方法中访问类的实例成员

    源代码:

    import javax.swing.JOptionPane;

    public class Test

     

    {

        static int s;

        int total_employees=0;

             public static void display()

             {       

                       System.out.println("工人的总数为:"+s);

             }

            

             public int input()

             {

                       String str=JOptionPane.showInputDialog("输入工人的总数:");        

                    total_employees=Integer.parseInt(str);;

                       return total_employees;

             }

            

             public static void main(String args[])

             {

                       Test t = new Test();

                       s = t.input();

                       t.display();

             }

    }

    结论:在静态方法中访问类的实例成员:需要创建对象,再通过对象进行调用成员函数访问实例成员

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

     

    源代码:

        public class Test {

            static long count=0;

            static ThreadLocal Th=new ThreadLocal();

     

           public Test() {

               count++;

               Th.set(count);

           }

           public long getCount(){

               return (Long)Th.get();

           }

           public static void main(String[] args) {

               for (int i = 0; i < 4; i++) {

                  Test t=new Test();

                  System.out.println("一共创建了多少个对象");

                  System.out.println(t.getCount());

               }

           }

     

        }

    实验截图:

     

  • 相关阅读:
    【异常】No ManagedConnections available within configured blocking timeout
    【异常】Caused by: java.lang.ClassNotFoundException: org.springframework.dao.DataIntegrityViolationException
    【Redis】:Jedis 使用
    【异常】INFO: TopologyManager: EndpointListener changed ...
    【Java】JDK类 CountDownLatch
    【WEB】一个简单的WEB服务器
    【JAVA】Socket 编程
    【JBOSS】 JBOSS目录结构
    [SE0]简单的搜索引擎原理
    【ORACLE】 表空间信息
  • 原文地址:https://www.cnblogs.com/zhng921/p/4887115.html
Copyright © 2011-2022 走看看