Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
理解java中的接口、类和构造函数_Java_Class_Interface - Fatal编程技术网

理解java中的接口、类和构造函数

理解java中的接口、类和构造函数,java,class,interface,Java,Class,Interface,现在我正试图用一个表示二进制数的int来实现 我知道我不应该对string()实现,但假设我需要 这是我到目前为止写的: public class IPAddressInt implements IPAddress { private int ipAdress; public IPAddressInt(int num1,int num2, int num3, int num4){ String n1=Integer.toBinaryString(num1); String n2

现在我正试图用一个表示二进制数的int来实现

我知道我不应该对string()实现
,但假设我需要

这是我到目前为止写的:

public class IPAddressInt implements IPAddress {
private int ipAdress;

public IPAddressInt(int num1,int num2, int num3, int num4){
    String n1=Integer.toBinaryString(num1);
    String n2=Integer.toBinaryString(num2);
    String n3=Integer.toBinaryString(num3);
    String n4=Integer.toBinaryString(num4);
    
    String finalString=n1+n2+n3+n4;
    this.ipAdress=Integer.parseInt(finalString);
}

public String toString() {
    return this.toString();
    
    
}
当我尝试返回
this.ipAdress.toString()时
甚至
ipAddress.toString()
编译器说它
无法调用原语类型int
上的toString(), 当我只写
this.toString()时它可以工作。为什么?我知道int可以转换成字符串,为什么
this
可以工作而整个语句不能工作?不应该是一样的吗?我会得到我想要的吗


谢谢。

调用
this.toString()
会崩溃-它会递归调用相同的方法,没有退出

不能在
ipAddress
上直接调用
toString
的原因是
int
是一种基元类型,不能对基元类型调用方法

要将任何内容转换为字符串,请使用
string.valueOf(ipAddress)
。特别是对于
int
,可以使用
Integer.toString(ipAddress)

现在还不清楚为什么要首先转换成二进制字符串。。。这对我来说不是个好主意。你为什么不使用

ipAddress = (num1 << 24) | (num2 << 16) | (num3 << 8) | num4;

ipAddress=(num1调用
this.toString()
会爆炸-它递归调用相同的方法,没有退出

不能在
ipAddress
上直接调用
toString
的原因是
int
是一种基元类型,不能对基元类型调用方法

要将任何内容转换为字符串,请使用
string.valueOf(ipAddress)
。对于
int
,您可以使用
Integer.toString(ipAddress)

现在还不清楚你为什么要把它转换成二进制字符串…我觉得这不是个好主意。你为什么不使用

ipAddress = (num1 << 24) | (num2 << 16) | (num3 << 8) | num4;
ipAddress=(num1当你说“它能工作”时,我怀疑你的意思是“它能编译”。如果你真的调用
toString
方法,你会得到一个堆栈溢出,或者如果你的编译器/JVM非常聪明,可能只是一个无限循环

要将
int
转换为字符串,请调用
Integer.toString(this.ipAddress)
(但最好正确拼写
地址:-)

[编辑添加:写完这篇文章后,我在另一个答案中看到Jon Skeet更喜欢
String.valueOf
而不是
Integer.toString
。他是一个非常聪明的家伙,可能有一个很好的理由。这意味着,如果你改变
ipAddress
的类型,就不需要太多改变了——呃,我的意思是说
ipAddress
ance.]

当你说“它工作”时,我怀疑你的意思是“它编译”。如果你真的调用
toString
方法,你会得到堆栈溢出,或者如果你的编译器/JVM非常聪明,可能只是一个无限循环

要将
int
转换为字符串,请调用
Integer.toString(this.ipAddress)
(但最好正确拼写
地址:-)


[编辑添加:写完这篇文章后,我在另一个答案中看到Jon Skeet更喜欢
String.valueOf
而不是
Integer.toString
。他是一个非常聪明的家伙,可能有一个很好的理由。这意味着,如果你改变
ipAddress
的类型,就不需要太多改变了——呃,我的意思是说
ipAddress
ance.]

您想要的可能是实现如下的toString方法:

public String toString()
{
    return Integer.toString(ipAdress);
}
编译器所说的是正确的,因为您不能对基元类型调用任何方法。您必须将基元int包装成一个整数,该整数实现了方法toString。上面的代码片段只是一种更有效的调用方式:

return Integer.valueOf(ipAdress).toString();

您可能希望实现如下的toString方法:

public String toString()
{
    return Integer.toString(ipAdress);
}
编译器所说的是正确的,因为您不能对基元类型调用任何方法。您必须将基元int包装成一个整数,该整数实现了方法toString。上面的代码片段只是一种更有效的调用方式:

return Integer.valueOf(ipAdress).toString();

您的toString方法正在递归地调用自身,并将导致堆栈溢出异常

尝试将ipAdress转换为如下字符串:

public String toString()
{
    return Integer.toString(ipAdress);
}
公共字符串toString(){ 返回整数.toString(iPAddress); }


仅供参考,您的变量ipAddress有一个输入错误,应该是ipAddress。

您的toString方法正在递归地调用自身,并将导致堆栈溢出异常

尝试将ipAdress转换为如下字符串:

public String toString()
{
    return Integer.toString(ipAdress);
}
公共字符串toString(){ 返回整数.toString(iPAddress); }


仅供参考,您的变量ipAdress有一个输入错误,应该是ipAddress。

@Jon:谢谢您的评论。您能解释一下创建这种ipAdress的原因吗?用我的方式实现它是错误的吗?我想它不会是整数,因为左边的零不会出现,对吧?@Nir:不清楚您的意思。一般来说,这几乎从来都不是一个好主意使用字符串转换将一个数字形式(在本例中为4个独立的整数)转换为另一个数字形式(在本例中为1个整数)。@Jon:我想了解这个表达式是什么:
ipAddress=(num1@Nir:数字已经以二进制形式存储。我假设您将传入类似于192168,0,1的内容来表示IP地址“192.168.0.1”。左移位和OR将创建四个8位值的单个32位表示形式。@Jon:谢谢。我如何使用这种表示形式?假设我现在想找到第三个原始数字,我该怎么做?我试图在wikipedia中阅读,但这种表示形式覆盖得很差。@Jon:谢谢你的评论。我可以吗你解释过你是怎么创建这种IP地址的吗?用我的方式实现它是错误的吗?我想不会