为什么我不能以第二种方式使用这个程序

时间:2016-07-31 08:26:51

标签: java static byte non-static

String word = "coding";

/*first way*/
byte[] code = word.getBytes();

/*second way*/
byte[] code2 = String.getBytes(word);

有人可以解释一下为什么我不能用第二种方式声明我的字节数组。 两个人之间有什么区别?

2 个答案:

答案 0 :(得分:2)

  

有人可以解释一下为什么我不能用第二种方式声明我的字节数组吗?

您不能使用第二种方式,因为getBytes类中没有名称为String的静态方法。

但如果第二种方式是必要的,你可以编写自己的变体:

public static byte[] getBytes(String s) {
    return s.getBytes();
}
  

其中两个有什么区别?

  • instance.getBytes()存在,是一种非静态方法,不带任何参数
  • String.getBytes(String s)static方法,需要1 String个参数,不存在。

您似乎无法理解静态和非静态方法之间的区别。非静态方法只能通过对实例的引用来调用。它们不能被类名使用。例如(getBytes()是非静态的):

byte[] bytes = instance.getBytes();
byte[] bytes = ClassName.getBytess();

静态方法可以与名称类和实例引用一起使用。最后一个在概念上是错误的,你应该避免这种情况。 例如(getBytes()static):

byte[] bytes = instance.getBytes(); // think twice before use
byte[] bytes = ClassName.getBytess();

但静态getBytes()的调用看起来很奇怪,不是吗?静态上下文对实例变量一无所知,也没有关于源获取字节的信息。

答案 1 :(得分:0)

概念:您只能直接使用类名调用类的静态成员。但如果它是类的非静态成员,则必须使用引用变量来调用它。

信息: getBytes()不是String类的静态函数。因此,它只能使用引用变量调用。你可以找到它here

说明:你的第一种方式是正确的,第二种方式不正确,因为你在这里直接使用类名来调用它。