zoukankan      html  css  js  c++  java
  • 类与对象动手动脑

    一、“自找麻烦”

    如果父类有静态成员赋值或静态初始化块,执行静态成员赋值和静态初始化块。

    如果类有静态成员赋值或静态初始化块,执行静态成员赋值和静态初始化块给类的成员赋予初值。如果构造函数中存在this()则执行。

    运行截图如上图。

    如果程序中的一个字段,既用了直接初始化,也用了静态初始化器,还用了构造器,这三种方法初始化字段先后次序是:
    


    1、静态的部分在classLoader加载类的时候就会执行,静态块中不能引用非静态的变量(因为这些变量要通过实例化类才能创建)。也不存在静态的成员变量,跟后面的两个初始化有质的不同(后两个是初始化成员变量)。


    2、定义变量时直接赋的值。


    3.构造函数
    二、当多个类之间有继承关系时,创建子类对象会导致父类初始化块的执行。
    例子:

    class Old
    {
     static{
      System.out.println("Old的静态初始化块");
     }
     {
      System.out.println("Old的普通初始化块");
     }
     public Old()
     {
      System.out.println("Old的无参数的构造器");
     }
    }
    class Young extends Old
    {
     static{
      System.out.println("Young的静态初始化块");
     }
     {
      System.out.println("Young的普通初始化块");
     }
     public Young()
     {
      System.out.println("Young的无参数的构造器");
     }
     public Young(String msg)
     {
      //通过this调用同一类中重载的构造器
      this();
      System.out.println("Mid的带参数构造器,其参数值:" + msg);
     }
    }
    public class Test2 {

     public static void main(String[] args) {
      // TODO Auto-generated method stub
        new Young();
     }

    结果截图:

    三、静态方法中只允许访问静态数据,那么,如何在静态方法中访问类的实例成员(即没有附加static关键字的字段或方法)?

          静态方法中不能直接访问同一类中的非静态成员,而必须先创建对象,再通过对象访问成员。

      例子:public class Test3{
     int j =5;
     static int value; 
     public static void A()
     {  System.out.println(value); } 
     public int B()
     {  
      int x = 100;  
      return x; 
      }  
     public static void main(String args[]) {  
      Test3 a = new Test3(); 
      value = a.B(); 
      a.A(); 
      }} 

    运行结果:100

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

    class Number

    {
         static int shu;

    public Number()
    {
       shu++; 
    }
    int GetShu()
    {
       return shu; 
    }
    }
    public class NumberObject {
     
        public static void main(String[] args) {

        Number n1=new Number();

        Number n2=new Number();
       
        Number n3=new Number();

        System.out.println("你已经创建了"+Number.shu+"个对象");

        }

    }

  • 相关阅读:
    bootstrap经典总结
    C#操作CAD-读取和修改数据
    C#操作CAD-调用winform
    C#操作CAD-初始化、引用dll
    oracle查询时间
    ArcGIS API for JavaScript开发环境搭建及第一个实例demo
    mysql命令大全
    第一次配置mysql5.6
    ExcelHelper
    excel常用函数
  • 原文地址:https://www.cnblogs.com/yanyuqing/p/4888079.html
Copyright © 2011-2022 走看看