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());

               }

           }

     

        }

    实验截图:

     

  • 相关阅读:
    .net core读取appsettings.config中文乱码问题
    vs2017错误:当前页面的脚本发生错误
    VS Code中无法识别npm命令
    Visual Studio报错/plugin.vs.js,行:1074,错误:缺少标识符、字符串或数字
    记录一次在生成数据库服务器上出现The timeout period elapsed prior to completion of the operation or the server is not responding.和Exception has been thrown by the target of an invocation的解决办法
    Java集合框架
    java hash表
    Java Dictionary 类存储键值
    java数据结构 栈stack
    java封装
  • 原文地址:https://www.cnblogs.com/zhng921/p/4887115.html
Copyright © 2011-2022 走看看