当前位置: 技术问答>java相关
一个简单的java问题,大家来抢分吧
来源: 互联网 发布时间:2015-03-23
本文导语: java文件test1.java: public class test1 extends Object { static public String check () { } static public String check2 () { } static public String check3 () { } } 请注意在test1中没有构造函数. java 文件test2.java: p...
java文件test1.java:
public class test1 extends Object {
static public String check () {
}
static public String check2 () {
}
static public String check3 () {
}
}
请注意在test1中没有构造函数.
java 文件test2.java:
public class test2 {
try {
ltest1 = new test1();
System.out.println("----->out");
} catch (Exception e) {
System.out.println("------->error");
} finally {
System.out.println("------->end");
}
}
执行test2的时候结果如下:不显示out的字样,但是也没有出现exception错误,直接显示end字样了.这是为什么,请哪位高手解释一下,谢谢.
public class test1 extends Object {
static public String check () {
}
static public String check2 () {
}
static public String check3 () {
}
}
请注意在test1中没有构造函数.
java 文件test2.java:
public class test2 {
try {
ltest1 = new test1();
System.out.println("----->out");
} catch (Exception e) {
System.out.println("------->error");
} finally {
System.out.println("------->end");
}
}
执行test2的时候结果如下:不显示out的字样,但是也没有出现exception错误,直接显示end字样了.这是为什么,请哪位高手解释一下,谢谢.
|
你声明并分配内存空间给了TEST1,但是这个变量ltest1并没有被主程序用到,所以,java的垃圾收集机制就会在某个时间点回收ltest1所占用的内存空间。
应该就是这样的啊。顺便说一句,java里有default contructor的,你不写contructor不等于就是没有,编译器会自动调用的。
应该就是这样的啊。顺便说一句,java里有default contructor的,你不写contructor不等于就是没有,编译器会自动调用的。
|
第一,没有写构造类,不等于没有,编译器会自动加一个的默认构造器。
第二,你确实没有继承,但是你的两个文件都在同一个文件夹下,可以认为是在一个包下 ,此处用到了package的概念,你可以看看书,你也可以,将Test1移出此文件夹,再编译,那么/*test1/* ltest= new test1();就会包错了,你可以试试。
不知你说的是不是这个意思。
记着给分呀!
第二,你确实没有继承,但是你的两个文件都在同一个文件夹下,可以认为是在一个包下 ,此处用到了package的概念,你可以看看书,你也可以,将Test1移出此文件夹,再编译,那么/*test1/* ltest= new test1();就会包错了,你可以试试。
不知你说的是不是这个意思。
记着给分呀!
|
我再举个例子,将这个问题说的清楚些,希望对你有用。
如果你的问题只是“有一个像test1那样即没有构造函数,也没有继承父类的类,我new的时候,是如何运行的呢?”
那么我简单的修改一下你的程序如下:
//*******java文件 test1.java:
public class Test1 {
static public void prt() {
System.out.println("test1()");
}
}
//********请注意在test1中没有构造函数.
//********java 文件 test2.java:
public class Test2 {
public static void main(String[] args) {
Test1 ltest1=new Test1();
ltest1.prt();
}
}
//*******Test1.java 和 Test2.java是两个不同的文件,没有继承关系。
现在来回答你的问题:
第一,Test1虽然没有构造器,但是编译器会给他加一个默认的构造器 public Test1() {},所以没有构造器,new Test1(),也回正常执行。
第二,表面看来Test1和Test2没有什么联系,但是为什么在Test2中定义Test1的变量Test1 ltest1=new Test1(),这是因为,他们在同一个文件夹下,也就是说他们在同一个包下(默认的包)。为了检测,我们做如下测试:
现在的情况是:Test1.java和Test2.java都在d:java下,编译正确,结果为test1().
我们将Test1.java放到d:javatest下,此时编译,就回报错。这是因为在同一包下,class Test1和class Test2是公有的,所以在Test2.java中就可以用 Test1 ltest1=new Test1()定义Test1的变量ltest1;而现在他们不在同一个包中,所以不能定义Test1的变量。为了正确执行,我们只需在class Test1和class Test2之前分别加上package test;和import test即可,如下:
//*******java文件 test1.java:
package test;
public class Test1 {
static public void prt() {
System.out.println("test1()");
}
}
//********java 文件 test2.java:
import test.*;
public class Test2 {
public static void main(String[] args) {
Test1 ltest1=new Test1();
ltest1.prt();
}
}
javac Test2.java
java Test2
结果:test1().
如果你的问题只是“有一个像test1那样即没有构造函数,也没有继承父类的类,我new的时候,是如何运行的呢?”
那么我简单的修改一下你的程序如下:
//*******java文件 test1.java:
public class Test1 {
static public void prt() {
System.out.println("test1()");
}
}
//********请注意在test1中没有构造函数.
//********java 文件 test2.java:
public class Test2 {
public static void main(String[] args) {
Test1 ltest1=new Test1();
ltest1.prt();
}
}
//*******Test1.java 和 Test2.java是两个不同的文件,没有继承关系。
现在来回答你的问题:
第一,Test1虽然没有构造器,但是编译器会给他加一个默认的构造器 public Test1() {},所以没有构造器,new Test1(),也回正常执行。
第二,表面看来Test1和Test2没有什么联系,但是为什么在Test2中定义Test1的变量Test1 ltest1=new Test1(),这是因为,他们在同一个文件夹下,也就是说他们在同一个包下(默认的包)。为了检测,我们做如下测试:
现在的情况是:Test1.java和Test2.java都在d:java下,编译正确,结果为test1().
我们将Test1.java放到d:javatest下,此时编译,就回报错。这是因为在同一包下,class Test1和class Test2是公有的,所以在Test2.java中就可以用 Test1 ltest1=new Test1()定义Test1的变量ltest1;而现在他们不在同一个包中,所以不能定义Test1的变量。为了正确执行,我们只需在class Test1和class Test2之前分别加上package test;和import test即可,如下:
//*******java文件 test1.java:
package test;
public class Test1 {
static public void prt() {
System.out.println("test1()");
}
}
//********java 文件 test2.java:
import test.*;
public class Test2 {
public static void main(String[] args) {
Test1 ltest1=new Test1();
ltest1.prt();
}
}
javac Test2.java
java Test2
结果:test1().