java正确理解OOP的概念
嗨,伙计们,我已经搜索了很多,但对我找到的并不满意。希望这是问这个问题的好地方 我现在只做了一小段时间的Java(从C改成了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
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。