Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.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正确理解OOP的概念_Java_Oop - Fatal编程技术网

java正确理解OOP的概念

java正确理解OOP的概念,java,oop,Java,Oop,嗨,伙计们,我已经搜索了很多,但对我找到的并不满意。希望这是问这个问题的好地方 我现在只做了一小段时间的Java(从C改成了Java),在掌握如何最好地为OOP构建代码时遇到了一些问题 让我们举一个简单的例子: 如果我正在使用一些预定义的字符串(比如文件路径或错误消息),那么我当前正在创建一个自己的类,例如: private static final String libPath = "\\this\\is\\a\\path\\"; private static final String not

嗨,伙计们,我已经搜索了很多,但对我找到的并不满意。希望这是问这个问题的好地方

我现在只做了一小段时间的Java(从C改成了Java),在掌握如何最好地为OOP构建代码时遇到了一些问题

让我们举一个简单的例子:

如果我正在使用一些预定义的字符串(比如文件路径或错误消息),那么我当前正在创建一个自己的类,例如:

private static final String libPath = "\\this\\is\\a\\path\\";
private static final String notFoundMessage = "This hasn't been found";

public static String getLibPath() {
return libPath;
}

public static final String getNotFoundMessage() {
return notFoundMessage;
}

...
创建一张地图,将所有内容添加到地图中,然后按键获取地图是否更好? 还是我完全错了

第二个示例: 假设我在某个地方返回了一个错误字符串

public String getSomething() {
  if (something != null) {
    return something;
  } else {
   //handle error, return string below
  }
return "I HAVE AN ERROR";
}
在我的程序中的任何其他地方,我都在检查返回值:

if (!string.equals("I HAVE AN ERROR")) {
//do something
}
else {
// handle error
}
这显然是一种不好的方式,一旦错误消息改变,就必须更改代码两次。是的,我可以用和第一个例子中一样的方法定义错误字符串,但是我对它不满意,我也走到了死胡同


很高兴听到你的一些建议如何正确地做OOP

第一个示例:

private static final String libPath = "\\this\\is\\a\\path\\";
private static final String notFoundMessage = "This hasn't been found";

public static String getLibPath() {
  return libPath;
}

public static final String getNotFoundMessage() {
  return notFoundMessage;
}

...
在这种情况下,无需创建地图。这是正确的做法。请注意,
libPath
的定义如下:

private static final Path libPath = Paths.get("this", "is", "a", "path");
try {
  myObject.getSomething();
} catch(ElementNotFoundException e) {
  //handle error
}
(类
Path
自Java 7以来就存在,当前版本为Java 8)

第二个示例

public String getSomething() {
  if (something != null) {
    return something;
  } else {
    //handle error, return string below
  }
  return "I HAVE AN ERROR";
}
否:在Java中从不返回错误代码。更喜欢使用异常

例如:

public class ElementNotFoundException extends Exception {
  ...
}

public String getSomething() {
  if (something == null) {
    throw new ElementNotFoundException();
  } else {
    return something;
  }

}
然后,您可以这样处理异常:

private static final Path libPath = Paths.get("this", "is", "a", "path");
try {
  myObject.getSomething();
} catch(ElementNotFoundException e) {
  //handle error
}

对于第一个示例,请看国际化:

您可以使用静态或映射,但迟早需要用多种语言显示消息

对于第二个示例,最好使用异常,因为它们是在异常情况(如错误)发生时使用的


无论如何,除了例外情况,请注意不要将其用作流控制结构:

以下是一些在代码中处理常量的示例:

1.等级 2.接口
感谢您的快速响应和有关Paths.get的信息。关于抛出异常。由于您的ElementNotFoundException()似乎是一个未修补的异常(RuntimeException),我不知道如何将抛出异常优先于处理错误,这样用户就不会真正掌握它。如果你能具体说明一下,我会很高兴的more@TwelveDollar在本例中,您自己定义异常。因此,您可以决定它是否扩展
RuntimeException
。不扩展RuntimeException将强制开发人员处理该异常。错误代码是邪恶的,因为它不会警告,如果它没有被捕获,并导致无声的错误。是的,你最近的编辑已经回答了我的问题。我对没有添加try/catch来处理异常感到困惑(这是我优于RuntimeException的首选方法)。再次感谢Hanks,这看起来更像是“C”方式,不使用接口定义任意常量。使用公共类和静态导入。因为
MyClass
不是
MyConstantsHolder
的实现@OlivierGrégoire接口只是访问常量的一种方便方式。编写代码时,静态导入可能会很痛苦。OP明确地询问如何执行正确的OOP。这不是正确的OOP。