2017-02-27 1 views
0
public static int do_dispatch(){ 

     { 
      int prior = this.getPriority(); 
      ThreadCB threadToDispatch=null; 
      ThreadCB runningThread=null; 
      TaskCB runningTask=null; 
      try { 
       runningTask = MMU.getPTBR().getTask(); 
       runningThread = runningTask.getCurrentThread(); 
      } catch(NullPointerException e) {} 

      // If necessary, remove current thread from processor and reschedule it. 
      if(runningThread != null) 
      { 
       // Check if quantum is exceeded 
       if (HTimer.get() < 1) 
       { 
        //Increment the priority to lower priority value 
        prior++; 
        this.setPriority(prior); 
       } 


       //Append to expired 
       expired[prior].append(this); 

       runningTask.setCurrentThread(null); 
       MMU.setPTBR(null); 
       runningThread.setStatus(ThreadReady); 
       readyQueue.append(runningThread); 

Ein weiteres Beispiel:Was wäre die richtige Art und Weise zu implementieren ‚this‘ Schlüsselwort in statischer Methode

class Sub { 
    static int y; 
    public static void foo() { 
     this.y = 10; 
    } 
} 

Ich versuche, mein Programm zu kompilieren, aber ich weiterhin Fehler bei der Verwendung von bekommen das Schlüsselwort this in dieser Situation. Ich verstehe, dass 'this' das Objekt darstellt, das die Methode aufruft und dass statische Methoden nicht an irgendein Objekt gebunden sind.

Was wäre der richtige Weg, um 'dieses' zu implementieren?

+2

Sie können "this" nicht "implementieren". [Es ist in der Sprachspezifikation definiert] (https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.8.3), und es ist ein Fehler bei der Kompilierung Verwenden Sie es in einer statischen Methode. –

+2

'this' bezieht sich auf die aktuelle Instanz der Klasse, und in einem statischen Kontext gibt es keine Instanz - alle Methoden und Eigenschaften sind auf Klassenebene (aka - sie werden über alle _ Instanzen der Klasse verteilt). Um statische Eigenschaften von der Methode zu bearbeiten, die Sie in Ihrem Code gezeigt haben, würden Sie sie mit dem Klassennamen voranstellen, z. B. "Sub.y = 10". Beachten Sie, dass Sie dies hier nicht tun müssen, da Sie keine vorhandenen Eigenschaften überschreiben. Dh: "y = 10" sollte ausreichen. –

+1

** VANDALISIEREN SIE NICHT IHRE EIGENEN POSTS. ** Ihre Bearbeitung hat Ihre Frage unverständlich gemacht. – EJP

Antwort

0

Was wäre der richtige Weg, um 'dieses' zu implementieren?

Sie können das einfach nicht implementieren. Es gibt kein Konzept von this in einer statischen Methode.

Ich versuche, mein Programm zu kompilieren, aber ich weiterhin Fehler mit die Verwendung des diesem Begriff in dieser Situation bekommen

, wie Sie dieses Problem überwinden?

können Sie entweder:

  • Pass eine Referenz eines Objekts auf Ihre statische Methode und verwenden.

oder

  • Ihre Felder und Methoden Instanz fields/methods machen.
0

Sie können this nicht "implementieren". It's a keyword defined in the language spec, und es ist ein Fehler bei der Kompilierung, es in einer statischen Methode zu verwenden.

Wenn Sie auf eine Instanz der Klasse enthält, beziehen möchten, können Sie immer in einer Instanz als Parameter übergeben:

public static int do_dispatch(YourClass that){ 
    int prior = that.getPriority(); 
    // ... 

Aber beachten Sie, dass 1) Sie nicht die Variable this nennen kann; 2) das ist im Grunde nur eine Instanz-Methode, also warum es static machen (d. H. Sie können es eine nicht-statische Methode machen, die Sie wie that.do_dispatch() statt do_dispatch(that) aufrufen)?

0

Sie können nicht. Es gibt kein Konzept von this in einer statischen Methode. Sie müssen einen der folgenden Schritte ausführen:

  • Machen Sie die Methode nicht statisch.
  • Beziehen Sie sich nur auf statische Elemente (beachten Sie, dass statische Membervariablen unter allen Aufrufen der statischen Methode und an anderer Stelle gemeinsam genutzt werden). Dies wäre die am besten geeignete Option, wenn Ihr Code keine spezifische Instanz der Klasse do_dispatch benötigt.
  • Übergeben Sie eine Instanz eines beliebigen Objekts an Ihre statische Methode und arbeiten Sie stattdessen daran.

Check out the official tutorial für ein wenig Einblick. Wenn keine der obigen Optionen verwendet werden kann, um Ihrem Programm das richtige Verhalten zu geben, müssen Sie Ihr grundlegendes Design ein wenig überdenken, basierend auf dem, was Sie hier über statische Klassen lernen.

0

Sie können nicht, und Sie müssen nicht. Entfernen Sie einfach this.. y ist im Kontext eindeutig.

+0

Was ist 'y'? Ich kann es nicht in OP-Code sehen. –

+0

@AndyTurner Das 'y' in' this.y = 10; 'das gibt ihm den Compilerfehler, den er beheben will. – EJP

+0

Es gibt auch 'this.setPriority'. –

Verwandte Themen