出于好奇,我正在查看docjar.com上的一些Java API类的源代码.我看到了java.lang.System类,发现PrintStream"out"(即System.out)有以下代码:
public final static PrintStream out = null;
Run Code Online (Sandbox Code Playgroud)
并在评论中说:
The "standard" output stream. This stream is already
open and ready to accept output data.
Run Code Online (Sandbox Code Playgroud)
我的问题是,我知道最终变量无法修改,所以为什么声明时它为null?当调用"out"方法时,为什么Java不抛出NullPointerException?System.in也是如此.
谢谢你的任何澄清.
在我大学的编程课上,即使我们只使用其中的一个类,我们也只会导入整个包。这可能是因为我们应该使用不提供自动完成功能或任何类似功能的 IDE,所以一般来说它只会使编码更容易。
但是,既然我是一个经验丰富的程序员,那么是将 Java 包作为一个整体导入还是仅导入您需要的那些包中的类更为传统?
例如,而不是:
import java.util.*;
Run Code Online (Sandbox Code Playgroud)
是否习惯说:
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
Run Code Online (Sandbox Code Playgroud)
等等。?
与选择类相比,导入整个包是否使用更多内存?
所以,我会尽力解释这个问题......
基本上,我有一个GUI,其主窗口上有几个按钮(可能大约10个).我将按钮本身放在一个数组中,但是当涉及到处理每个按钮的点击事件时,根据点击哪一个,会发生不同的事情.
而不是做这样的事情:
@Override
public void actionPerformed(ActionEvent e) {
if(e.getActionCommand().equals("Button1Text") { /* do stuff */ }
else if(e.getActionCommand().equals("Button2Text") { /* do stuff */ }
else if(e.getActionCommand().equals("Button3Text") { /* do stuff */ }
else if(e.getActionCommand().equals("Button4Text") { /* do stuff */ }
}
Run Code Online (Sandbox Code Playgroud)
点击时是否有更有效的方法来处理每个按钮的响应?我们的想法是,无论何时点击一个按钮,都会打开一个新窗口,让用户执行与该按钮相关的各种任务.我想在某种程度上getActionCommand()与Class.forName()/ newInstance()方法结合使用,但我不确定是否有另一种(或更简单)的方法来做这样的事情.
基本上我是一个相当开始的Java学生,我必须创建一个包含JComboBox的简单GUI.该窗口看起来像这样:http://i.imgur.com/Jg7j4XD.jpg
当我编译代码(如下所示)时,它确实编译但我在jGRASP中收到以下警告:
Note: Lab6.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
Run Code Online (Sandbox Code Playgroud)
这是我的代码.我知道这意味着我必须指定涉及数据类型的东西(对吗?)但我认为我已经指定了足够的东西.感谢任何能提供帮助的人.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Lab6 extends JFrame
{
private String[] choices = {"Hello", "Good-Bye"};
public Lab6()
{
super("218 Lab 6");
setSize(450,200);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout());
JPanel panelNorth = new JPanel();
panelNorth.add(new JLabel("Welcome Class 218!"));
JComboBox comboBox = new JComboBox(choices);
panelNorth.add(comboBox);
add(panelNorth,BorderLayout.NORTH);
}
public static void main(String[] args)
{
new Lab6();
}
}
Run Code Online (Sandbox Code Playgroud) 我试图在我的程序中工作的概念基本上是:
-Main Window:一个包含程序主框架的主类,即:
public class MainWindow extends JFrame {
...
}
Run Code Online (Sandbox Code Playgroud)
- 其他类:扩展JPanel的类,以便它们可以作为一个对象或实体轻松添加到MainWindow,即:
public class SomePanel extends JPanel {
...
}
Run Code Online (Sandbox Code Playgroud)
这样,我可以说,对于主窗口:
public MainWindow() {
...
SomePanel sp = new SomePanel();
add(sp);
...
}
Run Code Online (Sandbox Code Playgroud)
当触发一些ActionEvent时,我可以说,在MainWindow类中:
// remove the current panel
getContentPane().remove(sp);
// insert the new panel
getContentPane().add(someOtherPanel);
validate();
repaint();
Run Code Online (Sandbox Code Playgroud)
我想这个概念就像CardLayout一样,除了我还没有学习过CardLayout之外,我觉得我试着尝试这个概念.我可能会在某些时候学习CardLayout,这取决于什么更容易.
但我的主要问题是,如果一切都在不同的类中,我如何根据ActionEvent的触发器在远程JPanel之间切换?我认为类之间必须有一些共享组件,但这似乎不起作用.我是在正确的轨道上吗?
我正在尝试删除()和add()的代码似乎没有工作,因为当我触发组件的ActionEvent(添加了侦听器和所有内容)时没有任何变化.我还包括validate()和repaint()但仍然没有任何反应.
我不再是初学者了,但也不是非常有经验的人,所以如果有一些明显我缺少的东西,请耐心等待.谢谢你的帮助.
我成功地能够读取和写入Java中的示例文本文件.但是,当我尝试从文件中读取时,它总是在到达文件末尾时抛出NoSuchElementException.我已经修改了代码以通过打印"Reached end of file"来捕获此异常,但我想知道这是否正常; 我不喜欢它,我觉得我错过了什么.
任何帮助表示赞赏.这是我的代码:
MyFileWriter.java
import java.io.*;
public class MyFileWriter {
public static void main(String[] args) {
File file = new File("MyFile.txt");
PrintWriter out = null;
try {
out = new PrintWriter(file);
out.write("This is a text file.");
} catch(IOException e) {
e.printStackTrace();
System.out.println("IOException: " + e.getMessage());
} finally {
out.flush();
out.close();
}
}
}
Run Code Online (Sandbox Code Playgroud)
MyFileReader.java
import java.io.*;
import java.util.*;
public class MyFileReader {
public static void main(String[] args) {
File file = new File("MyFile.txt");
Scanner scan = null; …Run Code Online (Sandbox Code Playgroud)