Ruby学习: 类变量和类方法
一、类变量
在ruby中,可以为类定义类变量,类变量的值为类的所有实例(对象)所共享。
有点类似其它语言(如java)中的静态变量,但与java中的静态变量的区别是,
类变量是私有的,无法在类的外部访问,只能通过类的方法访问。
类变量通过 @@符号来标识(连续的两个@符号)。
举例说明:
class Demo
@@a = 1
def plus
@@a += 1
end def print
puts @@a
end
end #创建对象,调用对象的方法
demo1= Demo.new
demo1.print
demo1.plus
demo1.print demo2= Demo.new
demo2.print
demo2.plus
demo2.print demo1.print
运行上面的代码,通过输出可以看出类变量的特性。
需要说明的是,类变量必须被初始化后才能访问,所以一般都是在类中直接声明,而不像实例变量一般是在构造函数(或其它方法)中声明。
因为在构造函数中声明和初始化,则创建多个对象会被相互覆盖。在类中直接声明和初始化,只会被初始化一次。
二、类方法
在rbuy中,可以定义类方法,有点类似java中的静态方法。我们直接上例子:
class Demo
@@b=2
def initialize
@a=1
end def print
puts @a
puts @@b
end def Demo.test #类方法
puts @a #返回nil
@a = 5
puts @a
puts @@b
end def Demo.test1 #类方法
puts @a
end
end demo = Demo.new
demo.print
Demo.test
Demo.test1
demo.print
查看上面代码和运行的结果,会发现类方法有如下特点:
1)类方法的定义和引用都需要前面加类名
2)类方法可以访问类变量
3)类方法中引用的 @a 并不是类的实例变量,而是另外一个命名空间的
Ruby学习: 类变量和类方法的更多相关文章
- Java学习第二篇:类,对象,成员属性,成员方法,构造方法,类变量,类方法
一.类的定义 一个全面的类定义是比较复杂的, 定义如下:
- python学习笔记(二十二)实例变量、实例方法、类变量、类方法、属性方法、静态方法
实例变量:在类的声明中,属性是用变量来表示的.这种变量就称为实例变量,也就是成员变量. 实例方法:在类中声明的方法,例如:my(self),必须实例化之后才可以使用,否则会报错. 类变量:公共的变量, ...
- ruby 学习笔记 1
写ruby blog 系统的记录下.也是对我学ruby的点滴记录. 先介绍下我的学习环境.系统:ubuntu12.04文档:techotopia ,ruby文档,the hard way learn ...
- Ruby学习心得之 Linux下搭建Ruby环境
作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 Ruby学习心得之 Linux下搭建Ruby环境1.前言2.Linux下安装Ruby环境 一 ...
- Ruby学习之mixin
直接上代码: module Action def jump @distance = rand(4) + 2 puts "I jumped forward #{@distance} feet! ...
- ruby学习网站
Ruby官方中文网(推荐): https://www.ruby-lang.org/zh_cn/ 国内非常不错的Ruby学习教程网站(推荐): http://www.yiibai.com/ruby Ru ...
- JAVA:类,对象,成员属性,成员方法,构造方法,类变量,类方法<2>
一.类的定义 一个全面的类定义是比较复杂的, 定义如下:
- Ruby学习笔记4: 动态web app的建立
Ruby学习笔记4: 动态web app的建立 We will first build the Categories page. This page contains topics like Art, ...
- ruby学习笔记(1)-puts,p,print的区别
ruby学习笔记-puts,p,print的区别 共同点:都是用来屏幕输出的. 不同点:puts 输出内容后,会自动换行(如果内容参数为空,则仅输出一个换行符号):另外如果内容参数中有转义符,输出时将 ...
随机推荐
- tree(简单并差集)
tree Accepts: 156 Submissions: 807 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65 ...
- Swift中类的初始化器与继承
初始化是类,结构体和枚举类型实例化的准备阶段.这个阶段设置这个实例存储的属性的初始化数值和做一些使用实例之前的准备以及必须要做的其他一些设置工作. 通过定义构造器(initializers)实现这个实 ...
- EasyUI的使用步骤
(1) 将easyui-1.4.3中jquery.min.js\jquery.easyui.min.js复制到工程的script下 (2) 将themes复制到工程中 (3) 在页面中引入2个JS 2 ...
- 关于tomcat的clean
1 添加了一个web项目到tomcat,然后进行clean的时候,根目录实际上是在WebContent下,也就是说存放在WebContent目录下的所有文件在clean的时候才会被添加到tomcat对 ...
- .htaccess Rewrite apache重写和配置
首先: 必须要空间支持 Rewrite 以及对站点目录中有 .htaccess 的文件解析,才有效. 如何让空间支持Rewrite 和 .htaccess 的文件解析呢 往下看 第一步:要找到apac ...
- Python 爬取CSDN博客频道
初次接触python,写的很简单,开发工具PyCharm,python 3.4很方便 python 部分模块安装时需要其他的附属模块之类的,可以先 pip install wheel 然后可以直接下载 ...
- jar 打包后的文件执行时出现错误:RunJar jarFile [mainClass] args...
修改别人的jar包中的配置文件,然后再打包后执行出错:RunJar jarFile [mainClass] args... 经过分析,是因为打包时需要设置mainClass,可以通过如下方法: jar ...
- java json的处理
maven依赖 <dependencies> <dependency> <groupId>com.alibaba</groupId> <artif ...
- Spring 基于注解的装配
xml头文件 xmlns:context="http://www.springframework.org/schema/context" 扫描包:<context:compo ...
- 内核加载与linux的grub
计算机系统的启动是一个复杂的过程,启动过程大致可以分为以下几个阶段: +------计算机系统启动流程----------------------------- ------------------- ...