Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Presbiopia - la 43 ani ?

Termen transcriere autovehicul

Cazare Timisoara pe 4-5 zile

Primele zile ale internetului per...
 Ditra 25

Casti USB-C ptr A-54

Aplicatie medicala / asistent med...

De ce vor atația politicieni...
 ERR_ADDRESS_UNREACHABLE

Legea 18/1968 Se mai aplica?

Digi conectare 2 routere prin fir

Succesiune notar versus instanta ...
 Montaj aer conditionat in balcon ...

Cont curent mulți valuta far...

Sugestii plan casa

Experiente cu firme care cumpara ...
 

Nelamuriri programare despre metode statice

- - - - -
  • Please log in to reply
4 replies to this topic

#1
Sess

Sess

    Junior Member

  • Grup: Members
  • Posts: 68
  • Înscris: 20.01.2016
Salut,

Metodele statice sunt utlizate pentru a apela acele metode fara a le atasa de un obiect. Dar totusi, exista si varianta asta. La ce sa mai fie declarate statice atunci?

public class TestClass {
static Test test; // <---- obiect de tip Test
public static void main(String[] args) {
	 test.hello(); // <---- metoda hello() instantiata
}
}
class Test{
static void hello(){
	 System.out.println("Test");
}
}


Edited by MarianG, 22 May 2017 - 22:02.
un topic, o problema


#2
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,233
  • Înscris: 24.02.2007
Ca sa nu mai declari obiectul de tip Test. Iar daca tu declari static Test in TestClass, colegul declara static Test in TestClass2, va mirati apoi de ce cele doua instante sunt separate cand te-ai fi asteptat sa fie acelasi lucru (daca aveau metode statice).

Quote

Internally, the elements in a multiset are always sorted following a specific strict weak ordering criterion indicated by its internal comparison object (of type Compare).

Edited by dani.user, 22 May 2017 - 21:36.


#3
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
Eu consider permiterea acestui lucru o greșeală de design a limbajului Java.

În PHP de exemplu, așa ceva generează măcar o avertizare.

#4
lightpoint

lightpoint

    Member

  • Grup: Members
  • Posts: 785
  • Înscris: 16.02.2017

Quote

static Test test; // <---- obiect de tip Test
de fapt este Obiect de tip Clasa (avand numele Test) si nu obiect de tip Test.
apelezi la singletonul din spatele clasei si nu instanta obiectului de tip test.
Tu aici nu instantiezi nimic daca observi ci doar declari.
Aici e confuzia. Ai fost indus in eroare de faptul cu tu crezi ca instantiezi dar de fapt doar declari.
Daca in spate nu exista singletonul clasei, atunci tu erai in cazul in care doresti sa accesezi static  o variabila  intr-un mod dinamic
iar  compilerul nu te va lasa sa compilezi asa ceva.

Apoi a mai fost indus in eroare din cauza faptului ca in java se pote sa ai "clase statice" care sunt inner insa nu poti
avea clase statice de top-level,

Quote

test.hello(); // <---- metoda hello() instantiata
de fapt este  Test.hello() in realitate, insa tu il instantiezi folosind metodologia de instantiere a obiectelor non-singleton.
De aceea pun pariu pe ce vrei tu, ca al tau compiler o sa se planga de faptul ca vrei sa accesezi o variabila statica insa in mod  dinamic.
Cum poti sa-mi "instantiez o metoda ? ".Nu


In java metodele statice sunt legate the instanta unica a clasei respective.
In java pot sa-mi declar obiecte statice daca acestea sunt clase de tip inner sau nested insa nu pot sa declar un obiect static de top-level
insa pot sa fortez o clasa de top-level sa se comporta ca o "clasa statica" daca o declar cu final si ii fac constructorul private, adica ajung
la asa ceva :
https://www.tutorial...ton_pattern.htm
Conceptul de "clasa statica" este definit ad-hoc in sensul ca se considera a fi o clasa statica, o clasa care are numai metode statice.Insa aceasta
este doar o cutuma, pt ca foarte bine acea "clasa statica" acepta instantierea ei de cate ori doresc eu.
Acest fapt nu reprezinta o limitare sau eroare de design al limbajului ci doar faptul ca unii programatori au facut astfel de asocieri in mintea lor.
Este adevarat ca o clasa care are metodele statice , acestea pot fi accesate doar   prin intermediul singletonului de clasa, adica NumeClasa.metoda,
insa  acea "clasa statica" poate fi instantiata de cate ori doresc eu, ceea ce dpdv al definitiei de static ( in context multithreading) isi cam pierde sensul.
public class GO {
public static void main (String[] args) throws java.lang.Exception
{
GO.metoda1();
new GO().metoda2();

}
public static void metoda1() {
System.out.println(
	 "apartin numai instantei clasei si nu potentialelor diferite instante." +
	 " Parintele meu este de fapt singletonul creat in spatele clasei.Pot fii accesat doar prin intermediul instantei de clasa" +
	 "la nivel de multithreading partajez aceiasi informatie pt orice thread care ma poate accesa si pot fi schimbat de oricare alt thread."
	 );
}

public void metoda2() {
System.out.println(
	 "apartin oriarei instante mai putin cea a clasei (singletonului ei).Parintele meu este instanta curenta.Pot fi accesat prin orice instanta, mai putin cea a clasei (singletonului ei)" +
	 "la nivel de multithread sunt izolat fata de alte threaduri, ele nu ma pot schimba si nu sunt partajat cu alte threaduri"

);
}
}

PS: poti sa-ti dai seama de mai multe daca vei studia java multithreading.Acolo vei vedea importanta staticelor.

Edited by lightpoint, 23 May 2017 - 09:32.
tag


#5
Sess

Sess

    Junior Member

  • Grup: Members
  • Posts: 68
  • Înscris: 20.01.2016
Mersi mult! Foarte detaliata explicatie.

Edited by MarianG, 26 May 2017 - 16:21.
removed quote


Anunturi

Chirurgia endoscopică a hipofizei Chirurgia endoscopică a hipofizei

"Standardul de aur" în chirurgia hipofizară îl reprezintă endoscopia transnazală transsfenoidală.

Echipa NeuroHope este antrenată în unul din cele mai mari centre de chirurgie a hipofizei din Europa, Spitalul Foch din Paris, centrul în care a fost introdus pentru prima dată endoscopul în chirurgia transnazală a hipofizei, de către neurochirurgul francez Guiot. Pe lângă tumorile cu origine hipofizară, prin tehnicile endoscopice transnazale pot fi abordate numeroase alte patologii neurochirurgicale.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate