可以通过以下方式声明和初始化String数组:
String[] str = {"A", "B"};
Run Code Online (Sandbox Code Playgroud)
但是对于一个接受String数组作为参数的方法,为什么不能在那里使用它?
例如:如果在下面的代码中,我将show()的调用替换show(str);为show({"A" "B"});,则显示编译器错误.为什么?
public class StringArray {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String[] str = {"A", "B"};
show(str);
}
static void show(String[] s) {
System.out.println(s[0] + s[1]);
}
}
Run Code Online (Sandbox Code Playgroud)
显示的编译器错误是:
StringArray.java:9: illegal start of expression
show({"A", "B"});
^
StringArray.java:9: ';' expected
show({"A", "B"});
^
StringArray.java:9: illegal start of expression
show({"A", "B"});
^
StringArray.java:9: ';' expected
show({"A", "B"});
^
StringArray.java:9: …Run Code Online (Sandbox Code Playgroud) 我刚刚开始使用AWT并在其中制作了一个简单的程序,它工作正常,但它在eclipse中显示了一条我不明白的警告信息:
可序列化类TestGUI不声明long类型的静态最终serialVersionUID字段
我知道警告消息与AWT无关,并且没有必要发布我的整个代码,但是当我试图制作代码的SSCCE时,警告也消失了.由于我不知道为什么会产生这个警告,所以我不知道在我的SSCCE中保留哪一部分.因此整个代码!
我的代码是:
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class TestGUI extends Frame {
/**
* @param args
*/
private int x = 50;
private int y = 50;
TestGUI(String s) {
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent we) {
setVisible(false);
System.exit(0);
}
});
addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent me) {
x = me.getX();
y = me.getY();
repaint();
}
});
}
public void paint(Graphics g) {
g.drawString("Hello Princess", 100, 100);
g.drawString("Mouse …Run Code Online (Sandbox Code Playgroud) 将非静态内部类声明为什么意味着什么final?
我在google和stackoverflow.com上尝试过很多链接,但是所有这些链接似乎都在处理内部类访问最终成员而不是最终内部类本身.我在谷歌上发现了这个链接,但即使它没有解释它.
Thanx提前!
class TestFormat
{
public static void main(String[] args)
{
System.out.println("hello");
}
}
Run Code Online (Sandbox Code Playgroud)
在上面的简单代码中,out对象是类型的java.io.PrintStream.该println()方法也是类PrintStream.PrintStream驻留在不同的包中,然后java.lang是默认的java包.
我的问题是我们如何能够使用java.io我们甚至没有导入的package()类的方法?假设该类的对象已经提供给我们,但这是否意味着我们只需要导入一个包来从该包创建一个类的对象,而不是之后使用它的方法?
Thnax提前!
我知道这是一个非常讨厌的话题,但我需要澄清一些事情,所以请耐心等待一分钟.
静态方法与任何其他方法一样继承,并遵循相同的关于访问修饰符的继承规则(不继承私有方法等)
静态方法没有被覆盖,它们被重新定义.如果一个子类定义了一个与超类中具有相同签名的静态方法,则称它是遮蔽或隐藏超类的版本而不是覆盖它,因为它们不像实例方法那样是多态的.
重新定义的静态方法似乎仍然遵循一些(如果不是全部)超越规则.
首先,重新定义的静态方法不能比超类的静态方法更多地限制访问.为什么??
其次,返回类型在超类和子类的方法中也必须兼容.例如:
class Test2 {
static void show() {
System.out.println("Test2 static show");
}
}
public class StaticTest extends Test2 {
static StaticTest show() {
System.out.println("StaticTest static show");
return new StaticTest();
}
public static void main(String[] args) {
}
}
Run Code Online (Sandbox Code Playgroud)
在eclipse中它显示了一个错误:
The return type is incompatible with Test2.show()
为什么?
和第三,是否有遵循了重新定义静态方法它们相同压倒一切的,什么是对这些规则的原因,规则的任何其他规则?
Thanx提前!!