OOP1 Java intro. Klasser, objekter, interfaces, nedarvning, Association, Aggregation og Composition mvh. Try and catch exceptions. Package Intro. til jar filer.
Overblik Compile-time Environment Run-time Environment Java Source (.java) Class Loader Bytecode Verifier Java Class Libraries Java Compiler Java Bytecodes move locally or through network Java Interpreter Just in Time Compiler Java Virtual machine Runtime System Java Bytecode (.class ) Operating System Hardware
Hvad er godt ved Java. Portabel - Write Once, Run Anywhere. Robust memory management. Nem network programming. Multi-thread programmering. Dynamic & extensible (loads of libraries). Klasser gemmes I separate filer. Loades når de skal bruges. Osv.
Lidt om simple datatyper: Array int[] ar1; ar1= new int[10]; Int[] ar2= {2,3,4,5,6; int[][][] d3ar= new int[4][5][6]; d3ar[2][2][2]= 5; Object obj1= ar2[1];
Navne konventioner. Java er case-sensitiv - maxval og maxval, og er forskellige navne Class navne starter med Stort bogstav. Alle andre navne begynder med lille bogstav. Undtagen konstanter der skrives med stort: PI Sammensatte ord skrives: thebigone Underscores bruges ikke i navne undtagen konstanter. Sådan er det bare!
Class public class EnKlasse { varable eller attributter eller field eller data, constructors methods public class EnKlasse extends EnAndenSuperKlasse implements EtInterface { varable eller attributter eller field eller data, constructors methods
Et java program public class Owner extends SKlasse { private String name; public Owner() { super("kurt"); this.name="kurt"; private Owner(String name) { this.name=name; public static void main(string[] args) { Owner o1=new Owner("Peter"); Owner o2=new Owner(); public class SKlasse { public SKlasse() { ----------------- public SKlasse(String name) { -----------------
Et java program public class Owner extends SKlasse { private String name; int a; public Owner() { super("kurt"); this.name="kurt"; private Owner(String name) { this.name=name; public static void main(string[] args) { Owner o1=new Owner("Peter"); Owner o2=new Owner(); o1.a= o1.regn(2,3f); public class SKlasse { public SKlasse() { ----------------- public SKlasse(String name) { ----------------- public int regn(int x,float y) { return x+ (int)y;
Et java program public class Owner extends SKlasse { private String name; int a; public Owner() { super("kurt"); this.name="kurt"; private Owner(String name) { this.name=name; public int regn(int x,float y) { return 2 * x + (int)y; public static void main(string[] args) { Owner o1=new Owner("Peter"); Owner o2=new Owner(); o1.a= o1.regn(2,3f); public class SKlasse { public SKlasse() { ----------------- public SKlasse(String name) { ----------------- public int regn(int x,float y) { return x+ (int)y;
Et java program public class Owner extends SKlasse { private String name; int a; public Owner() { super("kurt"); this.name="kurt"; private Owner(String name) { this.name=name; public int regn(int x) { return 2 * x + 5; public int regn(int x,float y) { return 2 * x + (int)y; public static void main(string[] args) { Owner o1=new Owner("Peter"); Owner o2=new Owner(); o1.a= o1.regn(2,3f); o1.a= o2.regn(2); public class SKlasse { public SKlasse() { ----------------- public SKlasse(String name) { ----------------- public int regn(int x,float y) { return x+ (int)y;
Association 'Has-A' relationship.. public class Person { private final Name name; private Costume currentclothes; //... Aggregation og Composition kan man tænke på som specialiseringer af Association
Aggregation: "has" another object. class Car { private Engine engine; void setengine(engine engine){ this.engine = engine; void move() { if (engine!= null) engine.work();
Composition: "owns" another object. final class Car { private final Engine engine; Car(EngineSpecs specs) { engine = new Engine(specs); void move() { engine.work(); final class (Man kan ikke nedarve fra en final klasse) final void Metode() (Kan ikke overskrives) public static final double PI = 3.141592653589793;
Static public static final double PI = 3.141592653589793; Variables: Variablen deles af alle instanser af klassen og den eksistere allerede på reklærings tidspunktet. methods : Metoden kan anvendes dirkte uden at instantiere klassen. nested klasser Klassen kan ikke tilgå variable i den omsluttende klasse.
Access level modifier public class Owner extends SKlasse { private String name; public Owner() { super("kurt"); this.name="kurt"; private Owner(String name) { this.name=name; private void M1(){ public static void main(string[] args) { The following table shows the access to members permitted by each modifier. Modifier Class Package Subclass World public Ja Ja Ja Ja protected Ja Ja Ja Nej no modifier Ja Ja Nej Nej private Ja Nej Nej Nej
Metoder og data er oftes public eller private God praksis: Hold data private Hold så mange metoder som muligt private Få public metoder/data giver et simpelt interface til objektet
Exceptions. Fejl skal fanges og håndteres. 1. Error detection 2. Error objekt generering. 3. Error håndtering. /*No error detection, object generation or handling*/ public class A { private void f(){ int a=22/0; //java.lang.arithmeticexception public static void main(string[] args) { new A().f();
Error detection and handling: try throws and catch public class A4 { private void f(int x) throws ArithmeticException{ int a=22/x; private void test(int x){ try { f(x); catch(arithmeticexception e){ System.out.println("Catch exc: "+ e.getmessage()); public static void main(string[] args){ A4 a= new A4(); a.f(0); a.test(0); Operationer der bruger throws skal kaldes fra try{. Objektet der bliver kastet skal fanges af en catch{
Egne Exceptions. class MyException extends Exception { private static final long serialversionuid = 1L; public MyException(String msg){ super(msg); public class Test { static int divide(int x,int y) throws MyException{ if(y==0) throw new MyException("can't be divided by zero"); return x/y; public static void main(string[] args) { try { System.out.println(divide(4,0)); catch (MyException exc) { System.out.println(exc.getMessage());
Packages En indkapsling af classes og packages. Navngivningen er dotted notation. package autoforhandler.butik.biler import autoforhandler.butik.biler.*; Fx klassen Fiat.class Filsystem: autoforhandler/butik/biler/fiat.class
Packages Alle java filer indeholdt i en bestemt Packages skal starte med: Package lib; //lib er package navn Package lib.sub1.sub2 //lib.sub1.sub2 er package navn Alle der bruger disse package skal import dem, og CLASSPATH skal pege på lib direktoriet. sæt fx: CLASSPATH=.;d:\java\mylib Dvs alle klasser i lib gæmmes i: d:\java\mylib\lib Import lib.*; //Alle klasser I lib pakken kan nu bruges. Import lib.sub1.sub2.*;
jar - The Java Archive Nogle fordele: Security. Decreased download time <> increased load time. Compression. Package Versioning. (Udvikler og versionsinformation)
Common JAR file operations Operation To create a JAR file To view the contents of a JAR file To extract the contents of a JAR file To extract specific files from a JAR file To run an application packaged as a JAR file (requires the Main-class manifest header) To invoke an applet packaged as a JAR file Command jar cf jar-file input-file(s) jar tf jar-file jar xf jar-file jar xf jar-file archived-file(s) java -jar app.jar <applet code=appletclassname.class archive="jarfilename.jar" width=width height=height> </applet> Opret text filen Manifest.txt med følgende indhold: Main-Class: MyPackage.MyClass Filen skal slutte med carriage return. jar cfm MyJar.jar Manifest.txt MyPackage/*.class