任何人都可以解释以下程序的输出吗?我认为构造函数在实例变量之前被初始化.所以我期待输出为"XZYY".
class X {
Y b = new Y();
X() {
System.out.print("X");
}
}
class Y {
Y() {
System.out.print("Y");
}
}
public class Z extends X {
Y y = new Y();
Z() {
System.out.print("Z");
}
public static void main(String[] args) {
new Z();
}
}
Run Code Online (Sandbox Code Playgroud) 我想知道在初始化对象如ArrayList <>和字段声明或构造函数中的东西是否有区别.
内存使用,性能或类似内容是否存在差异,还是完全相同?
选项1:
class MyClass {
private List<String> strings = new ArrayList<String>();
}
Run Code Online (Sandbox Code Playgroud)
选项2:
class MyClass {
private List<String> strings;
public MyClass() {
strings = new ArrayList<String>();
}
}
Run Code Online (Sandbox Code Playgroud)
这可能是一个愚蠢的问题,或者是一个非常基本的问题,但我喜欢从一开始就建立,我喜欢理解我所看到的一切.
每当我尝试将一个元素推入堆栈
时,当我从构造函数中获取数组大小时,它是通过异常但是当我在声明时分配大小它是否正常工作?
public class Stack {
public int size;
public Stack(int size)
{
this.size = size;
}
public int[] arr = new int[size];
public int top = -1;
// Methods
public void push(int value)
{
top++;
arr[top] = value;
}
}
Run Code Online (Sandbox Code Playgroud) 我在编写一个可以从文件中读取和打印的类时遇到问题.看起来传递给构造函数的文件名实际上并没有分配给fileName变量,或者我可能在File和Scanner对象上做错了.我真的不知道什么是错的或如何解决它.我是初学者,只是在班上使用文件,所以我可能会遗漏一些明显的东西.感谢任何人的帮助:)
这是我的所有代码和下面的分配说明.
任务是:
使用以下方法编写名为FileDisplay的类:
构造函数:接受文件名作为参数
displayHead:此方法应仅显示文件内容的前五行.如果文件包含少于五行,则应显示文件的全部内容.
displayContents:此方法应显示文件的全部内容,其名称已传递给构造函数.
- displayWithLineNumbers:此方法应显示文件的内容,其名称已传递给构造函数.每行之前应该有一个行号,后面跟一个冒号.行号应从1开始.
我的代码:
import java.io.*;
import java.util.Scanner;
public class FileDisplay {
// just using little random .txt files to test it
private String fileName = "example1.txt";
public FileDisplay(String fileName) throws IOException {
this.fileName = fileName;
}
File file = new File(fileName);
Scanner inputFile = new Scanner(file);
// displays first 5 lines of file
public void displayHead() {
for (int x = 0; x < 5 && inputFile.hasNext(); x++) {
System.out.println(" " + inputFile.nextLine());
} …Run Code Online (Sandbox Code Playgroud) 我已经习惯了C++,你必须在构造函数中实例化所有东西,但最近的一个实现让我对java非常困惑.我只是在构造函数中实例化了一些东西,然后我意识到这个语法是有效的:
public class DebateCompetition {
private boolean isAdvanced;
ArrayList<Debate> debates = new ArrayList<Debate>(); //<------
ArrayList<Team> teams;
ArrayList<School> schools;
public void addSchool(School s) {
schools.add(s);
}
}
Run Code Online (Sandbox Code Playgroud)
但这留下了很多问题.第一:它做了什么?第二:何时被new ArrayList<Debate>()召唤?第三:这是最佳做法吗?