结果如下:
1
j=3
jj=4
3
1
j=3
jj=4
3
解决方案 »
- 请问关于java连mysql后查询中得到有多少列的函数是?
- init()的作用
- 播放不了MIDI格式的文件
- 关于正折表达式,请大家帮忙看看,多谢了!
- 请教大侠关于java与Cloudscape的驱动和连接
- java.sql.*中的jdbc问题我想把ResultSet抽出来作为一个类!简化数据库操作!可是怎么关闭??Statement;ResultSet
- J2SE 循环基础问题~~~!
- 还是老问题:String创建对象的数量
- zong suan neng shang csdn le ,ke xi wo lian shu ru fa dou bu hui zhang le,ji tian le ,
- Java 截取字符串
- ???急,在线等待,谢谢
- 我照JBUILDER上的tutorials做的SESSION BEAN怎么会有错误?
j=3
jj=4
3
说说问这个问题的原因
怎么可能,变量名不同也能覆盖?从没听过。
public class Test{
public static void main(String[] args) {
System.out.println(J.i);
System.out.println(K.j);
}
static int out(String s, int i) {
System.out.println(s + "=" + i);
return i;
}
}
class I {
public static int i = 1, ii = Test.out("ii", 2);
}
class J extends I {
public static int j = Test.out("j", 3), jj = Test.out("jj", 4);
}
class K extends J {
public static int k = Test.out("k", 5);
}
猜猜输出是什么?比上面的容易理解吧。
final变量不能覆盖。大鸟呢?出来解释一下吧
这是一个其中关于类和接口处世化的例子,我在这抛砖引玉一下这是一个关于Interface初始化的问题为何这样输出的原因是这样的实现了一个Inteface I的类或者子接口初始化的时候I不一定要求被处世化,这和类不同.一个接口被初始化的必要条件是这样的
1.是个接口的Field被赋值
2.一个接口的Field被引用并且这个Field不是一个编译时期的常量
3.对一个Field的引用只会引起定义这个Field的Class或Interface的初始化(注:
1.接口的所有Field默认都是public static final的,
2.对编译时期的常量的引用都会被编译器在编译时刻替换为改常量的拷贝,所以并不会引起对这个接口的初始化
)所有,通过以上的分析可以知道
当引用J.i时,由于j是个编译时刻的常量,所以并未引起J的初始化,所以不打印ii=22,只打印了1
而引用K.j时,由于j不是编译时刻变量,所有未在编译时被赋值,一定要到运行时刻才可以被赋值,又因为刚才条款3,所以只有J这个接口被初始化,所以就打印j=3, jj=4,然后又打印了3
==================
别忘给分啊:))))))
呵呵,这是我的签名
==================
这是一个其中关于类和接口处世化的例子,我在这抛砖引玉一下这是一个关于Interface初始化的问题为何这样输出的原因是这样的实现了一个Inteface I的类或者子接口初始化的时候I不一定要求被处世化,这和类不同.一个接口被初始化的必要条件是这样的
1.是个接口的Field被赋值
2.一个接口的Field被引用并且这个Field不是一个编译时期的常量
3.对一个Field的引用只会引起定义这个Field的Class或Interface的初始化(注:
1.接口的所有Field默认都是public static final的,
2.对编译时期的常量的引用都会被编译器在编译时刻替换为改常量的拷贝,所以并不会引起对这个接口的初始化
)所有,通过以上的分析可以知道
当引用J.i时,由于j是个编译时刻的常量,所以并未引起J的初始化,所以不打印ii=22,只打印了1
而引用K.j时,由于j不是编译时刻变量,所有未在编译时被赋值,一定要到运行时刻才可以被赋值,又因为刚才条款3,所以只有J这个接口被初始化,所以就打印j=3, jj=4,然后又打印了3
==================
别忘给分啊:))))))
呵呵,这是我的签名
==================
这是一个其中关于类和接口处世化的例子,我在这抛砖引玉一下这是一个关于Interface初始化的问题为何这样输出的原因是这样的实现了一个Inteface I的类或者子接口初始化的时候I不一定要求被处世化,这和类不同.一个接口被初始化的必要条件是这样的
1.是个接口的Field被赋值
2.一个接口的Field被引用并且这个Field不是一个编译时期的常量
3.对一个Field的引用只会引起定义这个Field的Class或Interface的初始化(注:
1.接口的所有Field默认都是public static final的,
2.对编译时期的常量的引用都会被编译器在编译时刻替换为改常 量的拷贝,所以并不会引起对这个接口的初始化
)所有,通过以上的分析可以知道
当引用J.i时,由于j是个编译时刻的常量,所以并未引起J的初始化,所以不打印ii=22,只打印了1
而引用K.j时,由于j不是编译时刻变量,所有未在编译时被赋值,一定要到运行时刻才可以被赋值,又因为刚才条款3,所以只有J这个接口被初始化,所以就打印j=3, jj=4,然后又打印了3
System.out.println(K.j);输出:j=3
jj=4
3
楼上这位说的对啊!没错!
j=3
jj=4
是interface初始化时候调用test.out()的结果。
3
是真正System.out.println(K.j);的输出?
int i = 1, ii = Test.out("ii", 2);
}
class Test {
public static void main(String[] args) {
System.out.println(J.i);
System.out.println(K.j);
}
static int out(String s, int i) {
System.out.println(s + "=" + i);
return i;
}
}
这段程序是怎么运行的呢?请大家告诉我好不?因为我太菜了:(
为什么输出会是这样的呢?
ii=2
1
j=3
jj=4
3
在"J.i"时,会开始初始化I类变量值,在"K.j"的时候会初始化J类变量值,但J类继承下来的I类变量值已经初始化过了,所以,这时只会初始化J类增加的变量值
我也是采鸟,不知道是不是这样的。大家都来探讨探讨呀!
msn:[email protected]
icq:142555425
怎么区分编译时期常量和编译时期变量?
interface I {
int i = 1, ii = Test.out("ii", 2);
}
i是编译时期常量,以为一上来就付值1
ii是编译时期变量?可是Test.out("ii", 2);的结果是一定的呀。
脑子突然混乱了!!给我整理整理!谢!
static int peek() { return j; }
static int i = peek();
static int j = 1;
}
class Test {
public static void main(String[] args) {
System.out.println(Z.i);
}
}
再加一题
static int peek() { return j; }
static int i = peek();
static int j = 1;
}
class Test {
public static void main(String[] args) {
System.out.println(Z.i);
}
}
再加一题
System.out.println(Z.i);时候
i=peek();->peek()=j;->j并没有初始化,所以j=0
所以i=0
Is it right?
static String greeting() { return "Goodnight"; }
String name() { return "Richard"; }
}
class Sub extends Super {
static String greeting() { return "Hello"; }
String name() { return "Dick"; }
}
class Test {
public static void main(String[] args) {
Super s = new Sub();
System.out.println(s.greeting() + ", " + s.name());
}
}再贴一题,大家最好能说说原因,分析一下
而在打印"Z.peek()"时输出为"1" ?
为什么在打印"Z.peek()"时输出为"1" 呢?这时的j不都没初始化吗???
在i=peek()的前提下,Z.i和Z.peek()有什么区别呢?
kao,怎么输出会是Goodnight, Dick
语句Super s = new Sub();到底声明的是Super对象还是Sub对象啊?
和Delphi的静态方法调用一样,到那个平台这个道理都一样吧。
为什么在打印"Z.peek()"时输出为"1" 呢?这时的j不都没初始化吗???
在i=peek()的前提下,Z.i和Z.peek()有什么区别呢?
为什么在打印"Z.peek()"时输出为"1" 呢?这时的j不都没初始化吗???
在i=peek()的前提下,Z.i和Z.peek()有什么区别呢?
现在给你解答以下
输出0的原因是调用Z.i时,要初始化Z,是按照书写循序来的,所以当调用i时,j还没有初始化,这是j的值时默认的0,所以i就被赋予了值0(java编译器时不检查这种由方法来初始化的变量的,所以不会报错,否则类似于
static int i=j+1;
static j = 3;
是要报错的,这是非法的向前引用,你如果学过编译原理便晓得其中道理)
而调用Z.peak时,Z已初始化完毕了,自然就返回了j的实际的值,
推荐你反编译一下该程序便可知其中奥妙