Permalänk
Medlem

Java: Static

Jag har två små problem jag inte kan hitta nån bra info om..

package stat; public class VerySpecial { public static void main(String[] args) { Math m = null; System.out.println(m.random()); } }

Samt..
Eventuella problem här?

package stat.override; public interface IA { public abstract void doIt(); public abstract int doOther(); public abstract int doYetOther(int i); } package stat.override; public class ImplStatic implements IA { public static int doOther() { return 365; } public void doIt() { System.out.println("Gnhurv.."); } public int doYetOther(int i); return 2*i; } }

Vore tacksam för bra förklaringar!

Visa signatur

WS: Asus P8Z77-I Deluxe mITX | Intel 3770K@4.6 | NH-U12P | Asus 780 GTX | Corsair 2x8GB 1600Mhz CL9 | Samsung 840 512GB | Ubuntu 16.04.3 x86_64 | Corsair AX750 | 2x Dell U2412M | Puppe.se | NAS: i7 860, 16GB DDR3, GA-P55M-UD4, FD Define R3, 8x2TB Samsung F4EG, Serveraid M1015, EVGA 750W G2 PSU, FreeBSD x64

Permalänk

DU kan inte bara posta kod och inte säga vad du undrar!

edit: denna raden ser konstig ut:

public class void main(String[] args) {

borde väl vara:

public static void main(String[] args) {

Och ett interface bör inte ha abstrakta metoder?

Math m = null; System.out.println(m.random());

Kommer ge ett NullPointerException.. "m" är ju null

Visa signatur

Asus Striker II Extreme / XFX Geforce GTX 280 / Q9450 @ 3.6GHz/ TRUE Noctua 120/ 4x1GB Corsair TWIN3X2048-1333C9DHX / X25-M G2 80gb Velociraptor / Win 7 Ultimate x64/ Antec P190

MovieDatabase

Permalänk
Medlem

Oj, förlåt, det kanske blev lite otydligt..

Det är två små övningar jag har i skolan, och jag ska förklara vad som är fel.. men jag kan inte hitta någon info om vad som är felet. Är ingen van javahackare.
Just detta handlar mest om "static" och användning av dito.

Första stycket är om det alls fungerar?

Andra stycket ska jag förklara vad som är fel..

EDIT:

Citat:

Ursprungligen inskrivet av KurreKula
DU kan inte bara posta kod och inte säga vad du undrar!

edit: denna raden ser konstig ut:

public class void main(String[] args) {

borde väl vara:

public void main(String[] args) {

Och ett interface bör inte ha abstrakta metoder?

Math m = null; System.out.println(m.random());

Kommer ge ett NullPointerException.. "m" är ju null

Det var ett skrivfel, rättat det.

Alla metoder i ett interface är abstrakta, men det måste inte skrivas ut, vad jag förstod av läraren.

Nja, det blir inte nåt exception.. det fungerar faktiskt, men frågan är VARFÖR det funkar. :/
Jag tyckte också det borde blivit ett exception där.

Visa signatur

WS: Asus P8Z77-I Deluxe mITX | Intel 3770K@4.6 | NH-U12P | Asus 780 GTX | Corsair 2x8GB 1600Mhz CL9 | Samsung 840 512GB | Ubuntu 16.04.3 x86_64 | Corsair AX750 | 2x Dell U2412M | Puppe.se | NAS: i7 860, 16GB DDR3, GA-P55M-UD4, FD Define R3, 8x2TB Samsung F4EG, Serveraid M1015, EVGA 750W G2 PSU, FreeBSD x64

Permalänk

det är inte så att det funkar eftersom att math är en statisk klass?

edit: som du kanske märker kan jag ej java

Visa signatur

Asus Striker II Extreme / XFX Geforce GTX 280 / Q9450 @ 3.6GHz/ TRUE Noctua 120/ 4x1GB Corsair TWIN3X2048-1333C9DHX / X25-M G2 80gb Velociraptor / Win 7 Ultimate x64/ Antec P190

MovieDatabase

Permalänk
Medlem

Kodbit1:
Aldrig sett anrop till random göras sådär, vet inte om det fungerar, kan vara det som är fel. (ta reda på det rätta?)

Kodbit2:
Är inte helt säker men man anger inte "abstract" när man deklarerar prototyp i ett interface, det gör man i ett annat sammanhang.(vilket?)

Sedan är jag lite osäker på om man kan ha static i definitionen till "doOther()"
när den inte är static i prototypen i interface:et.

public int doYetOther(int i); <-- ";" skrivfel?

Permalänk
Medlem

Kodstycke ett är giltigt och fungerar. Det beror på att random() inte är en instansmetod, utan en klassmetod (alltså deklarerad med static) - och därför behövs det alltså inte skapas någon instans av klassen för att anropa random().

Kodstycke två är dock ogiltigt i den form du har angivit nu, man kan inte överskugga en metod med static-nyckelordet.

Jag kan också lägga till att du varken behöver ange public eller abstract för metoderna i ett interface - det är dom "by default". Man kan enbart deklarera publika metoder och självklart är dessa metoder abstrakta också, i och med att dom inte har någon metodkropp och behöver implementeras i subklasserna.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Klockan
Sedan är jag lite osäker på om man kan ha static i definitionen till "doOther()"
när den inte är static i prototypen i interface:et.

public int doYetOther(int i); <-- ";" skrivfel?

Bah, ja. Det är ett skrivfel av mig.. igen.

public int doYetOther(int i) { return 2*i; }

ska det självfallet vara.

Citat:

Ursprungligen inskrivet av bjornie
Kodstycke ett är giltigt och fungerar. Det beror på att random() inte är en instansmetod, utan en klassmetod (alltså deklarerad med static) - och därför behövs det alltså inte skapas någon instans av klassen för att anropa random().

Kodstycke två är dock ogiltigt i den form du har angivit nu, man kan inte överskugga en metod med static-nyckelordet.

Jag kan också lägga till att du varken behöver ange public eller abstract för metoderna i ett interface - det är dom "by default". Man kan enbart deklarera publika metoder och självklart är dessa metoder abstrakta också, i och med att dom inte har någon metodkropp och behöver implementeras i subklasserna.

Stort tack för mycket bra förklaring, känner jag!
Och givetvis tack till alla andra..!

Visa signatur

WS: Asus P8Z77-I Deluxe mITX | Intel 3770K@4.6 | NH-U12P | Asus 780 GTX | Corsair 2x8GB 1600Mhz CL9 | Samsung 840 512GB | Ubuntu 16.04.3 x86_64 | Corsair AX750 | 2x Dell U2412M | Puppe.se | NAS: i7 860, 16GB DDR3, GA-P55M-UD4, FD Define R3, 8x2TB Samsung F4EG, Serveraid M1015, EVGA 750W G2 PSU, FreeBSD x64