对于java类,使用" new"之间有什么区别?在构造函数内部并使用" new"课外?举个例子,
Sub test1()
Dim ws As Worksheet
Dim res As Worksheet
Dim val As String
Set ws = ActiveSheet
Sheets.Add
Set res = ActiveSheet
res.Name = "Results"
ws.Select
Range("B1").Select
While ActiveCell.Value <> ""
If Len(ActiveCell.Value) = 12 Then
val = ActiveCell.Value
res.Select
ActiveCell.Value = val
ActiveCell.Offset(1, 0).Select
ws.Select
ActiveCell.Offset(1, 0).Select
Else
ActiveCell.Offset(1, 0).Select
End If
Wend
res.Select
Columns("A:A").EntireColumn.AutoFit
Range("A1").Select
End Sub
maxPower是在构造函数外部的类中创建的。但是,movingEnergy在构造函数中实例化。这两种方法有什么不同。
答案 0 :(得分:3)
字段的新操作(构造函数外部)在构造函数之前执行。
答案 1 :(得分:0)
关键字new
以您正在创建的对象的大小分配内存。例如,int[] arr = new int[5];
将为arr
分配5 * 4字节的内存。
你在做什么没有区别。
答案 2 :(得分:0)
private double [] maxPower = new double[numOfComponent];
创建一个新的double
数组,其中包含numOfComponent
个元素。
movingEnergy = new CircularFifoQueue<ArrayList<Double>>(windowSize);
此处new
个关键字调用CircularFifoQueue
构造函数,从而创建新的CircularFifoQueue
对象并将其分配给movingEnergy
变量
如果您对执行顺序感兴趣,请参阅Are fields initialized before constructor code is run in Java?。
- 静态变量初始化和静态初始化块,in 文本顺序,如果该类以前没有被初始化。
- 构造函数中的super()调用,无论是显式还是隐式。
- 实例变量初始化程序和实例初始化程序段,按文本顺序排列。
- super()之后的剩余构造函数体。
醇>请参阅Java虚拟机规范的第2.17.5-6节。
答案 3 :(得分:0)
逻辑上,编译器会将您的代码重新排列为以下代码。它添加了您未指定的super()
调用,并将所有初始值设定项移动到构造函数中。
因此,确实没有区别。
然而,在构造函数中初始化字段将允许您使用构造函数参数和/或中间计算。如果您不需要,那么无论是在字段声明中还是在构造函数中初始化字段都没有区别。
至于确切的订单对象对象初始化,请参阅以下答案:https://stackoverflow.com/a/23094875/5221149
abstract class PowerStat{
final int numOfComponent;
final int windowSize;
CircularFifoQueue<ArrayList<Double>> movingEnergy;
CircularFifoQueue<Double> movingStartTimes;
CircularFifoQueue<Double> movingEndTimes;
private double [] maxPower;
private double [] minPower;
public ArrayList<Double> intervalEnergy;
private ArrayList<UsageNode> usageList;
public PowerStat(){
super();
this.numOfComponent = UserProperty.numOfComponent;
this.windowSize = 8;
this.maxPower = new double[this.numOfComponent];
this.minPower = new double[this.numOfComponent];
this.intervalEnergy = new ArrayList<Double>(this.numOfComponent);
this.usageList = new ArrayList<UsageNode>();
setUsageList(new ArrayList<UsageNode>());
for (int i = 0; i < numOfComponent; i++) {
intervalEnergy.add(0.0);
}
movingEnergy = new CircularFifoQueue<ArrayList<Double>>(windowSize);
movingStartTimes = new CircularFifoQueue<Double>(windowSize);
movingEndTimes = new CircularFifoQueue<Double>(windowSize);
}
}