Προς το περιεχόμενο

Απορία στην Java


capitan

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα!

 

Έχω μια απορία στην Java. Μπορούμε να δημιουργήσουμε 2 μεταβλητές οι οποίες να είναι "συγχρονισμένες"? Δηλαδή όταν αλλάζουμε την μία, αυτομάτως και χωρίς εντολή εκχώρησης ή δική μας παρέμβαση, ν' αλλάζει και η άλλη?

 

Και τώρα που το θυμήθηκα, μήπως ξέρετε κάποιο free GUI designer σε plugin για το Eclipse?

 

Ευχαριστώ

Δημοσ.

Για Visual Editor κοίτα εδώ: http://download.eclipse.org/tools/ve/downloads/index.php

 

Για το άλλο που λες δεν μπορείς να MHN κάνεις εκχώρηση τιμής. Το προφανές είναι ότι αν αυτές σχετίζονται τότε αυτό θα γίνει αυτόματα. Διαφορετικά κάπου θα πρέπει να γράψεις τον κώδικα που θα το κάνει. Για παράδειγμα για να το κάνεις αυτό στην C θα έπρεπε να κάνεις mprotect το συγκεκριμένο κομμάτι μνήμης και να γράψεις τον δικό σου trap handler, ο οποίος θα καλείται και θα κάνει αυτό που θέλεις. Σε Java δεν παίζει κάτι τέτοιο...

Δημοσ.

Όταν λες μεταβλητές εννοείς primitive data types ή Objects?

Γιατί με Object μπορείς να έχεις δύο διαφορετικές μεταβλητές οι οποίες έχουν reference για το ίδιο object στην μνήμη.

 

Εναλλακτικά, αν το θέλεις για primitive types(int,float,double κτλ) μπορείς να χρησιμοποιήσεις το αντίστοιχο wrapper object ( int - Integer,float - Float,double - Double κτλ)

Δημοσ.

Γίνεται με AOP αλλά και με libraries όπως ASM και cglib, αλλά σίγουρα δεν θες να ασχοληθείς με αυτά και μάλλον κάτι έχεις σκεφτεί λάθος.

 

Προγραμματιστικά γίνεται με δικά σου objects με πολλούς τρόπους:

>Foo f = new Foo();
Bar b = new Bar();
f.join(;
f.setValue("lol");
assertEquals("lol", b.getValue());

 

Πες μας τι θες να κάνεις. Τι πρόβλημα πας να λύσεις.

Δημοσ.

Μάλλον το έλυσα το πρόβλημα μου παιδιά, δεν είχα σκεφτεί επαρκώς πως έπρεπε να δουλεύει.

 

Τώρα από περιέργια περισσότερο...

 

@alex2005: Όταν λες 2 Object μοπρούν να έχουν reference το ίδιο Object στη μνήμη πως το κάνεις?

Πχ έχεις

 

>Object1 a = new Object1();
Object1 b = new Object1(); 
a=b;
b.feature1=2;

 

το a.feature1 όμως δεν έχει αλλάξει. Μόνο με χρήση pointers μπορώ να το φανταστώ, έτσι ώστε το b να είναι pointer στο a.

 

@i.cherouvim: O κώδικας που παρέθεσες θα δουλέψει και για την πάνω περίπτωση των a και b? H join δηλαδή θα "συγχρονίσει" τα 2 Objects? Την υλοποιούν οι Foo κ Βοο (γιατί δεν την βρήκα στο API)?

Δημοσ.
Καλησπέρα!

 

Έχω μια απορία στην Java. Μπορούμε να δημιουργήσουμε 2 μεταβλητές οι οποίες να είναι "συγχρονισμένες"? Δηλαδή όταν αλλάζουμε την μία, αυτομάτως και χωρίς εντολή εκχώρησης ή δική μας παρέμβαση, ν' αλλάζει και η άλλη?

 

Και τώρα που το θυμήθηκα, μήπως ξέρετε κάποιο free GUI designer σε plugin για το Eclipse?

 

Ευχαριστώ

 

Αυτο εδω θες αλλα δεν ειναι free!

http://www.jetbrains.com/idea/features/gui_builder.html

Δημοσ.
Μάλλον το έλυσα το πρόβλημα μου παιδιά, δεν είχα σκεφτεί επαρκώς πως έπρεπε να δουλεύει.

 

Τώρα από περιέργια περισσότερο...

 

@alex2005: Όταν λες 2 Object μοπρούν να έχουν reference το ίδιο Object στη μνήμη πως το κάνεις?

Πχ έχεις

 

>Object1 a = new Object1();
Object1 b = new Object1(); 
a=b;
b.feature1=2;

το a.feature1 όμως δεν έχει αλλάξει. Μόνο με χρήση pointers μπορώ να το φανταστώ, έτσι ώστε το b να είναι pointer στο a.

 

@i.cherouvim: O κώδικας που παρέθεσες θα δουλέψει και για την πάνω περίπτωση των a και b? H join δηλαδή θα "συγχρονίσει" τα 2 Objects? Την υλοποιούν οι Foo κ Βοο (γιατί δεν την βρήκα στο API)?

 

Όταν δουλεύεις με αντικείμενα στην Java πάντα παίρνεις έναν pointer.

Δηλαδή : Object a = new Object(); (η μεταβλητή a είναι pointer)

 

Επειδή έχω να προλάβω ένα αεροπλάνο τώρα θα επανέλθω αύριο να δω αν μπορώ να σου ποστάρω έναν κώδικα....

Δημοσ.

Ενα object μπορει να εχει 500 references πανω του.Αρκει αυτα τα references να εχουν δηλωθει πιο πριν.Μπορεις και να δηλωσεις ενα reference χωρις αναγκαστικα να δημιουργησεις object.

Αν ομως δημιουργησεις και αντικειμενο και μετα κολησεις το reference σε καποιο αλλο αντικειμενο το ορφανο αντικειμενο γινεται collected απο τον garbage collector.

Δημοσ.
Όταν δουλεύεις με αντικείμενα στην Java πάντα παίρνεις έναν pointer.

Δηλαδή : Object a = new Object(); (η μεταβλητή a είναι pointer)

 

ναι αλλά τα a και b υποθέτω ότι δείχνουν διαφορετικές θέσεις μνήμης γιατί εάν η εντολή a=b σήμαινε "κάνε το a να δείχνει στο b" τότε οποιαδήποτε αλλαγή στο b στη συνέχεια (πχ b.feature1++ ) θα σήμαινε αυτομάτως και αλλαγή του αντίστοιχου feature του a κάτι το οποίο δε συμβαίνει, σωστά? Επομένως συμπεραίνω ότι τα a και b δείχνουν θέσεις μνήμης (είναι pointers) μεν, διαφορετικές δε, αφού η new μας έδωσε χώρο σε διαφορετικό μέρος και ότι η εντολή a=b κάνει ουσιαστικά αντιγραφή περιεχομένου και όχι διεύθυνσης.

 

Γενικά εγώ κολλάω στο πως 2 διαφορετικές μεταβλητές Object μπορούν ουσιαστικά να δείχνουν στο ίδιο αντικείμενο σε μία θέση μνήμης, έτσι ώστε είτε a.feature++ πούμε, είτε b.feature++ πούμε, να αλλάζει το feature του αντικειμένου.

Δημοσ.
>
package javaapplication1;

class MyClass
{
   public int x;
}
public class Main {

   public static void main(String[] args) {
     MyClass a=new MyClass();
     a.x=10;
     
     MyClass b=a;
     MyClass c=b;
     b.x++;
     
     System.out.println(b.x+" "+a.x+" "+c.x);
   }

}

Δημοσ.

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

	{
		a = new TestObject(3);
		b= new TestObject(5);
		System.out.println(a.toString());
		System.out.println(b.toString());
		System.out.println(a.getVal());
		System.out.println(b.getVal());
		
		a=b;
		System.out.println(a.toString());
		System.out.println(b.toString());
		System.out.println(a.getVal());
		System.out.println(b.getVal());
		b.setVal(7);
		System.out.println(a.getVal());
		System.out.println(b.getVal());
		
	
	}

		private static TestObject a,b;
}

 

>
public class TestObject
{

TestObject(int g)
	{
		this.z = g;
	} 

public int getVal()
	{
		return this.z;
	}

public void setVal(int j)
	{
		this.z = j;
	}


private int z;
}

 

Output

>
TestObject@9304b1
TestObject@190d11
3
5
TestObject@190d11
TestObject@190d11
5
5
7
7

 

οπότε αυτό που καταλαβαίνω ότι λες είναι λάθος

Δημοσ.
Για Visual Editor κοίτα εδώ: http://download.eclipse.org/tools/ve/downloads/index.php

 

Να σε ρωτήσω, το εγκατέστησα και δημιούργησα μια VisualClass αλλά δεν έχει κάπου να σχεδιάσεις...Η Pallete που σου έχει στα δεξιά είναι άδεια. Μήπως κάνω κάτι εγώ λάθος? Δοκίμασα και με άλλους τύπους εκτός της VisualClass αλλά τίποτα...

 

601537

 

601538

 

 

 

Τώρα είδα τις απαντήσεις σας. Ναι όντως έχετε δίκιο, ευχαριστώ για τις απαντήσεις σας!

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...