resources:
javac -d bin -sourcepath src -cp lib/lib1.jar;lib/lib2.jar src/com/example/Application.java
crea l'eseguibile bin/com/example/Application.class, che si può far girare con
java -classpath bin;lib/lib1.jar;lib/lib2.jar com.example.Application
we provide an actual class name that java would attempt to find based on provided classpath
in alcune verioni jvm settare "." nel CLASSPATH per accedere alle classi locali
javac -cp .;lib/lib1.jar com/example/Application.java
the best way to have different classpath for different applications on same machine, override environment variable CLASSPATH, creating start-up script and set classpath there:
CLASSPATH=/home/tester/classes java -classpath $CLASSPATH TestMain #windows java -classpath C:\test\test com.test.main # con jar files java -classpath /usr/local/lib/app/test.jar com.test.main
By default CLASSPATH points to current directory denoted by "." and it will look for any class only in current directory.
In Linux, from either your .bash_profile or .bashrc (.bash_profile on every login, .bashrc, every time you open a new terminal window)
export CLASSPATH=".;lib"
test:
echo ${CLASSPATH}
real life example:
#!/bin/sh java -Dorg.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger -classpath jakarta-oro-2.0.6.jar: jmdns.jar:log4j-1.3alpha-7.jar: log4j-chainsaw-2.0alpha-1.jar: log4j-optional-1.3alpha-7.jar: log4j-oro-1.3alpha-7.jar: log4j-smtp-1.3alpha-7.jar: log4j-xml-1.3alpha-7.jar: log4j-zeroconf.jar: xstream-1.1.2.jar org.apache.log4j.chainsaw.LogUI
#!/bin/sh # file configurazione come primo argomento java -Dsystem.env=production -classpath $project_dir/lib/A.jar: $project_dir/lib/B.jar: $project_dir/lib/C.jar: $project_dir/lib/D.jar it.EVweb.Worker.Main $project_dir/config/config.json
#!/bin/bash # MAIN_CLASS=it.proj.Main JAVA_BIN=`which java` LIB_PATH=/path/to/app # JPATH=$LIB_PATH/mqserver.jar JPATH=$JPATH:$LIB_PATH/logback-core-1.1.2.jar JPATH=$JPATH:$LIB_PATH/logback-classic-1.1.2.jar JPATH=$JPATH:$LIB_PATH/gson-2.3.1.jar JPATH=$JPATH:$LIB_PATH/mysql-connector-java-5.1.34-bin.jar JPATH=$JPATH:$LIB_PATH/javax.mail-1.5.2.jar JPATH=$JPATH:$LIB_PATH/mailapi-1.5.2.jar JPATH=$JPATH:$LIB_PATH/jt400.jar # # run the program $JAVA_BIN -Dit.proj.log="$LOG_FOLDER" -classpath $JPATH $MAIN_CLASS
JAVA_HOME
sudo nano /etc/environment JAVA_HOME=/usr/lib/jvm/java-7-oracle
update-alternatives --config java
[public|protected|private] [static] [final] Tipo identificatore [= value];
default: nel medesimo package Protected accessibile dallo stesso package e da classi figlie final inizializzata una sola volta(in dichiarazione), Al contrario delle costanti, il valore delle variabili final non è necesariamente noto a compile-time, usato su metodo, rendere non ridefinibile dalle sottoclassi costanti: contempraneamente final static
String a = String.valueOf(2); // integer to numeric string int i = Integer.parseInt(a); // numeric string to an int double d = 10.0; float f = (float) d; d = (double) 5; float r= (float) x / (float) y;
la divisione tra interi, ritorna un valore intero.
ogni classe pubblica (public class) deve essere contenuta in un file con nome uguale al nome della classe: es. MiaClasse deve trovarsi nel file MiaClasse.java
convenzione: i nomi delle classi inizino con un carattere maiuscolo e siano CamelCase
mkdir -p it/ev/prj java it.ev.prj.MiaClasse javac MiaClasse.java
package it.ev.prj; public class MiaClasse { public static void main(String[] args) { System.out.println("Hello, World"); } }
con jar libs:
jar cf mylib.jar it
java -cp mylib.jar:mylib2.jar it.ev.prj.MiaClasse
su Windows i file .jar devono essere separati da ';', ':' x Unix
Array ha il limite notevole di non poter cambiare dimensione (size) dopo la creazione
string[] as = new String["1","2","3"]; new String[]{"a","b","c","d"}; int[] numeroGiorniPerMese = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; int[][] a_i = new int[][] = { { 1, 2, 3 }, { 4, 5, 6 } };
java.lang.Arrays contiene algoritmi per sorting e search
Queue<String> ll = new LinkedList<String>(); for(Iterator<String> si=ll.iterator(); si.hasNext(); ) { String str = si.next(); } for(String str:ll) { } Collection<string> a = new ArrayList<String>(); // popola for(String s:args) { a.add(s); } // itera for(String tmp:a) { System.out.println(tmp); }
// i compilatori moderni avvisano che le arrylist vanno sostituite con i Generics Type-Safe @SuppressWarnings public static void test_al(){ Collection list = new ArrayList(); list.add("test"); list.add(new Integer(5)); // a runtime avverrà un ClassCastException Iterator it=list.iterator(); while(it.hasNext()){ String s = (String) it.next(); } } Collection<String> lista = new ArrayList<String>(); lista.add("test"); lista.add(new Integer(5)); // errore in fase di compilazione Iterator<String> it=lista.iterator(); while(it.hasNext()){ String tmp = it.next(); // Non è necessario il cast }
Map<Integer, String> m = new HashMap<Integer, String>(); mappa.put(2, "test");
public static void printAll(Collection<?> list){ }
import java.util.ArrayList; import java.util.List; public class Customer { static public ArrayList<Customer> allCustomers = new ArrayList<Customer>(); public Integer id = 0; public Customer() {} public static List<String> getEnabledCustomerNames() { ArrayList<String> outList = new ArrayList<String>(); for(Customer customer : Customer.allCustomers) { if(customer.enabled) { outList.add(customer.name); } } return outList; } }
String s = "a string"; int s = s.length(); "" + String.valueOf(length); String titolo = "I promessi Sposi"; String a = titolo.substring(2); // a vale "promessi Sposi" String c = titolo.substring(2,9); // c vale "promessi" String messaggio = "Ciao XX"; messaggio.replace("XX", "Mondo"); boolean contains(CharSequence s) boolean equals(Object anObj) boolean isEmpty() String[] split(String regex) String trim() // per creare testi di grandi dimensioni: StringBuffer StringBuilder
@Override @SuppressWarnings({"deprecation"})
public class TestClass { public testMethod(int id, String... var) { // accedi come se String[] var } }
Eccezioni | Errori |
---|---|
ArithmeticException | AbstractMethodError |
ArrayIndexOutOfBoundsException | ClassCircularityError |
ArrayStoreException | ClassFormatError |
ClassCastException | Error |
ClassNotFoundException | ExceptionInInitializerError |
CloneNotSupportedException | IllegalAccessError |
Exception | IncompatibleClassChangeError |
IllegalAccessException | InstantiationError |
IllegalArgumentException | InternalError |
IllegalMonitorStateException | LinkageError |
IllegalStateException | NoClassDefFoundError |
IllegalThreadStateException | NoSuchFieldError |
IndexOutOfBoundsException | NoSuchMethodError |
InstantiationException | OutOfMemoryError |
InterruptedException | StackOverflowError |
NegativeArraysizeException | ThreadDeath |
NoSuchFieldException | UnknownError |
NoSuchMethodException | UnsatisfiedLinkError |
NullPointerException | UnsupportedClassVersionError |
NumberFormatException | VerifyError |
RuntimeException | VirtualMachineError |
SecurityException | |
StringIndexOutOfBoundsException | |
UnsupportedOperationException |
import java.lang.System;//importato di default java.applet java.awt java.awt.color java.awt.datatransfer java.awt.dnd java.awt.event java.awt.font java.awt.geom java.awt.im java.awt.image java.awt.image.renderable java.awt.print java.beans java.beans.beancontext java.io java.lang java.lang.ref java.lang.reflect java.math java.net java.rmi java.rmi.activation java.rmi.dgc java.rmi.registry java.rmi.server java.security java.security.acl java.security.cert java.security.interfaces java.security.spec java.sql java.text java.util java.util.jar java.util.zip javax.accessibility javax.swing javax.swing.border javax.swing.colorchooser javax.swing.event javax.swing.filechooser javax.swing.plaf javax.swing.plaf.basic javax.swing.plaf.metal javax.swing.plaf.multi javax.swing.table javax.swing.text javax.swing.text.html javax.swing.text.html.parser javax.swing.text.rtf javax.swing.tree javax.swing.undo org.omg.CORBA org.omg.CORBA.DynAnyPackage org.omg.CORBA.ORBPackage org.omg.CORBA.portable org.omg.CORBA.TypeCodePackage org.omg.CosNaming org.omg.CosNaming.NamingContextPackage sun.tools.ttydebug sunw.io sunw.util. com.sun.image.codec.jpeg com.sun.java.swing.plaf.windows com.sun.java.swing.plaf.motif
URL url = new URL("http://freegeoip.net/json/"); HttpURLConnection request = (HttpURLConnection) url.openConnection(); request.connect(); JsonParser jp = new JsonParser(); //from gson JsonElement root = jp.parse(new InputStreamReader((InputStream) request.getContent())); //convert the input stream to a json element JsonObject rootobj = root.getAsJsonObject(); //may be an array, may be an object. string val = rootobj.get("key").getAsString();
import com.google.gson.Gson; public class JsonExample { public static void main(String[] args) { Gson gson = new Gson(); String json = "{ \"foo\": 1, \"bar\": [ \"10\", \"apples\"] }"; MyJsonObject obj = gson.fromJson(json, MyJsonObject.class); System.out.println(obj.getFoo()); for(String bar : obj.getBar()) { System.out.println(bar); } obj = new MyJsonObject(2, new String[] { "20", "oranges" }); json = gson.toJson(obj); System.out.println(json); } } class MyJsonObject { private int foo; private String[] bar; public MyJsonObject(int foo, String[] bar) { this.foo = foo; this.bar = bar; } public int getFoo() { return foo; } public String[] getBar() { return bar; } }
import java.io.BufferedReader; import java.io.FileReader; class fileReadTest { public static void main(String args[]){ BufferedReader br = null; String line; float totalVal = 0; try{ br = new BufferedReader(new FileReader("./file.csv")); while ((line = br.readLine()) != null) { String[] parts = line.split(","); String sval = parts[1].replace("\"","").replace("+",""); totalVal += Float.parseFloat(sval); } } catch (Exception ex){ System.out.println(ex); } System.out.println("Total: " + totalVal); } } public void printSmiles(){ BufferedReader br = new BufferedReader(new FileReader("pathToFile.txt")); String line; while((line = br.readline) != null){ System.out.println(line); } }
STDIN read
package it.ev.test_io; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import it.ev.Accounts; public class Program { public static void main(String[] args) throws IOException { BufferedReader isr = new BufferedReader(new InputStreamReader(System.in)); String num = 0; { System.out.println("inserire un numero di conto valido:"); num = isr.readLine(); System.out.println("numero '" + num + "' is" + (Accounts.isValid(acct) ? "" : " non") + " valido."); } while (acct != null && acct.length() != 0); } }
import org.apache.commons.io; try { URL url = new URL(driver.getCurrentUrl()); File file_path = new File("/tmp/myFile.pdf"); FileUtils.copyURLToFile(url, file_path); } catch (Exception x) { x.printStackTrace(); }
nio
URL website = new URL("http://test/file"); Files.copy(website.openStream(), target, StandardCopyOption.REPLACE_EXISTING);
package main import ( "fmt" "os/exec" ) func main() { start_java_app_test() } func start_java_app_test() { cmd_str := "java -Xmx2g -jar test_app.jar" cmd_output, err := exec.Command("bash", "-c", cmd_str).CombinedOutput() if err != nil { fmt.Println(err) } fmt.Println(cmd_output) }