如果您想了解java–ruby中的对象引用类型和java对象引用是什么的知识,那么本篇文章将是您的不二之选。我们将深入剖析java–ruby中的对象引用类型的各个方面,并为您解答java对象引用是什么
如果您想了解java – ruby中的对象引用类型和java对象引用是什么的知识,那么本篇文章将是您的不二之选。我们将深入剖析java – ruby中的对象引用类型的各个方面,并为您解答java对象引用是什么的疑在这篇文章中,我们将为您介绍java – ruby中的对象引用类型的相关知识,同时也会详细的解释java对象引用是什么的运用方法,并给出实际的案例分析,希望能帮助到您!
本文目录一览:- java – ruby中的对象引用类型(java对象引用是什么)
- 6、Java 类、对象、构造器、引用类型内存基本知识、引用类型值传递
- ExecJS – Ruby中的Javascript对象实例?
- java – 两次获得完全相同的对象引用的可能性有多大
- java – 在UML类图中,如何显示类创建另一个类的对象但不存储对象引用?
java – ruby中的对象引用类型(java对象引用是什么)
我是Ruby新手,目前正在尝试使用Ruby书中的一些例子作为指南:
class Account
attr_accessor :balance
def initialize(balance)
@balance = balance
end
end
class Transaction
def initialize(account_a, account_b)
@account_a = account_a
@account_b = account_b
end
def debit(account,amount)
account.balance -= amount
end
def credit(account,amount)
account.balance += amount
end
def transfer(amount)
debit(@account_a, amount)
credit(@account_b, amount)
end
end
savings = Account.new(100)
checking = Account.new(200)
trans = Transaction.new(checking, savings)
trans.transfer(60)
puts savings.balance
puts checking.balance
这是一个非常简单的示例,在同一个脚本文件中包含两个类.我对传递给信用卡和借记卡方法的论证类型感到困惑.来自Java,我仍然在类型方面,所以很明显我传递给帐户变量的类型,比如借记方法,必须是Account类型.
由于ruby是动态类型的,并且没有检查类型,我如何安全地操作我传递的参数,并通过说:account.balance – amount来定义方法的其余部分?
我试图理解,如果我向借记方法传递对账户以外的对象的引用,会有什么样的安全性?
当定义下面方法的主体时,它使用给定的参数帐户.现在,我想我正在重复自己,因为我仍然无法理解这个想法…我怎样才能把参数帐户(可以是任何类型,因为没有人检查)并使用点构建一些逻辑运算符,请求其实例变量,或调用其他方法,并对可能或可能不是正确类型(或类型)的对象执行计算?当然,隐含地,我希望它是Account类型.
def credit(account,amount)
account.balance += amount
end
另外,如果我在不同的文件中声明这两个类,那么同样的例子会如何工作?
真诚地为新手问题道歉,我发现很难围绕动态打字 – 或者更好,没有类型检查.这本书要么有点模糊,要么我只能用java思考,不能动摇我的隧道视野.
任何实际的解释将不胜感激.
解决方法:
Ruby中没有任何类型安全性.对Ruby而言,最重要的是对象是否可以响应它收到的消息.你可以传递一些完全没有意义的东西,Ruby也不会做任何事情来阻止你.但是如果传入的对象不响应您正在发送的消息(在这种情况下),当代码尝试发送无效消息时,您将收到NoMethodError.
一般来说,解决方法是:不要传入错误的类型.它知道它听起来很弱,但这几乎是你需要做的 – 确保你传递正确的东西.为您的程序编写测试,以确保您正在做您想做的事情. Ruby在单元测试方面非常重要.如果你真的担心一个参数是正确的东西,你可以显式检查它的类(引发’WTF?’除非object.class == String)或者你可以尝试将它转换为正确的类(通过定义to_foo类型的方法).
作为回报,你基本上不再关心类型.只要对象响应你发送的消息,你输入的内容就没关系.这使得模拟和代理之类的东西变得非常简单.
6、Java 类、对象、构造器、引用类型内存基本知识、引用类型值传递
1、面向对象三大特征:
封装:encapsulation
继承:inheritance
多态:polymorphism
2、类中
数据特征(property):属性(attribute)静态的 static
行为特征(method):方法 动态的 dynamic
3、getter 和 setter
getter:获得者
setter:设置者
构造器注意:别忘了写默认构造器(有了非默认构造器,默认构造器就不会自动创建了)
4、static 静态修饰的随类产生,随类释放,耗费内存;’
dynamic 动态修饰的随对象产生;
在静态中使用动态唯一的方法是实例化。
5、封装特性:(encapsulation)私有的称为封(不让别人看到)
getter/setter 称为装(让人有限的看到)
6、实例化 Student s=new Student ();
栈内存 s(0xFFEEAA)————>handle student 对象 0xFFEEAA
name: reference 类型
0xACDD11————>0xACDD11 "zxc"
1、 Person p=new Person();
2、p=null; 这时,new Person () 对象的堆被 GC 作为垃圾回收。(除非还有变量引用这个堆)
7、基本类型都是值传递的,只传递数(即往方法里传只传数值,不会改变方法外面的数值)。
引用类型是地址传递的,进入方法后,其数值也会发生变化的!
字符串是常量应该不能改变,但是它又是个引用类型,能够传递,所以它的解决方法是:传递一个该字符串的副本,而不传递其本身(结果同值传递)。
ExecJS – Ruby中的Javascript对象实例?
var obj = someObject.getInstance(); var result = obj.someMethod();
其中someMethod定义如下:
someObject.prototype.someOtherMethod = function() { //do stuff }; someObject.prototype.someMethod = function(foo) { this.someOtherMethod(); };
但是,当我想通过ExecJS在Ruby中调用someMethod时出现错误:
context = ExecJS.compile(# the javascript file) context.call('someObject.getInstance().someMethod') # Gives a TypeError where Object has no method 'someOtherMethod'
另一方面,javascript模块中定义的函数正常工作:
someFunction = function() { // do stuff }; # in Ruby context.call('someFunction') # does stuff
ExecJS可以处理Javascript对象及其方法,还是只能用它来调用函数?
关于具体的应用程序,我正在研究https://github.com/joenoon/libphonenumber-execjs,但Libphonenumber中的解析函数由于上述原因不起作用.
解决方法
js = <<JS var jsObj = someObject.getInstance(); var res = jsObj.someMethod(); return res; JS context.exec(js);
但是,如果您的方法返回Javascript对象,则必须先将其序列化,否则解析结果,以便ExecJS将其返回到合适的Ruby对象中.
java – 两次获得完全相同的对象引用的可能性有多大
简而言之,在什么情况下,以下代码可以打印“相同!”?
static WeakReference<Object> oldO = null; ... Object o = new Object(); oldO = new WeakReference(o); // Do some stuff with o - Could take hours or even days to complete. ... // discard o (or let it go out of scope). o = null; // More stuff - Could be hours or days later. ... o = new Object(); // Later still. if ( o == oldO.get() ) { System.out.println("Same!"); }
我意识到这确实是远程可能的,因为对象引用本质上是对象的内存地址(或者可能在某些JVM中).但它有多大可能?我们是否在实际发生之前谈论了几十年的运行时间?
添加
我道歉 – 请假设oldO是某种形式的弱引用,不会阻止它被收集.也许它是弱的,因为代码(现在)建议或引用存储在某个数据库或文件中.
解决方法
它依赖于实现.对象引用的契约是,只要对象仍然存在,没有其他对象将==与它进行比较.这意味着在对象被垃圾收集之后,VM可以自由地重用相同的对象引用.
Java的实现可以选择使用递增的整数进行对象引用,在这种情况下,当引用计数器溢出回0时,您只能获得相同的对象引用.其他实现可能使用内存位置,这使得它更可能用于相同的引用被重用.在任何情况下,如果重要,您应该定义自己的对象标识.
java – 在UML类图中,如何显示类创建另一个类的对象但不存储对象引用?
我有一个类创建另一个类的实例. “ServerThread”为传入连接配置套接字,“ServerLogic”等待任何传入消息.
ServerThread创建ServerLogic实例,并在ServerLogic中调用“run”方法. ServerThread不存储对ServerLogic对象的引用,并且因为它们将在同一个线程上运行,所以ServerThread将处于保持状态,直到ServerLogic停止侦听/套接字关闭.
这是我正在谈论的两个类的图像:
我如何在UML类图中表示这种关系?
谢谢.
解决方法:
我知道您的ServerThread和ServerLogic在结构上是独立的:不保持彼此之间的引用.所以他们之间没有联系.但是,您可以使用构造型«Instantiate»从ServerThread到ServerLogic绘制依赖关系(带箭头的虚线).
今天的关于java – ruby中的对象引用类型和java对象引用是什么的分享已经结束,谢谢您的关注,如果想了解更多关于6、Java 类、对象、构造器、引用类型内存基本知识、引用类型值传递、ExecJS – Ruby中的Javascript对象实例?、java – 两次获得完全相同的对象引用的可能性有多大、java – 在UML类图中,如何显示类创建另一个类的对象但不存储对象引用?的相关知识,请在本站进行查询。
本文标签: