uvm_primer static方法和变量 ch7

  • ch7 static方法和变量
    • ch7.1不要使用全局变量
    • ch7.2静态变量
      • ch7.2.1两种访问方法的途径
      • ch7.2.2queue队列
    • ch7.3静态方法
      • ch7.3.1变量作用范围限定
    • ch7.4summary

ch7 static方法和变量

ch7.1不要使用全局变量

小白刚开始写代码 时会觉得全局变量比较好用,不管在哪都能访问;
但是项目变大后,调试起来就是噩梦,如果这个变量不对了,要去track哪里修改的,写错了,比较麻烦;因为他在哪里都能访问,比如100个地方对这个变量复制了,就要去逐一排查;

ch7.2静态变量

但是全局变量哪都能访问还是有一定优势,所以要一个受控的全局变量;
static变量就相当于一个受控的全局变量
static含义

  • static变量在程序刚运行的时候就分配了内存,如果没有static ,则变量在new()构造之后才分配内存
  • static的成员在程序中只有一个内存空间,不管把这个类例化了多少个对象,这些对象的该static成员变量共享一个内存;
  • static的数据成员不用new,即可直接使用;
  • static的数据成员和方法在任何地方都可以访问,这个类似全局变量,但是一般要把数据成员protected,使用开放的方法来间接访问
class lion_cage;static lion cage[$];  //static 变量cage,是一个队列,队列中的每个成员只能是lion类型的对象;endclass : lion_cagmodule top;initial beginlion   lion_h;lion_h  = new(2,  "Kimba");lion_cage::cage.push_back(lion_h);  //队列的方法lion_h  = new(3,  "Simba");lion_cage::cage.push_back(lion_h);lion_h  = new(15, "Mustafa");lion_cage::cage.push_back(lion_h);$display("Lions in cage"); foreach (lion_cage::cage[i])$display(lion_cage::cage[i].get_name());  //get_name() 是lion这个class的方法;endendmodule : to

ch7.2.1两种访问方法的途径

  1. 类访问 :: 不需要实例化该类;
    lion_cage::cage.push_back(lion_h);
  2. 对象访问
    lion_cage lion_cage_h;
    lion_cage_h = new();
    lion_cage.cage.push_back(lion_h);

ch7.2.2queue队列

.push_back 是队列的方法

ch7.3静态方法

上个代码直接把cage这个静态变量开放给外部访问;这个就有点类似全局变量了,这个是坏习惯;
应该将静态变量保护起来,protected ,然后给外部开放function访问,

class lion_cage;protected static lion cage[$];  //限制访问范围static function void cage_lion(lion l);  //供外部调用,来修改cage,不能让外部直接修改cage.push_back(l);endfunction : cage_lionstatic function void list_lions();$display("Lions in cage"); foreach (cage[i])$display(cage[i].get_name());endfunction : list_lionsendclass : lion_cagemodule top;initial beginlion   lion_h;lion_h  = new(2,  "Kimba");lion_cage::cage_lion(lion_h);lion_h  = new(3,  "Simba");lion_cage::cage_lion(lion_h);lion_h  = new(15, "Mustafa");lion_cage::cage_lion(lion_h);lion_cage::list_lions();endendmodule : top

ch7.3.1变量作用范围限定

  • local:表示的成员或方法只对该类的对象可见,子类以及类外不可见。
  • protected: 表示的成员或方法对该类以及子类可见,对类外不可见。
  • 默认 public: 默认为public,子类和类外皆可访问。

ch7.4summary

  • static 变量
  • static方法 ,需要把类中变量保护起来,提供函数来间接访问变量
  • protected 变量供该类及子类访问 类外不可见

uvm_primer ch7 static方法和变量相关推荐

  1. static方法不能直接访问类内的非static变量和不能调用this,super语句分析

    大家都知道在static方法中,不能访问类内非static成员变量和方法.可是原因是什么呢? 这首先要从static方法的特性说起.static方法,即类的静态成员经常被称为"成员变量&qu ...

  2. java static 修饰变量吗_Java面试 - static 修饰的变量和方法有哪些特点?

    1.static修饰的变量和方法,在类加载时即被初始化,可直接通过类名.变量名和类型.方法名进行调用. 2.static修饰的变量,在类加载时会被分配到数据区的方法区.类的实例可共享方法区中的变量.如 ...

  3. static(静态变量,方法)

    static(静态变量,方法) 文章是作者面向对象文章的单独拆分如果存在阅读不连续性请参考下文 Java面向对象 完整代码 是什么? 静态的变量与方法不属于对象,而是属于类 我们常说的类变量.类方法( ...

  4. java静态方法和非静态方法内存区别_static方法和非static方法的区别(java)

    ● 生命周期(Lifecycle): 静态方法(Static Method)与静态成员变量一样,属于类本身,在类装载的时候被装载到内存(Memory),不自动进行销毁,会一直存在于内存中,直到JVM关 ...

  5. 【iOS 开发】Objective - C 面向对象 - 方法 | 成员变量 | 隐藏封装 | KVC | KVO | 初始化 | 多态

    一. Objective-C 方法详解 1. 方法属性 (1) OC 方法传参机制 Object-C 方法传参机制 : OC 中得参数传递都是值传递, 传入参数的是参数的副本; -- 基本类型 (值传 ...

  6. java中的static方法可以被重写吗?(从方法调用过程理解)

    答案是:不可以. 首先明确一点,在子类中重写父类的static方法,是不会报错的,编译也可以通过,但是在通过一个声明为父类,实际类型为子类的引用变量调用该方法时,发现被调用的仍是父类中原本以为会被覆盖 ...

  7. php static方法的作用是什么,php static方法指的是什么

    php static方法指的是用php中static关键字来定义静态方法和属性,static也可用于定义静态变量以及后期静态绑定,其使用语法如"public static $my_stati ...

  8. Java类名.方法和变量

    文章目录 (1) 类名.方法 (2) 变量 (1) 类名.方法 要是类名直接调用的方法,那这个方法就是静态的(static)方法,是不用new出新对象实例就可以直接调用的方法.看下面例子: class ...

  9. java static方法

    static方法 1.static方法的作用访问static变量和static方法2.static方法的调用方式通过类名调用.通过对象名来访问3.不可以静态方法中不可以访问非静态变量 静态方法中不可以 ...

最新文章

  1. 2016百度之星 - 初赛(Astar Round2A)Gym Class(拓扑排序)
  2. java B2B2C springmvc mybatis多租户电子商城系统(三):服务提供与调用
  3. python3 获取当前目录和上级目录
  4. NLP-基础知识-003(词性标注)
  5. Subsequence Hate CodeForces - 1363B(前缀和+dp)
  6. 【每日SQL打卡】​​​​​​​​​​​​​​​DAY 14丨重新格式化部门表【难度中等】
  7. 数据中台、数据仓库和数据湖传统的区别
  8. groovy 兼容 java_java – eclipse插件和maven依赖项中存在的’groovy-all’jar之间的兼容性问题...
  9. php-fpm进程的用户组,PHP中的“进程”系列1——PHP-FPM模型
  10. android 滑动缩放监听,基于Android的ViewPager动画特效实现页面左右滑动效果(实现缩放...
  11. Jupyter notebook基础教程(启动,汉化,操作)
  12. hadoop资料汇总
  13. MySQL视图创建与管理(实验五)
  14. Spark Streaming官网重点整理
  15. 多算科技的报表工具BI-山海鲸可视化
  16. 【场景方案】捋一捋Vben Admin之登陆方案(学习记录)
  17. fanuc换刀宏程序详解_FANUC宏程序大全+实例讲解
  18. 第二十四题——[ZJCTF 2019]NiZhuanSiWei
  19. 单例模式 ,多例模式及工厂设计模式的简单案例介绍
  20. 天才学生的天才回答 让老师无话可说的语文答卷

热门文章

  1. 罗马仕php30和plp30,华为p30和p30pro有什么区别
  2. SRM 559 div 2【AK】
  3. 自动往返电动小汽车【第五届(2001年)全国大学生电子设计竞赛全国一等奖作品】
  4. vue 原生多个上下箭头来回切换,并且内容显示隐藏
  5. 【产品经理】从电视节目看如何做产品
  6. 调用淘宝API最简单的例子
  7. 微信域名防封跳转系统详解,域名总是被微信屏蔽应该这样做
  8. 火线、零线和地线及开关接线参考
  9. 揭秘:保养品包装有玄机 玻璃材质最安全
  10. Linux CPU性能优化 —— CPU使用率及高CPU使用率排查