Zu den Aufzeichnungen der tutorials.de-Live-Workshops
Seite 4 von 6 ErsteErste 123456 LetzteLetzte
Like Tree4Danke
ERLEDIGT
NEIN
ANTWORTEN
82
ZUGRIFFE
19108
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #46
    Avatar von zeja
    zeja zeja ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2006
    Beiträge
    2.960
    Achtung Spoiler:

    foo, da Java eine statisch getypte Sprache ist.
     

  2. #47
    Kai008 Kai008 ist offline Mitglied Brillant
    Registriert seit
    May 2008
    Ort
    Brunn/Geb. (Niederösterreich)
    Beiträge
    944
    Blog-Einträge
    1
    Ich denke
    Achtung Spoiler:
    'foo'
    , da Klassen wohl gegen Interface'e Vorrang haben.
    Aber interessante Frage, eine genaue Erklärung ect. würde mich schon interessieren.
     

  3. #48
    limago limago ist offline Mitglied Brokat
    Registriert seit
    May 2007
    Ort
    Riedstadt (Hessen)
    Beiträge
    354
    Hi,

    ich tippe es wird "Foo" ausgegeben. Die übergebene Referenz ist vom Typ "Foo". Es verhält sich als würde "Foo" von "ActionListener" erben. Der Compiler prüft bei der überladenen Funktion erst ob Foo passt. Nur wenn das nicht passt, steigt er die Vererbungshierachie auf. Nicht auflösen könnte der Compiler dies:
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.Serializable;
     
    public class Foo implements ActionListener, Serializable {
        public Foo() {
            new Foobar().a(this);
        }
        public static void main(String[] args) {
            new Foo();
        }
        public void actionPerformed(ActionEvent e) {} }
     
    class Foobar {
        public void a(ActionListener a) {
            System.out.println("actionlistener");
        }
        public void a(Serializable foo) {
            System.out.println("Serializable");
        }
    }

    Gruß

    Jo
     
    I didn't write this; a very complex macro did.

  4. #49
    Technoblade Technoblade ist offline Mitglied Gold
    Registriert seit
    Feb 2009
    Beiträge
    190
    Achtung Spoiler
    Ich würde tippen, dass Foo ausgegeben wird.
    Das warjm ist auch recht simpel. gehen wir davon aus die Klasse würde noch 5 weitere Interfaces implementieren, udn es gäbe nicht nur die Methode a mit einem ActionListener und Foo als Parameter, sondern auch noch die 5 weiteren Interfaces als Parameter. In diesem fall wäre es auf jeden Fall einfacher, wenn Foo genommen würde. Der einzige Knackpunkt der mir einfällt wäre, was dann passieren sollte wenn es die Methode mit Foo als Parameter nicht geben würde. Hier stehe ich dann auch auf dem Schlach. In diesem fall würde ich tippen entweder die Interfaces (mit Packageangabe!!) alphabetisch geordnet, oder in der Reihenfolge wie sie bei der Klassensignatur angegeben sind.

    Edit:

    Mir ist noch eingefallen, dass es auch sein könnte, dass danach geurteilt wird wie die Methoden im Quelltext auftauchen, in diesem fall, würde natürlich ActionListener ausgegeben, ich denke ich bleibe trotz dem bei meiner ersten Vermutung (siehe oben).
     

  5. #50
    w0ddes w0ddes ist offline Grünschnabel
    Registriert seit
    Dec 2009
    Beiträge
    1
    schade, dass dieser Thread schon wieder eingeschlafen ist. Ich hab jetzt alles mal durchgelesen und finde es sehr spannend
     

  6. #51
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.724
    Blog-Einträge
    29
    Hallo,

    gegeben sei folgender Code:
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    
    package de.tutorials;
     
    public class WhatsGoingOn {
      public static void main(String[] args) {
        //?
        System.out.println(new String("xxx"));
      }
    }

    Was kann man an Stelle von "?" schreiben damit das Programm folgende Ausgabe erzeugt?
    Die Aufgabe ist auf mehrere verschiedene Arten lösbar.

    Ausgabe:
    Code :
    1
    
    huch?

    Aufrufe von System.exit(...) / Reflection-Calls sowie Verwendung von AspectJ oder anderen AOP Frameworks sind nicht erlaubt!

    Gruß Tom
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

  7. #52
    Technoblade Technoblade ist offline Mitglied Gold
    Registriert seit
    Feb 2009
    Beiträge
    190
    Hier meine Lösung, die zumindest bei mir wunderbar funktioniert hat:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    Achtung Spoiler:
    [COLOR="whitesmoke"]package de.tutorials;
     
    public class WhatsGoingOn {
      public static void main(String[] args) {
        System.setOut(new java.io.PrintStream(System.out) {
                                                            public void println(String x) {
                                                                super.println(x.equals("xxx") ? 
                                                                "huch?" : x);
                                                            }});
        System.out.println(new String("xxx"));
      }
    }[/COLOR]
     

  8. #53
    Avatar von zeja
    zeja zeja ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2006
    Beiträge
    2.960
    Noch ne Möglichkeit:

    Achtung Spoiler:

    public class WhatsGoingOn {
    public static void main(String[] args) {
    class String {

    public String(java.lang.String s) {
    }

    @Override
    public java.lang.String toString() {
    return "huch?";
    }
    }
    System.out.println(new String("xxx"));
    }
    }
     

  9. #54
    Nagsor Nagsor ist offline Rookie
    Registriert seit
    Sep 2009
    Beiträge
    8
    So gehts auch:

    Achtung Spoiler:

    Code :
    1
    2
    3
    4
    5
    6
    7
    
    public class WhatsGoingOn {
      public static void main(String[] args) {
        System.out.println(new String("huch?"));
        if (false)
        System.out.println(new String("xxx"));
      }
    }


    /duck
     

  10. #55
    Avatar von zeja
    zeja zeja ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2006
    Beiträge
    2.960
    *g* Auch nett
     

  11. #56
    limago limago ist offline Mitglied Brokat
    Registriert seit
    May 2007
    Ort
    Riedstadt (Hessen)
    Beiträge
    354
    ich hätte auch noch einen.... Ähnliche Idee wie Zeja
    Achtung Spoiler:

    import java.io.PrintStream;

    public class WhatsGoingOn {
    public static void main(String[] args) {

    System.setOut(new PrintStream(System.out){

    @Override
    public void println(String x) {

    super.println("Huch");
    }

    });

    System.out.println(new String("xxx"));
    }
    }
     
    I didn't write this; a very complex macro did.

  12. #57
    Technoblade Technoblade ist offline Mitglied Gold
    Registriert seit
    Feb 2009
    Beiträge
    190
    Ist zwar ähnlicher zu meiner Idee, aber dennoch gut
     

  13. #58
    limago limago ist offline Mitglied Brokat
    Registriert seit
    May 2007
    Ort
    Riedstadt (Hessen)
    Beiträge
    354
    @technoblade

    Stimmt, habe Deinen Beitrag leider übersehen....
     
    I didn't write this; a very complex macro did.

  14. #59
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.724
    Blog-Einträge
    29
    Hallo,

    da für das letzte Rätsel schon so ziemlich jede Lösungsvariante gepostet wurde gibts hiermit ein neues Rätsel:

    Folgendes Programm läuft mit 48MB Heap (-Xmx48m) bricht kurz nach dem Start mit einem (java.lang.OutOfMemoryError: Java heap space) ab.

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    
    package de.tutorials;
     
    import java.util.ArrayList;
    import java.util.List;
     
    public class MemoryLeakExample {
        public static void main(String[] args) {
            List<List<?>> lists = new ArrayList<List<?>>();
            
            for(int i = 0; i < 100;i++){
                List<Integer> list = new ArrayList<Integer>();
                
                for(int j = 0; j < 1000000;j++){
                    list.add(j);
                }
                lists.add(list);
                
                System.out.println(i);
                list.clear();
     //+
               ?
    //-
            }
            
            System.out.println(lists);
        }
    }

    Was könnte man noch bei ? aufrufen um den OOME abzuwenden?

    Regeln:
    1) lists darf nicht null gesetzt / neu initialisiert oder mit clear() geleert werden.
    2) Kein Thread Sleep
    3) Kein System.gc() etc.
    4) lists soll am Ende noch die ursprünglich hinzugefügten List Instanzen beinhalten
    Edit:
    5) -Xmx48m (Heap Size auf 48 MB beschränken)
    6) Es dürfen nur beliebig viele Zeilen zwischen //+ und //- eingefügt werden

    Gruß Tom
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

  15. #60
    limago limago ist offline Mitglied Brokat
    Registriert seit
    May 2007
    Ort
    Riedstadt (Hessen)
    Beiträge
    354
    Also bei mir ist das Programm unter Java 6 32-bit version und Windows 7 64-bit Version durchgelaufen. Daraufhin habe ich den Heapsize auf 256 gesetzt um den Effekt zu bekommen.

    Nachfolgende Lösung läuft dann bei mir durch:

    Achtung Spoiler:

    package de.tutorials;

    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;

    public class MemoryLeakExample {
    public static void main(String[] args) {
    List<List<?>> lists = new ArrayList<List<?>>();

    for(int i = 0; i < 100;i++){
    List<Integer> list = new ArrayList<Integer>();

    for(int j = 0; j < 1000000;j++){
    list.add(j);
    }
    lists.add(list);

    System.out.println(i);
    list.clear();
    //?
    lists.remove(list);
    // lists.add(Collections.unmodifiableList(list));
    lists.add(list);
    }

    System.out.println(lists);
    }
    }

    Geändert von limago (29.12.09 um 12:45 Uhr)
     
    I didn't write this; a very complex macro did.

Ähnliche Themen

  1. Rätsel
    Von Layna im Forum Smalltalk
    Antworten: 5
    Letzter Beitrag: 18.11.04, 19:11
  2. Rätsel
    Von Olli-Web im Forum Fun-Forum
    Antworten: 6
    Letzter Beitrag: 01.05.04, 14:27
  3. Rätsel
    Von reBourne im Forum Smalltalk
    Antworten: 6
    Letzter Beitrag: 30.09.03, 13:23
  4. 3 Rätsel
    Von mslap im Forum Fun-Forum
    Antworten: 5
    Letzter Beitrag: 07.08.03, 11:35
  5. Ist mir ein Rätsel
    Von Eric25 im Forum HTML-Editoren
    Antworten: 3
    Letzter Beitrag: 25.04.02, 09:03