» »

[java] package/import

[java] package/import

killa bee ::

Imam 2 .java datoteki v isti mapi na namizju:
Moj cilj je da bi lahko iz terminala pognal program HelloDate.
Uporabljam linux. Kako bi lahko to naredil? Imam že inštaliran JDK.

import net.sssw.test.*;

public class HelloDate{

	public static void main(String args[]) {
	
		System.out.println("from main!");
	
		Second ob1 = new Second();
	
		ob1.f();
	
	}

}


package net.sssw.test;

public class Second{
	
	void f(){
		System.out.println("from second!");
	}
	
}
  • spremenilo: killa bee ()

Kroos ::

Zakaj sploh hočeš uporabit package za te 2 java datoteki? Package se uporablja takrat, ko imaš veliko datotek, da se izogneš kakšnim 'naming' konfliktom.

Drugače pa, če sta datoteki v istem package-u jih ne rabiš importat med sabo, glavno je le, da imata oba java datoteki na vrhu definiran isti package, torej v tvojem primeru 'net.sssw.test';
Struktura 'net.sssw.test' pomeni tudi, da moraš imeti obe java datoteki v strukturi direktorijev 'net/sssw/test', saj vsak 'člen' v package-u pomeni en direktorij oz. mapo.

Ko imaš vso to strukturo direktorijev postavljeno, lahko iz direktorija v katerem je direktorij 'net/' kličeš java datoteke takole (jaz sem zadevo poganjal na Windowsu, ker nimam Linuxa, ampak je postopek precej isti):
E:\>javac net/sssw/test/Second.java
E:\>javac net/sssw/test/HelloDate.java
E:\>java net/sssw/test/HelloDate

Dobiš izpis:
from main!
from second!

killa bee ::

men napiše:

HelloDate.java:1: error: package net.sssw.test does not exist
import net.sssw.test.*;
^
HelloDate.java:9: error: cannot access Second
		Second ob1 = new Second();
		^
  bad class file: ./Second.class
    class file contains wrong class: net.sssw.test.Second
    Please remove or make sure it appears in the correct subdirectory of the classpath.
2 errors

Zgodovina sprememb…

  • spremenilo: killa bee ()

killa bee ::

Zakaj sploh hočeš uporabit package za te 2 java datoteki? Package se uporablja takrat, ko imaš veliko datotek, da se izogneš kakšnim 'naming' konfliktom.
Za probat, da vidim če res deluje.

Kroos ::

V datoteki HelloDate.java ni potrebno narest 'import net.sssw.test.*;', ampak 'package net.sssw.test;', saj sta datoteki med seboj vidni, če sta v istem package-u.
Poleg tega moraš tudi imeti strukturo direktorijev tako:
net
|__ sssw
    |___ test
         |___ HelloDate.java
         |___ Second.java

Datoteke pa kličeš (s pomočjo ukazov, ki sem jih napisal zgoraj) iz direktorija v katerem je direktorij net/, torej v tvojem primeru iz namizja oz. iz mape v namizju, če imaš ta direktorij.

killa bee ::

če jih dam v ist folder potem ne potrebujem niti 'package net.sssw.test;' niti "import net.sssw.test.*;"
V kakšnem primeru bi pa potem sploh rabil 'package net.sssw.test;' in "import net.sssw.test.*;" ?

killa bee ::

Kaj pa če dam file HelloDate.java v folder sssw, second.java pa pustim kjer je. V tem primeru mi ko hočem compilat HelloDate.java vrže to napako:

error: package net.sssw.test does not exist
import net.sssw.test.*;
^
HelloDate.java:9: error: cannot find symbol
		Second ob1 = new Second();
		^
  symbol:   class Second
  location: class HelloDate
HelloDate.java:9: error: cannot find symbol
		Second ob1 = new Second();
		                 ^
  symbol:   class Second
  location: class HelloDate
3 errors

Zgodovina sprememb…

  • spremenilo: killa bee ()


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

android črta

Oddelek: Programiranje
412285 (1556) g333kk
»

Ne zazna R.class -android

Oddelek: Programiranje
171217 (1055) Marat
»

[Java] Zasnova shoot em up igre

Oddelek: Programiranje
111113 (792) PecenkA
»

[Android SDK]+[NetBeans][verzija 7.1.1]Project Compile Error

Oddelek: Programiranje
61209 (1117) KernelPanic
»

Java problem

Oddelek: Programiranje
201522 (1220) infiniteLoop

Več podobnih tem