我正在使用Notepad ++编写我的Java代码和命令提示符来编译和运行它.以下是我的示例Java代码,
package abraKadabra;
public class SuperClass{
protected int anInstance;
public static void main(String [] abc){
System.out.println("Hello");
}
}
Run Code Online (Sandbox Code Playgroud)
但是,此文件位于以下文件夹结构中:
"usingprotected\superPkg"(usingProtected是C中层次结构中的某个文件夹:)
所以,我的包名在这里应该像usingProtected.superPkg而不是abraKadabra.
但是,当我从命令提示符编译此Java代码时,它编译得很好,没有错误或警告.为什么会这样?软件包名称是否应该遵循文件夹结构?如果它应该,它会如何坚持?
例如,如果我的包名是usingProtected.superPkg,编译器是否会以相反的顺序检查.目前的工作目录应该是superPkg,那么父目录应该是useProtected并完成它.它是如何用包名检查文件夹结构的?
据说java中的静态块只在加载该类时运行一次.但它究竟意味着什么?在哪一点上是由JVM(Java虚拟机)加载的类?
是在调用该类中的main方法时?并且当main方法开始执行时,是否还加载了同一类的所有超类?
考虑A扩展B和B扩展C.所有都有静态块.如果A有main方法,那么静态块的执行顺序是什么?
我正在使用此链接使用DOM生成XML文件.它说"Xerces解析器与JDK 1.5发行版捆绑在一起.所以你不需要单独下载解析器."
但是,当我在Eclipse Helios中编写以下行时,即使我的系统中有Java 1.6,它也会产生编译时错误.
import org.apache.xml.serialize.XMLSerializer;
Run Code Online (Sandbox Code Playgroud)
为什么会这样?
Eclipse如何在内部使用Apache(或Tomcat).因为它没有在Tomcat的"webapps"目录中部署我们的Web应用程序.那怎么办呢?
class WrongOverloading{
void something(String [] a){ .. }
Integer something(String... aaa){ return 1;}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码不能编译!编译器说这些是重复的方法.那么使用String数组或String var-args是否完全相同?
它们是如何在内部实施的?
List接口的lastIndexOf()方法接受Object类型的参数.
但是,add()方法接受E类型的参数(这是在创建List时定义的List的泛型类型)因为add()只接受E,所以这会阻止开发人员(或用户)在编译时自己将任何不兼容的对象添加到列表中.
现在,Java doc说如果传递的对象不兼容,lastIndexOf()可以抛出ClassCastException.但是,当我在Eclipse Helios中运行以下代码时,我没有得到任何异常: -
package scjp.collection.list;
import java.util.ArrayList;
import java.util.List;
public class LastIndexOf {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("some");
list.add("thing");
list.add("at");
list.add("last");
list.add("and");
list.add("at");
list.add("again");
System.out.println(list.lastIndexOf("at"));
System.out.println(list.lastIndexOf(10)); // # 1
System.out.println(list.lastIndexOf(new LastIndexOf())); // # 2
}
}
Run Code Online (Sandbox Code Playgroud)
在第1行和第2行,我已将不兼容的对象传递给我的List类型为String的对象.但是,我得到的输出是: -
5
-1
-1
Run Code Online (Sandbox Code Playgroud)
我没有得到ClassCastException.
如果lastIndexOf()方法接受了E类型的对象而不是Object类型的对象,那么这只能在编译时被阻止.为什么不这样做?
Java创建者必须考虑到如果它接受E(而不是Object)可能会出现的问题.会有什么害处?
以下是我的ProtectedConstructor.java源代码:
package protectCon;
public class ProtectedConstructor{
public int nothing;
ProtectedConstructor(){
nothing = 0;
}
}
Run Code Online (Sandbox Code Playgroud)
以下是UsingProtectedCon.java来源:
package other;
import protectcon.ProtectedConstructor;
public class UsingProtectedCon extends ProtectedConstructor{ //**Line 4**
public static void main(String... a) {
}
}
Run Code Online (Sandbox Code Playgroud)
当我编译时UsingProtectedCon.java,我在上面的第4行得到错误.它说ProtectedConstructor()不公开; 所以不能在包外访问.
但是,由于我的班级是公开的,我不应该将其扩展到包外.无论如何我不创建它的任何实例.
现在,如果我将ProtectedConstructor类的构造函数作为public或者protected然后代码编译好没有错误.
那么,为什么是必要甚至构造是public或protected,而不是仅仅有默认的访问?
Eclipse表示,由于泛型橡皮擦,Type Parameter不允许使用instanceof操作.
我同意在运行时,不会保留类型信息.但请考虑以下类的通用声明:
class SomeClass<T>{
T t;
SomeClass(Object o){
System.out.println(o instanceof T); // Illegal
}
}
Run Code Online (Sandbox Code Playgroud)
在运行时,不会出现T!但是如果我实例化这个类型为Integer的类,那么相应的对象将具有Integer类型的字段t.
那么,为什么我不能用T检查变量的类型,它可以在运行时被Integer替换.而我实际上会做类似"o instanceof Integer"的事情.
在哪些情况下,允许带有类型参数的instanceof会导致故障,从而禁止它?
我想通过双击运行Jar文件.
以下是其中唯一存在的Java类文件.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Sysout{
public static void main(String[] args) throws IOException{
System.out.println("Hello World!");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String msg = br.readLine();
System.out.println(msg);
br.read();
}
}
Run Code Online (Sandbox Code Playgroud)
并且Manifest文件已定义Main-Class.
使用此链接,我通过双击批处理文件成功运行了Jar文件.这将打开命令提示符并运行定义的主类.
但是,如果我直接双击Jar文件,则没有任何反应.我也检查了这个链接并将我的.jar与javaw.exe相关联. 此链接也提示相同.还尝试将.jar与java.exe相关联
发生的是命令提示符打开几分之一秒并消失.
即使我希望用户输入一些数据,双击操作也不会等待用户输入任何内容.
问题出在哪儿?
java ×9
generics ×2
arrays ×1
classloader ×1
console ×1
constructor ×1
default ×1
directory ×1
dom ×1
eclipse ×1
inheritance ×1
instanceof ×1
jar ×1
java-ee ×1
list ×1
package ×1
static-block ×1
subdirectory ×1
tomcat ×1
xerces ×1
xml ×1