一般来说,将私有类声明为静态是否有任何好处?
在什么情况下我想使用以下哪一个而不是另一个?
private static class Foo
{
...
}
Run Code Online (Sandbox Code Playgroud)
VS
private class Foo
{
...
}
Run Code Online (Sandbox Code Playgroud) 我想创建一个带有实用程序方法的类
public class Util {
public static void f (int i) {...}
public static int g (int i, int j) {...}
}
Run Code Online (Sandbox Code Playgroud)
哪个是创建实用程序类的最佳方法?
我应该使用私有构造函数吗?
我应该为抽象类创建实用程序类吗?
我什么都不做?
Effective Java(第二版),第4项,讨论使用私有构造函数来强制执行非实例化.这是本书中的代码示例:
public final class UtilityClass {
private UtilityClass() {
throw new AssertionError();
}
}
Run Code Online (Sandbox Code Playgroud)
然而,AssertionError似乎不是正确的抛出.没有任何东西被"断言",这就是API如何定义AssertionError的使用.
Throwable在这种情况下,通常会有不同的情况吗?通常只会抛出一个Exception带有消息的将军吗?或者为此编写自定义是否常见Exception?
这是非常微不足道的,但我认为从形式和标准的角度来看,我只是对它感到好奇.
我是Java新手.有一件事让我困惑的是为什么有些类需要new实例化,以及为什么其他类不需要实例new化.
例如,我正在查看log4j,它不需要new.
// get a logger instance named "com.foo"
Logger logger = Logger.getLogger("com.foo");
logger.setLevel(Level.INFO);
Run Code Online (Sandbox Code Playgroud)
为什么其他一些课程需要新课程?例如,Employee类:
Employee X = new Employee (John);
X.getwork();
Run Code Online (Sandbox Code Playgroud)
等等
为什么我们不说,Logger logger = new Logger(...);?为什么是我们能够使用它,即使没有new像logger.setLevel()等.
例如,如果我要创建以下类:
public Class ExampleClass {
private static String field1;
private String field2;
public ExampleClass(String field2) {
this.field2 = field2;
}
public static staticMethodExample(String field1) {
this.field1 = field1;
}
}
Run Code Online (Sandbox Code Playgroud)
如果我要创建一个ExampleClass. 该实例是否包含我创建的静态方法和/或字段的代码?
我有一个对象将代表我数据库中一行的一些数据。我想从数据库中的每一行创建这些对象的列表。数据库有数千行。我正在创建的静态方法将在将数据库中的值放入对象构造函数之前对其进行格式化。
我不想通过将方法存储在对象的每个实例中来膨胀代码。因此,如果静态方法确实占用了对象的每个实例中的空间,那么我宁愿创建一个名为ExampleClassBuilder. 并将格式化静态方法放在那里。
可能重复:
Java:静态类?
可以在java中将类实例化为静态吗?
static class c1(){
}
Run Code Online (Sandbox Code Playgroud)
可以这样做吗?我对这个以及非静态内容的内存映射感到困惑.请帮忙
我已经读过我可以定义一个类static,但我不明白为什么我可能需要这样做.静态类有什么用?我什么时候需要使用它们?我会很感激的例子.