A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始


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的值用的是哪个??别的都不看只问它的执行顺序。

3 个回复

倒序浏览
调用的是被静态方法初始化后的值,这种问题使用简单代码验证一下就清楚了
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

评分

参与人数 1黑马币 +6 收起 理由
FFF + 6 解释不够详细!

查看全部评分

回复 使用道具 举报
看到楼主写这么多import,虽然不知道写的什么,不过感觉很吊的样子。
回复 使用道具 举报
我用多态的一个例子来说明static和非静态方法及static和非静态成员的运行结果吧
  1. package test.java;

  2. public class StaticBind {

  3.         /**
  4.          * @param args
  5.          */
  6.         public static void main(String[] args) {
  7.                 // TODO Auto-generated method stub
  8.                 TopStaticBind top = new EndStaticBind();
  9.                 System.out.println(top.a); // 5
  10.                 System.out.println(top.b); // 6
  11.                 top.run(); // EndStaticBind非静态方法
  12.                 top.show(); // TopStaticBind静态方法
  13.         }

  14. }

  15. class TopStaticBind {
  16.         public int a = 5;
  17.         public static int b = 6;

  18.         public void run() {
  19.                 System.out.println("TopStaticBind非静态方法");
  20.         }

  21.         public static void show() {
  22.                 System.out.println("TopStaticBind静态方法");
  23.         }
  24. }

  25. class EndStaticBind extends TopStaticBind {
  26.         public int a = 15;
  27.         public static int b = 16;

  28.         public void run() {
  29.                 System.out.println("EndStaticBind非静态方法");
  30.         }

  31.         public static void show() {
  32.                 System.out.println("EndStaticBind静态方法");
  33.         }
  34. }
复制代码

多态中,关于成员变量,不管是静态还是非静态,是谁调用它就调用哪个引用类型类中的变量
如上题所示,不管是a还是b,调用的都是Top中的变量
关于成员函数,静态方法调用的是引用变量所属类中的方法,因为这里有一个静态绑定。
而非静态函数的话Top类中的方法会被End类中的方法覆盖,所以执行的是End类中的方法

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马