Tag: oop

为什么我们在匿名内部类中使用final关键字?

我正在准备S(O)CJP,以及Sierra和Bates的书。 关于内部类(方法本地或匿名),他们说我们无法访问局部变量,因为它们存在于堆栈上,而类存在于堆上并且可以由方法返回,然后尝试访问这些变量由于方法已经结束,它们在堆栈上但不再存在… 众所周知,我们可以通过使用final关键字来绕过这一点。 这就是他们在书中所说的,但他们并没有真正解释最终关键字的影响…据我所知,在方法局部变量上使用final关键字并不能使它在堆上运行。那么这个类怎么能够访问仍然存在于堆栈中的最终变量,而不会有更多的堆栈??? 我想在内部类中应该有这种最终局部变量的某种“复制”。 由于价值不能改变,为什么不重复这些信息…有人可以确认这个或告诉我,如果我错过了什么?

在构造函数中尝试/捕获 – 推荐的做法?

我一直很好奇的东西 public class FileDataValidator { private String[] lineData; public FileDataValidator(String[] lineData){ this.lineData = lineData; removeLeadingAndTrailingQuotes(); try { validateName(); validateAge(); validateTown(); } catch(InvalidFormatException e) { e.printStackTrace(); } } //validation methods below all throwing InvalidFormatException 不建议在我的构造函数中包含try / catch块吗? 我知道我可以让Constructor将Exception抛回给调用者。 你们在调用像我在构造函数中所做的那样的方法时,你们更喜欢什么? 在调用类中,您更喜欢创建FileDataValidator的实例并在该实例上调用那里的方法吗? 只是有兴趣听一些反馈!

Java中的关联与聚合与组合

我试图理解这些术语的含义。 我带来了几个例子: 聚合:Facebook 有一个用户 组成:facebook 中的每个用户都有一个会话。 协会:人们使用浏览器 但是我很困惑,并且使用了我的例子。 为什么不能用户使用 Facebook帐户或Facebook 使用会话来validation用户? 在OOP方面是错误的吗? 我错过了什么概念?

从子类访问父类的私有实例变量?

假设我们有一个类foo ,它有一个私有实例变量bar 。 现在让我们有另一个类, baz ,它extends foo 。 如果foo中没有定义访问器方法, baz非静态方法可以访问foo的变量bar吗? 顺便说一下,我在Java工作。

接口的目的仍在继续

好的,我认为接口是一种强制对象实现一定function的方法,而不必使用inheritance。 有点像合同。 我半看到了他们的观点。 但是,如果您在界面中拥有的是: public interface animal{ void eat(object food); } 并且没有这样的实现,那么每次使用你的界面的人都必须从头开始编写它。 如果你要创建一些所有实现这些function的类,并且实现只是略有不同,这将是一项艰苦的工作。 任何有助于理解这一点的人都表示赞赏,因为我知道这非常重要。

接口隔离原则背后的原因是什么?

接口隔离原则(ISP)表示许多客户端特定接口优于一个通用接口。 为什么这很重要?

Java增量/减量运算符 – 它们的行为方式,function是什么?

我开始学习Java已经3天了。 我有这个程序,我不理解++和–运算符的main方法中的代码。 我甚至不知道该怎么称呼它们(这些操作员的名字)任何人都可以解释我的全部内容。 class Example { public static void main(String[] args) { x=0; x++; System.out.println(x); y=1; y–; System.out.println(y); z=3; ++z; System.out.println(z); } }

从Java中的基类访问子类字段

我有一个名为Geometry的基类,其中存在一个子类Sphere : public class Geometry { String shape_name; String material; public Geometry() { System.out.println(“New geometric object created.”); } } 和一个子类: public class Sphere extends Geometry { Vector3d center; double radius; public Sphere(Vector3d coords, double radius, String sphere_name, String material) { this.center = coords; this.radius = radius; super.shape_name = sphere_name; super.material = material; } } 我有一个包含所有Geometry对象的ArrayList,我想迭代它以检查是否正确读取了文本文件中的数据。 […]

为什么Java中没有本地静态变量?

在C / C ++中,我们使用静态局部变量来维护方法的状态。 但是为什么Java不支持它? 是的,我可以为此目的使用静态字段。 但创建一个只保留一个方法状态的字段是不是有点奇怪?

枚举对象应该是无状态的吗?

按设计,java中的枚举常量是单例,为了并发使用,我通常会创建无状态枚举实例并使用方法参数根据需要注入数据。 例: 目前我正在创建一个具有Operations的REST服务(使用策略模式的变体实现为枚举)。 public enum Operation { DO_THIS() { public Result doSomething(Object theData) { } } , // Other Operations go here ; public abstract Result doSomething(Object theData); } 现在我想收集有关操作被调用频率以及成功频率等的数据。 我可以在使用枚举实例时从外部保存状态,但似乎状态应该保存在Operation中,因为操作应该包含它自己的状态。 现在我的一般问题是: 有状态的枚举实例(除了并发问题)是一个糟糕的设计吗?