Tag: 构造函数

当Base类构造函数在Java中调用重写方法时,Derived类对象的状态

请参考下面的Java代码: class Base{ Base(){ System.out.println(“Base Constructor”); method(); } void method(){} } class Derived extends Base{ int var = 2; Derived(){ System.out.println(“Derived Constructor”); } @Override void method(){ System.out.println(“var = “+var); } } class Test2{ public static void main(String[] args) { Derived b = new Derived(); } } 看到的输出是: Base Constructor var = 0 Derived Constructor 我认为var […]

Java构造函数没有正确编译

我是Java的新手,最近刚开始上课,所以仍然掌握一切是如何运作的,所以请在我尝试理解所有这些新材料时请耐心等待。 我的任务要求银行账户能够从支票和储蓄账户转账。 交易存储在arraylist中并为用户设置以指定何时转移资金。 用于检查和保存的银行帐户类工作正常但我创建的transferervice类在我正在使用的ide netbeans中没有正确编译。 我的教师重写了我的一些代码以帮助但它仍然无法编译,提示似乎没有修复错误。 我得到的Transaction是抽象的,无法实例化。 我不太清楚我能做些什么来解决这个错误,所以任何帮助都会非常感激。 import java.util.ArrayList; import java.util.Date; import javax.transaction.Transaction; public class TransferService { private Date currentDate; private ArrayList completedTransactions; private ArrayList pendingTransactions; public void TransferService(){ this.currentDate = new Date(); this.completedTransactions = new ArrayList(); this.pendingTransactions = new ArrayList(); } public TransferService(BankAccount to, BankAccount from, double amount, Date when) throws InsufficientFundsException(){ if […]

受保护的构造函数和可访问性

如果它的子节点位于不同的包中,为什么我们不能用受保护的构造函数实例化一个类? 如果可以访问受保护的变量和方法,为什么同一规则也不适用于受保护的构造函数? PACK1: package pack1; public class A { private int a; protected int b; public int c; protected A() { a = 10; b = 20; c = 30; } } PACK2: package pack2; import pack1.A; class B extends A { public void test() { A obj = new A(); // gives compilation error; […]

用Java构建一个拷贝构造函数

如何构建一个接收另一个点(x,y)并复制其值的复制构造函数? 我决定签名: public Point1 (Point1 other) ,但我不知道写什么… Point类看起来像: public class Point1 { private int _x , _y; public Point1 (Point1 other) { … … } //other more constructors here… } 我试过了: public Point1 (Point1 other) { _x = other._x ; _y = other._y; } 但我几乎可以肯定我能做得更好.. 日Thnx

`this`如何通过发布内部类实例引用外部类转义?

之前的问题略有不同, 但要求是/否答案,但我正在寻找书中遗漏的解释(Java Concurrency in Practice),这个明显的大错误将如何被恶意或意外地利用。 可以发布对象或其内部状态的最终机制是发布内部类实例,如清单3.7中的ThisEscape所示。 当ThisEscape发布EventListener时,它也隐式发布封闭的ThisEscape实例,因为内部类实例包含对封闭实例的隐藏引用 。 清单3.7。 隐式允许此引用转义。 不要这样做。 public class ThisEscape { public ThisEscape(EventSource source) { source.registerListener( new EventListener() { public void onEvent(Event e) { doSomething(e); } }); } } 3.2.1。 安全施工实践 ThisEscape说明了一个重要的特殊情况 – 当它在构造过程中引用转义时。 发布内部EventListener实例时,封闭的ThisEscape实例也是如此。 但是,只有在构造函数返回后,对象才处于可预测的一致状态,因此从构造函数中发布对象可以发布未完全构造的对象。 即使发布是构造函数中的最后一个语句,也是如此。 如果此参考在施工期间逃逸,则认为该物体构造不当。[8] [8]更具体地说,在构造函数返回之前,此引用不应从线程中转义。 这个引用可以由构造函数存储在某处,只要它在构造之后不被另一个线程使用。 清单3.8中的SafeListener使用了这种技术。 在施工期间不要让此参考物逃逸。 在完成构建之前,有人会如何编写代码来到OuterClass? 在第一段中用斜体字提到的hidden inner class reference是什么?

‘new’关键字在Java中实际上做了什么,我应该避免创建新对象吗?

我刚刚注册了,但是自从我开始学习计算机编程以来,我一直在很好地利用这个网站,我一直在自学并考虑我的一点兴趣。 我确实在寻找类似的问题,但实际上我找不到我想要的答案。 现在,意识到,在Java(这是我建议开始使用的语言)中,根据需要声明和实例化变量被认为是很好的编程习惯,请考虑以下几行: class MyClass { void myMethod() { AnotherClass myObject = new AnotherClass(); myObject.doStuff(); } } 现在,假设我在运行程序时调用了myMethod()10次,那有什么用呢? 每次创建一个新对象吗? 是否每次都重新分配myObject变量? 编译器是否会跳过代码,因为它看到对象已经创建并且变量myObject已经分配给了这样的对象? 简而言之:只有当我打算只调用一次该方法时,我才能编写这样的代码吗? 我知道……因为问我这么愚蠢的问题而感到羞耻,但请给我一个机会! 提前致谢! —————————编辑———————- ——- 所以现在我应该在得到新答案后编辑这篇文章吗? 顺便说一下…天哪,很快,非常感谢! 哇我很困惑,我想这是因为我一直在教自己……不管怎么说,每次为myObject变量创建一个new AnotherClass对象都没用? 我的意思是,如果我想在整个程序中使用myObject变量,那么我不应该声明它一劳永逸吗? 也许在另一种方法中,我只会调用一次? 因为据我所知,每次调用myMethod()都会创建一个新对象,从而覆盖myObject自己的属性,即变量,或者我只是在胡说八道? —————————编辑———————- ——- 我从一些我现在不记得的网站上读到这段代码后出现了疑问: public class DataBase { private static String buf, retString = “\n”; private static File file = new File(“test.txt”); public […]

Java中的构造函数同步

有人告诉我,Java构造函数是同步的,因此在构造期间无法同时访问它,我想知道:如果我有一个构造函数将对象存储在一个映射中,另一个线程在构造之前从该映射中检索它完成后,该线程会阻塞直到构造函数完成吗? 让我演示一些代码: public class Test { private static final Map testsById = Collections.synchronizedMap(new HashMap()); private static final AtomicInteger atomicIdGenerator = new AtomicInteger(); private final int id; public Test() { this.id = atomicIdGenerator.getAndIncrement(); testsById.put(this.id, this); // Some lengthy operation to fully initialize this object } public static Test getTestById(int id) { return testsById.get(id); } } 假设put […]

Java中的inheritance – 创建子类的对象也会调用超类的构造函数。 为什么呢?

我有一个关于Javainheritance的问题。 我有两个A和B类, B类inheritance自A: public class A { public A() { System.out.println(“Hi!”); } } public class B extends A { public B() { System.out.println(“Bye!”); } public static void main(String[] args) { B b = new B(); } } 当我运行程序B时,输出是: Hi! Bye! 问题 :为什么在创建class B对象时调用class A的构造函数 ? 我知道Binheritance了A中的所有实例或类变量以及所有方法,在这个意义上,B的对象具有A的所有特征以及B中定义的一些其他特征。但是,我不知道并且没有’我想象当我创建一个B类型的对象时,也会调用A的构造函数。 所以写下这个: B b = new B(); 创建两个对象 – 一个是B类,另一个是A类 […]