我正在攻读我的学士学位,我的教授给了我一个任务,他说:创建一个课程而不使用任何访问修饰符或界面关键字,其对象无法创建。
我通过谷歌但无法找到解决方案。如何在Java中完成?
答案 0 :(得分:12)
枚举是类(JLS§8.9),无法实例化且无法进行子类化;只需创建一个没有任何值的文件:
enum Foo {}
取决于解释的其他可能性:
JonK和T.J. Crowder考虑从构造函数中抛出异常:
final class Example {
Example() {
throw new Exception();
}
}
但nick zoum指出在异常之前仍然创建并暂时存在一个实例,即使它不能(在上面的例子中)保留。
nick zoum考虑abstract
:
abstract class Example {
}
...但是T.J. Crowder指出abstract
类可以是子类(它们不能是final
),而子类实例"是"超类实例。
答案 1 :(得分:6)
我不是一个Java人,但其他答案给了我这个想法:
import java.util.*;
import java.lang.*;
import java.io.*;
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
Object o = new Problematic();
// unreachable
}
}
class Problematic
{
static
{
int i = 1 / 0 ;
}
}
我很确定没有办法让Problematic
和幸存......
(注意,当我在静态初始化程序中尝试throw new Exception();
时,它将无法编译)
答案 2 :(得分:3)
答案 3 :(得分:0)
匿名内部课程应该是答案。
示例:强>
$date = DateTime::createFromFormat('mY', $data->month.$data->year);
$curdate = new DateTime(date('mY'));
$diff = $curdate->diff($date);
echo('days:' .$diff->days);
echo('months:' .$diff->m);
创建一个类,但它的名称由扩展public abstract class HelloWorld{
abstract void x();
public static void main(String []args){
System.out.println("Hello World");
HelloWorld h = new HelloWorld(){
void x(){
System.out.println(" ");
}
};
h.x();
}
}
类的编译器决定,并提供HelloWorld
方法的实现。
答案 4 :(得分:0)
没有准确地听到你的教授如何措辞,"没有使用任何访问修饰符"可能意味着他们正在试图教你如何"默认"访问修饰符有效吗?
在哪种情况下:
package mypackage.nocreate;
class MyClass {
}
然后:
package mypackage;
import mypackage.nocreate.MyClass;
public class Test {
public static void main(String[] args) {
new MyClass(); // not allowed - in a different package
}
}
你可以说 - 至少在源代码中 - 没有使用任何访问修饰符:)