首页
新闻
论坛
群组
Blog
文档
下载
读书
Tag
网摘
搜索
.NET
Java
游戏
视频
人才
外包
培训
数据库
书店
程序员
欢迎您:
游客
| 退出
| 登录
注册
帮助
我的帖子
我参与的帖子
我的空间
我的网摘
CSDN
CSDN社区
Java
J2SE / 基础类
将帖子提前
放进我的网摘
推荐给好友
我要提问
帖子加分
生成帖子
置顶
推荐(加精)
取消推荐(加精)
锁定帖子
移动帖子
结贴去...
管理菜单
页面风格切换
标准风格
老版本论坛
一道简单的java基础面试题,做做看?
[已结贴,结贴人:redbridge]
加为好友
发送私信
在线聊天
redbridge
雪燃
等级:
发表于:
2008-05-10 09:42:42
楼主
请在不用工具运行的情况下写出下面main方法执行的结果?
public class Test {
private int ix = 50;
private Test( int ix){
System.out.println(ix);
}
static {
System.out.println("test2");
}
{
System.out.println("test3");
}
public static void main(String[] args) {
Test t;
t = new Test(1);
Test t2;
t2 = new Test(2);
}
}
问题点数:
10
回复次数:
58
显示所有回复
显示星级回复
显示楼主回复
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
goodmrning
无为而治
等级:
发表于:
2008-05-10 09:50:50
1
楼 得分:
1
test2
test3
1
test3
2
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
FL1429
喝着咖啡 coding java.............
等级:
发表于:
2008-05-10 09:53:29
2
楼 得分:
0
test2
test3
1
2
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
piaoyao1203
好好
等级:
发表于:
2008-05-10 09:56:01
3
楼 得分:
1
test2
test3
1
test3
2
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
yuppy
CLass 败;哀而不伤、隐而不发;
等级:
发表于:
2008-05-10 10:00:57
4
楼 得分:
1
test2
test3
1
test3
2
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
lijie250
小小杰
等级:
发表于:
2008-05-10 10:01:17
5
楼 得分:
0
Java code
static
{ System.out.println(
"
test2
"
); } { System.out.println(
"
test3
"
); }
這種寫法有什么意義?
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
redbridge
雪燃
等级:
发表于:
2008-05-10 10:02:22
6
楼 得分:
0
对于里面的
{
System.out.println("test3");
}
这句很难理解(类里加这种代码有意义吗?),既不为静态方法又不为构造方法。java是如何处理其加载的?请解释一下,谢谢。
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
yuppy
CLass 败;哀而不伤、隐而不发;
等级:
发表于:
2008-05-10 10:03:52
7
楼 得分:
1
static代码块在类被条用的时候被执行;
显式初始化代码在构造函数被调用之前被执行;
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
AWUSOFT
想改名
等级:
发表于:
2008-05-10 10:04:59
8
楼 得分:
0
那叫初始化块!
还静态初始化块!
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
yuppy
CLass 败;哀而不伤、隐而不发;
等级:
发表于:
2008-05-10 10:05:34
9
楼 得分:
0
{
System.out.println("test3");
}
属于非静态代码块把!
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
yuppy
CLass 败;哀而不伤、隐而不发;
等级:
发表于:
2008-05-10 10:07:17
10
楼 得分:
0
那些内容属于初始化块呢?
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
zuoguodang
冷泉
等级:
发表于:
2008-05-10 10:18:13
11
楼 得分:
0
static修饰的代码块,要比构造方法先执行,且只执行一次。{}修饰的就当是一个平常的类语句块。
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
redbridge
雪燃
等级:
发表于:
2008-05-10 10:19:33
12
楼 得分:
0
7楼的答案解释应该是正确的。
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
lijie250
小小杰
等级:
发表于:
2008-05-10 10:21:34
13
楼 得分:
0
引用 11 楼 zuoguodang 的回复:
static修饰的代码块,要比构造方法先执行,且只执行一次。{}修饰的就当是一个平常的类语句块。
{}是平常的類,那比構造方法的優先高?
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
flztjlzy
等级:
发表于:
2008-05-10 10:38:25
14
楼 得分:
0
先执行
static {
System.out.println("test2");
}
{
System.out.println("test3");
}
输出 test2 ,test3;
再执行
Test t;
t = new Test(1);
System.out.println(ix);
输出 1;
再执行
{
System.out.println("test3");
}
输出 test3;
最后
Test t2;
t2 = new Test(2);
输出 2;
test2
test3
1
test3
2
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
yuppy
CLass 败;哀而不伤、隐而不发;
等级:
发表于:
2008-05-10 10:58:53
15
楼 得分:
0
楼上似乎认为两个代码块是一开始先被执行;那第二次执行的时候为什么只执行了“test3"呢!
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
norwolfli
傻瓜程序员都能写出机器认识的代码,关键你要写出人能认识的代码。
等级:
发表于:
2008-05-10 11:21:24
16
楼 得分:
0
test2,test3,1,2
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
James_84
James
等级:
发表于:
2008-05-10 11:37:42
17
楼 得分:
0
test2
test3
1
test3
2
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
yakoo5
夜歌
等级:
发表于:
2008-05-10 12:13:05
18
楼 得分:
0
期待一个统一的正解!
小弟也很困惑!
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
loujianchengdd
降低耦合
等级:
发表于:
2008-05-10 12:19:52
19
楼 得分:
0
静态代码块在类被加载时候执行一次,而非静态代码块在属于对象的,类似于实例变量,在每次新生成一个对象的时候进行初始化。
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
kay5804
等级:
发表于:
2008-05-10 12:29:39
20
楼 得分:
1
java中加载一个类的执行过程
1.一般是先执行类中的静态块.再执行类中的普通语句块 也就是上述的{}(非静态块)标识的语句块.
最后加执行构造块.
2.类的静态块只执行一次,而对于{}(非静态块)块,每个对像生成后都会进行初始化.
所以LZ的例子,执行的过是
Java code
test2 test3
1
test3
2
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
lijie250
小小杰
等级:
发表于:
2008-05-10 12:42:36
21
楼 得分:
0
這個我已經測試了!static塊只執行一次,但是{}每次創建對象時都會初始化
最后才是構造方法,大家把代碼適當刪除測試就知道了!
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
redbridge
雪燃
等级:
发表于:
2008-05-10 13:51:14
22
楼 得分:
0
7楼和20楼回答的都很正确。
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
abcofeng
★风1986★
等级:
发表于:
2008-05-10 14:13:19
23
楼 得分:
0
学习
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
new_class
图图
等级:
发表于:
2008-05-10 14:24:37
24
楼 得分:
0
又学到了新知识
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
redbridge
雪燃
等级:
发表于:
2008-05-10 14:41:36
25
楼 得分:
0
大家再去看看这道题?
http://topic.csdn.net/u/20080510/13/625dc9d3-7cfa-4aca-ac81-4a64446e378d.html
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
storm_mxj
storm
等级:
发表于:
2008-05-10 19:38:01
26
楼 得分:
0
test2
test3
1
2
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
storm_mxj
storm
等级:
发表于:
2008-05-10 19:44:24
27
楼 得分:
0
cuole wo
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
anqini
Kimi-赵龙日-大连 사랑해요!
等级:
发表于:
2008-05-10 19:47:57
28
楼 得分:
0
凑热闹
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
yuppy
CLass 败;哀而不伤、隐而不发;
等级:
发表于:
2008-05-10 19:58:43
29
楼 得分:
0
类中非静态块内容的初始化和类中显式代码的初始化有区别吗?有大哥能解释下不?
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
shenshan
等级:
发表于:
2008-05-10 20:04:48
30
楼 得分:
0
知道了
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
zhenzhen19861009
一般名字很长的人都很厉害~
等级:
发表于:
2008-05-10 20:51:37
31
楼 得分:
1
test2
test3
1
test3
2
很细致的问题
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
javagxc
javagxc
等级:
发表于:
2008-05-10 20:59:45
32
楼 得分:
0
19楼说的好
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
Yuelaosi
幽灵
等级:
发表于:
2008-05-10 21:02:31
33
楼 得分:
0
引用 31 楼 zhenzhen19861009 的回复:
test2
test3
1
test3
2
很细致的问题
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
zhanghai921
张海
等级:
发表于:
2008-05-10 21:28:34
34
楼 得分:
0
学习中~
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
daizhiqiang8
daizhiqiang
等级:
发表于:
2008-05-10 21:31:10
35
楼 得分:
2
[color=#00CCFF]static
{} 表示静态初始化块,
static
main(){} 表示静态方法,
在类加载时
static
优先级高。
所以不管怎样,类加载时:先静态块,再静态(属性/方法);
大括号 {} 标示:创建对象时的初始化快,优先级比构造方法高,
所以,创建对象时:先初始化块,后构造方法;
程序执行过程分为3步:
1.
加载所有
static
初始化块,这里只有一个;
static
{
System.out.println("test2");
}[/color]
输出:
test2
2.
先加载所有 [color=#00CCFF]static
(方法/属性),后加载所有非
static
(方法/属性),
找到 main() 方法;
3.
main() 方法中只创建两个对象,而创建对象时,先初始化块,后构造方法;
Test t = new Test(1); 和 Test t2 = new Test(2);
执行形同的代码块:
{
System.out.println("test3");
}
private Test( int ix){
System.out.println(ix);
}
输出:[/color]
test3
1
test3
2
请各位指教,谢谢!
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
ansjsun
阿键
等级:
发表于:
2008-05-10 21:41:20
36
楼 得分:
0
test2 1 test2 2
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天