黑马程序员技术交流社区
标题:
一个Java类被虚拟机加载时 静态变量被静态方法初始化赋值 以后调用时用哪个?
[打印本页]
作者:
che201311
时间:
2013-11-26 09:57
标题:
一个Java类被虚拟机加载时 静态变量被静态方法初始化赋值 以后调用时用哪个?
package com.tool;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;
import com.bean.Teacher;
import com.bean.TeacherDAO;
public class SchoolManager {
public static TeacherDAO tbao = new TeacherDAO();
private static List<Teacher> allTeacher;
static {
Timer t = new Timer();
t.schedule(new TimerTask(){
@Override
public void run() {
SchoolManager.setAllTeacher();
}
}, new Date(), 1000 * 60);
}
public static void setAllTeacher() {
allTeacher = SchoolManager.tbao.findAll();
System.out.println(allTeacher.get(0).getTname()+"================================");
}
public static List<Teacher> findAllTeacher() {
return allTeacher;
}
}
问 调用findAllTeacher()方法时 allTeacher的值用的是哪个??别的都不看只问它的执行顺序。
作者:
一直很安静
时间:
2013-11-26 10:25
调用的是被静态方法初始化后的值,这种问题使用简单代码验证一下就清楚了
public class TEST14{
public static void main(String[] args){
System.out.println(met());
}
static int i=2;
public static int met(){
i=7;
return i;
}
}
上面代码运行后结果为7
作者:
汪洋大海
时间:
2013-11-26 10:34
看到楼主写这么多import,虽然不知道写的什么,不过感觉很吊的样子。
作者:
freehiker
时间:
2013-11-26 10:41
我用多态的一个例子来说明static和非静态方法及static和非静态成员的运行结果吧
package test.java;
public class StaticBind {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
TopStaticBind top = new EndStaticBind();
System.out.println(top.a); // 5
System.out.println(top.b); // 6
top.run(); // EndStaticBind非静态方法
top.show(); // TopStaticBind静态方法
}
}
class TopStaticBind {
public int a = 5;
public static int b = 6;
public void run() {
System.out.println("TopStaticBind非静态方法");
}
public static void show() {
System.out.println("TopStaticBind静态方法");
}
}
class EndStaticBind extends TopStaticBind {
public int a = 15;
public static int b = 16;
public void run() {
System.out.println("EndStaticBind非静态方法");
}
public static void show() {
System.out.println("EndStaticBind静态方法");
}
}
复制代码
多态中,关于成员变量,不管是静态还是非静态,是谁调用它就调用哪个引用类型类中的变量
如上题所示,不管是a还是b,调用的都是Top中的变量
关于成员函数,静态方法调用的是引用变量所属类中的方法,因为这里有一个静态绑定。
而非静态函数的话Top类中的方法会被End类中的方法覆盖,所以执行的是End类中的方法
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2