GVKun编程网logo

java – ruby中的对象引用类型(java对象引用是什么)

12

如果您想了解java–ruby中的对象引用类型和java对象引用是什么的知识,那么本篇文章将是您的不二之选。我们将深入剖析java–ruby中的对象引用类型的各个方面,并为您解答java对象引用是什么

如果您想了解java – ruby中的对象引用类型java对象引用是什么的知识,那么本篇文章将是您的不二之选。我们将深入剖析java – ruby中的对象引用类型的各个方面,并为您解答java对象引用是什么的疑在这篇文章中,我们将为您介绍java – ruby中的对象引用类型的相关知识,同时也会详细的解释java对象引用是什么的运用方法,并给出实际的案例分析,希望能帮助到您!

本文目录一览:

java – ruby中的对象引用类型(java对象引用是什么)

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 类、对象、构造器、引用类型内存基本知识、引用类型值传递

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对象实例?

ExecJS – Ruby中的Javascript对象实例?

如果我有一个 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中的解析函数由于上述原因不起作用.

解决方法

通过一些实验发现了答案.我设法通过使用context.exec()而不是调用来获得所需的功能.

js = <<JS
var jsObj = someObject.getInstance();
var res = jsObj.someMethod();
return res;
JS

context.exec(js);

但是,如果您的方法返回Javascript对象,则必须先将其序列化,否则解析结果,以便ExecJS将其返回到合适的Ruby对象中.

java – 两次获得完全相同的对象引用的可能性有多大

java – 两次获得完全相同的对象引用的可能性有多大

我有时会假设如果oldobject!= newObject,那么对象已经改变了 – 在大多数情况下这似乎是一个公平的假设,但它真的是一个错误的假设吗?

简而言之,在什么情况下,以下代码可以打印“相同!”?

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类图中,如何显示类创建另一个类的对象但不存储对象引用?

java – 在UML类图中,如何显示类创建另一个类的对象但不存储对象引用?

我有一个类创建另一个类的实例. “ServerThread”为传入连接配置套接字,“ServerLogic”等待任何传入消息.

ServerThread创建ServerLogic实例,并在ServerLogic中调用“run”方法. ServerThread不存储对ServerLogic对象的引用,并且因为它们将在同一个线程上运行,所以ServerThread将处于保持状态,直到ServerLogic停止侦听/套接字关闭.

这是我正在谈论的两个类的图像:

enter image description here

我如何在UML类图中表示这种关系?

谢谢.

解决方法:

我知道您的ServerThread和ServerLogic在结构上是独立的:不保持彼此之间的引用.所以他们之间没有联系.但是,您可以使用构造型«Instantiate»从ServerThread到ServerLogic绘制依赖关系(带箭头的虚线).

enter image description here

今天的关于java – ruby中的对象引用类型java对象引用是什么的分享已经结束,谢谢您的关注,如果想了解更多关于6、Java 类、对象、构造器、引用类型内存基本知识、引用类型值传递、ExecJS – Ruby中的Javascript对象实例?、java – 两次获得完全相同的对象引用的可能性有多大、java – 在UML类图中,如何显示类创建另一个类的对象但不存储对象引用?的相关知识,请在本站进行查询。

本文标签: