Java 技巧:用 Java 实现回调例程

Java 技巧:用 Java 实现回调例程,第1张

熟悉 MS Windows 和 X Window System 事件驱动编程模型的开发人员 习惯于传递在某种事件发生时调用(即 回调 )的函数指针 Java 的面向对象模型目前并不支持方法指针 这样似乎就不可能使用这种很好的机制 但我们并不是一点办法都没有! Java 的接口支持提供了一种获得回调的等价功能的机制 其技巧就是 定义一个简单接口 并在该接口中声明我们要调用的方法 例如 假定我们希望在某个事件发生时得到通知 我们可以定义一个接口 public interface InterestingEvent{// 这仅是一个常规方法 因此如果需要 // 它可有返回值 也可接收参数 public void interestingEvent ()}这使得我们可以控制实现该接口的类的任何对象 因此 我们不必关心任何外部类型信息 与在将 C++ 代码用于 Motif 时使用窗口小部件的数据域来容纳对象指针的难以控制的 C 函数相比 这种方法要好得多 发出事件信号的类必须等待实现了 InterestingEvent 接口的对象 并在适当时候调用 interestingEvent() 方法 public class EventNotifier{private InterestingEvent ieprivate boolean somethingHappenedpublic EventNotifier (InterestingEvent event){// 保存事件对象以备后用 ie = event// 还没有要报告的事件 somethingHappened = false}// public void doWork (){// 检查在别处设置的谓词 if (somethingHappened){// 通过调用接口的这个方法发出事件信号 ie interestingEvent ()}// }// }在上例中 我使用 somethingHappened 谓词来跟踪是否应触发事件 在许多情况下 调用此方法足以保证向 interestingEvent() 发出信号 希望接收事件通知的代码必须实现 InterestingEvent 接口 并将自身引用传递给事件通知程序 public class CallMe implements InterestingEvent{private EventNotifier enpublic CallMe (){// 创建事件通知程序 并将自身引用传递给它 en = new EventNotifier (this)}// 为事件定义实际的处理程序 public void interestingEvent (){// 噢!必定发生了感兴趣的事件!// 执行某些 *** 作 }// } lishixinzhi/Article/program/Java/JSP/201311/19423

通过System.out.println的方式输出到控制台

定义A.java文件,并输出字符串  我是一个java程序

public class A{

   public static void main(String[] args) {//定义main方法

      System.out.println("我是一个JAVA程序")//输出我是一个JAVA程序到控制台

   }

}

按照题目要求编写的Java程序如下

注意 请使用你的真实姓名和班级替换Test类中

创建Student对象stu时用的"张三"和"20计算机应用01班"

import java.util.Scanner

class Student{

 private String name,classname

 private int starnum,scorenum

 private int[] scores

 public void setStarNum(int n){

  this.starnum=n

 }

 public Student(String name,String classname,int scorenum){

  this.name=name

  this.classname=classname

  this.scorenum=scorenum

 }

 public String getName(){

  return this.name

 }

 public void printStar(){

  for(int i=0i<starnumi++){

   for(int j=0j<2*i+1j++){

    System.out.print("*")

   }

   System.out.println()

  }

 }

 public void setScore(){

  Scanner sc=new Scanner(System.in)

  scores=new int[scorenum]

  System.out.print("请输入各科成绩:")

  for(int i=0i<scorenumi++){

   scores[i]=sc.nextInt()

  }

 }

 public void showInfo(){

  System.out.print(name+"同学,你所在的班级是"+classname+",你各科考试成绩分别为:")

  for(int i=0i<scorenumi++){

   if(i==scorenum-1)

    System.out.print(scores[i])

   else

    System.out.print(scores[i]+",")

  }

  System.out.println()

 }

 public float getAvg(){

  float sum=0

  for(int i=0i<scorenumi++){

   sum=sum+scores[i]

  }

  return sum/scorenum

 }

}

public class Test{

 public static void main(String[] args){

  Student stu=new Student("张三","20计算机应用01班",5)

  stu.setStarNum(4)

  stu.printStar()

  stu.setScore()

  stu.showInfo()

  if(stu.getAvg()<60){

   System.out.println(stu.getName()+"是不合格学生")

  }else{

   System.out.println(stu.getName()+"是个合格学生")

  }

 }

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/11622356.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-17
下一篇2023-05-17

发表评论

登录后才能评论

评论列表(0条)

    保存