Tag:

为什么我们需要Java中的抽象类?

为什么我们需要Java中的抽象类? 如果你永远不会把它变成一个物体,为什么一开始呢? 你如何使用它? 为什么会这样? 我用抽象方法想知道同样的事情。 我发现这似乎是一个类似的概念,有一个没有子类的超级类可能无关紧要。

秘密可以隐藏在提供访问凭证的“安全”java类中吗?

这是一个头脑风暴的问题,关于Java(或不是)的可能性。 我想知道是否可以隐藏类中的秘密,并防止再使用Java代码或其任何function (安全性,reflection,序列化,类加载器,你的名字……)来访问它。 以下是我到目前为止的想法: public final class Safe { private String secret; private HashMap validCertificates = new HashMap(); public Safe(String aSecret) { this.secret = aSecret; } public final class Credentials { private String user; private Credentials(String user) { this.user = user; } } public final Credentials getCredential(String user) { // Following test is just for […]

Java类可以拥有的最大方法数是多少?

我正在考虑构建一个非常大的Java类,Java类可以有多少方法限制? 可以进入数以百万计的方法吗? 更新:目的是,做一个“上帝”课程。

访问其他类的对象

我最近选择了Java并遇到了问题。 我有几个具有不同类的文件,但我无法弄清楚如何访问除声明它们之外的文件中的其他类的对象。例如: player.java: public class Player { public static void main(String[] args) { Player player = new Player(); } public int getLocation() { return 2; } } monster.java: public class Monster { public void attackPlayer() { player.getLocation(); } } 我不确定如何从其他文件和类本身有效地访问其他类的这些对象? 我知道我可以将对象设置为静态,然后通过它们制作的类将它们作为变量访问,但这看起来相当直观? 我来自一个不那么面向对象的编程背景,所以我仍然试图理解java的编程风格。

Java:静态字段在内存中的位置?

如果我们将对象存储在对象的静态字段中,JVM如何为它分配内存? 它是否存在于“隐含”(不确定我是否正在使用正确的单词)类对象中? 静态字段与对象字段有何不同?

为什么另一个包中的子类无法访问受保护的方法?

我在两个不同的包中有两个类: package package1; public class Class1 { public void tryMePublic() { } protected void tryMeProtected() { } } package package2; import package1.Class1; public class Class2 extends Class1 { doNow() { Class1 c = new Class1(); c.tryMeProtected(); // ERROR: tryMeProtected() has protected access in Class1 tryMeProtected(); // No error } } 我可以理解为什么调用tryMeProtected()没有错误,因为Class2看到这个方法,因为它inheritance自Class1 。 但是为什么Class2的对象不能使用c.tryMeProtected();在Class1的对象上访问此方法c.tryMeProtected(); ?

为什么我们不能在没有匿名类方法的情况下在java中实例化接口或抽象类?

我知道,除了使用匿名类方法之外,我们无法在java中实例化接口或抽象类,但它背后的原因是什么?

抽象类: – 实时例子

最近在一次采访中我被问到一个非常笼统的问题“java中的抽象是什么”。我给出了定义,然后在摘要上引入了一些其他问题,如抽象方法和抽象方法与具体方法之间的区别等。最后,面试官要求给出一个实时的例子,当我应该使用或定义一个类作为抽象时。我感到困惑。我举了一些例子,但他不相信。 我用谷歌搜索,但没有找到真正的解决方案。 那么有人可以给我实时的例子,即当他在他/她的项目中将一个类定义为抽象时,为什么? 谢谢。

如何在Java中更改默认类加载器?

假设我有三个类,example.ClassA,example.ClassB和example.ClassLoader。 ClassA打印出HelloWorld,ClassB导入example.ClassA并调用其main()方法。 如果我这样做: java -cp Example.jar -Djava.system.class.loader = example.ClassLoader example.ClassA 它工作并使用我的类加载器。 但是,如果我这样做: java -cp Example.jar -Djava.system.class.loader = example.ClassLoader example.ClassB ClassB使用我的类加载器,但ClassA(由ClassB导入)使用默认的类加载器加载。 有没有办法强制Java总是使用我的类加载器(除非明确指定另一个类加载器)? 编辑:感谢下面的PaŭloEbermann的回答,我认为问题是我正在调用父类加载器(URLClassLoader)来加载我不需要触摸的类,并且那些加载的类设置为它的上下文类加载器,因此从它导入的类使用我的自定义加载器的父类加载器。 (令人困惑,抱歉)现在我可以通过手动读取每个类来使它工作,但是它似乎是多余的,因为我直接复制了URLClassLoader的代码。 有没有办法告诉父类加载器查找和定义类,但是将Class的上下文类加载器设置为自定义类?

为case类的equals / hashCode方法生成了什么代码?

我有一些Java代码,我正在翻译成Scala。 代码由一些不可变的类组成,这些类符合Scala中的case class的目的。 但我不想引入错误,因此我想确保为equals和hashCode生成的代码/行为与当前实现等效。 我已经查看了“Scala编程”,但它只是说 第三,编译器将方法的“自然”实现添加到String,hashCode,并且等于你的类。