460 likes | 477 Views
A Quick Java Course part 1 . Michael McDougall CIS 573 September 27 th , 1999. Outline. State the purpose of the discussion A Java Review/Introduction <- today’s lecture Java tips & tricks Programming for GUI Applications Identify yourself Michael McDougall
E N D
A Quick Java Coursepart 1 Michael McDougall CIS 573 September 27th, 1999
Outline • State the purpose of the discussion • A Java Review/Introduction <-today’s lecture • Java tips & tricks • Programming for GUI Applications • Identify yourself • Michael McDougall • 1 yr programming in Industry in C++ • ~8 months programming in Java for Mocha project. • My 1st Powerpoint presentation! Bear with me.
Good References • The Java Programming LanguageSecond Edition. Ken Arnold & James Gosling, Addison Wesley, 1998. Good for basics. • http://www.javasoft.comJava software, news, documentation • http://www.javasoft.com/products/jdk/1.2/docs/index.html Documentation for the vast libraries.
What is Java? • An island in Indonesia (beyond the scope of this lecture). • A programming language. • Imperative (like C or Pascal). • Object Oriented (like C++) • Goal: Portable and Safe (unlike C)
Java Virtual Machine (JVM) • Java gets compiled into bytecode • Bytecode is like machine-code but runs on a Java Virtual Machine (instead of Pentium, Sparc etc.) • Goal: Programs compiled to bytecode will run on any machine that has a JVM program.
JVM Continued javac runs on Java file bytecode JVM runs on compiler compiler FASTER gcc runs on Pentium Chip machine code C file
How to use Java - Preliminary • Make sure ‘javac’ and ‘java’ are available on whatever system you are using. • On gradient or saul you should set your path to include /pkg/java-1.2.2/bin/
How to use Java • Write a program and save it in a ‘.java’ file. (tip: emacs has a nice Java mode) Example: MyProgram.java • Compile by typing: %javac MyProgram.java • Run the program: %java MyProgram
Example 1: MyProgram.java class MyProgram { public static void main(String[] arg) { String message = "Hello!"; System.out.println(message); } }
Example 1 cont. C:\School\cis573>javac MyProgram.java C:\School\cis573>java MyProgram Hello! C:\School\cis573>
Variables • Variables are similar to C variables • Examples: int x = 3; // integer with initial value int y; // integer, no initial value boolean b = true; y = x + x; if (b) { y = 5; }
Arrays • Java has arrays which are similar to arrays in C. • Indexes begin at 0 int[] intArr = new int[2]; intArr[0] = 3; intArr[1] = 5 + intArr[0]; String[] names = new String[100]; names[45] = “Software”;
Loops and Ifs • The syntax for control flow is similar to C. if (x==y) {...} if (x==y) {...} else {...} while (x!=y) {...} for (int i=0; i < 50 ; i++) {...} do {...} while (x!=y);
Switch • Java has a switch statement which is like the C switch statement. switch (x) { case 0: s=“zero”; break; case 1: case 2: s=“1 or 2”; break; default: s= “unknown”; }
Classes • Java programs are structured using Classes • Each class contains fields (a set of variables) and methods (a set of functions). • All procedures in Java must belong to a class. • A class can control access to its fields and methods using public and private keywords in the declarations (more later). • An object is an instance of a class.
Class Fields • class Point { public int x; public int y; } • class Prog2 { public static void main(String[] arg) { Point p = new Point(); //create a Point p.x = 2; p.y = p.x + 1; } }
Class Methods class Foo { public int twice(int x) { return (x+x); } } ... Foo f = new Foo(); //create a Foo object int count = f.twice(5); //set count to 10 //using f’s methods ...
Subclasses • Classes can be extended by another class. • If a class B extends a class A then we say that B is a subclass of A. A is the superclass of B. • A subclass can be used wherever the class can be used. • The subclass inherits the fields and methods of the superclass (well, some of them).
Subclasses example 1 • Class Point { public int x; public int y; } • Class BoolPoint extends Point { public boolean b; }
Subclasses example 2 ... BoolPoint boolP = new BoolPoint(); boolP.b = true; //we can use the b field boolP.x = 5; //AND the x & y fields boolP.y = 7; ...
Subclasses example 3 • We can use a BoolPoint whenever we use a Point... ... Point p = new BoolPoint(); p.x = 4; p.y = 8; ...
Subclasses example 4 • But we can’t use a Point in place of a BoolPoint (it has no ‘boolean b’ field). ... BoolPoint boolP = new Point(); // BAD - will not compile ...
Overriding methods • If a subclass has a method with the same name as a method in the super class then the subclass method is the one that gets executed. • We say that the subclass method overrides the super class method.
Overriding: example class A { public String getName() { return “A!”; } } class B extends A { public String getName() { return “B!”; } }
Overriding example cont. A a = new A(); //create an A object System.out.print(a.getName()); //Prints “A!” a = new B(); //create a B object System.out.print(a.getName()); //Prints “B!”
The Object Class • In fact, all Java classes are subclasses of a special class called Object. • The Object class contains some simple methods like clone(), equals() and toString().
Subclasses are nice • Subclasses allow you to add functionality to pre-existing code without copying it or modifying the original code. • Subclasses allow a limited form of polymorphism. public genericPrint(Object arg) { String msg = arg.toString(); System.out.print(msg); }
Hiding Methods and Fields • Access to fields and methods can be restricted by using private and protected declarations. • Allows classes to be treated as ‘black-boxes’; the messy details of a class’ implementation is hidden.
Public, Private, Protected • public - visible to all classes • protected - visible to all subclasses, hidden from other classes • private - hidden from all other classes. • Good Style: never set fields to be public; always require the programmer to call a method to access data in a class.
Public, Private, Protected example class List { public void insert(int i) { ... }; private void setNewCell(Cell c) {...}; protected int getSize() { ... }; } class ExtList extends List { public void foo() { insert(3); //OK setNewCell(c); //not allowed int x = getSize(); //OK } }
Public, Private, Protected example continued Class Prog5 { public static main() { List bunch = new List(); bunch.insert(3); // OK bunch.insertNewCell(c); //not allowed int i = bunch.getSize(); //not allowed } }
Constructors • When you create a new object using new you often want to initialize it using particular values. • Constructors are methods that create new objects of a class. • Example: when we create a Point we should be able to set the x and y fields during the creation.
Constructor example Class Point { public int x; public int y; public Point(int xArg, int yArg) { x = xArg; y = yArg; } } ... Point p = new Point(43,21); int sum = p.x + p.y; //sets sum = 64 ...
Arrays and Classes • You can declare and use arrays of classes just as you would for integers. ... Point[] pointArr = new Point[10]; pointArr[0] = new Point(1,5); pointArr[1] = new BoolPoint(4,5); int sum= pointArr[0].x + pointArr[0].y; ...
Null • Any class variable can be set to null. • An exception gets raised if you try to use a variable that is null (more on exceptions later). Point p = new Point(2,5); int sum = p.x + p.y; p = null; sum = p.x + p.y; // this will raise an exception
Interfaces • An interface is a list of methods and fields • A class which implements the interface must contain all of the methods and fields listed. • Interfaces allow a class to have more than one superclass. • Interface types can be used just like class types; we can use them for variables, arrays, etc.
Interface example • interface PhdStudent { public Prof getAdvisor(); } • Class CISPhdStudent implements PhdStudent { private Prof myBoss; public Prof getAdvisor() { return myBoss; } }
Interface example cont • PhdStudent[] phdArr = new PhdStudent[5]; phdArr[2] = new CISPhdStudent(); Prof pr = phdArr[2].getAdvisor();
Why Interfaces? • Q: Why do we bother with interfaces? Why don’t we always extend classes? • A: Sometimes it isn’t appropriate to put all the functionality in one superclass.
This slide took me 8 hours to draw! Why Interfaces? example Student superclass Phd Student CIS Student English Student subclass CIS Phd Student CIS Undergrad Student English Phd Student English Undergrad Student
Casting 1 • Subclasses have more functionality than their superclasses. What if we want to use that functionality even if we only have an object of the superclass type? • Example: Say we have a Student object and we want to use it as a CISStudent.
Casting 2 • In general we can’t force a Student to be a CISStudent (it might be an EnglishStudent), but if we know that a Student object is actually a CISStudent we can cast the Student. • Student s = new CISStudent(); CISStudent cis = (CISStudent) s;
Casting & instanceof • If you try to cast something that can’t be casted (e.g. cast an EnglishStudent to CISStudent) then an exception will be raised (more on exceptions later, I promise). • You can check if an object is of a certain class by using instanceof.
Instanceof example String getBuilding(Student s) { if (s instanceof CISStudent) { return “Moore Bldg”; } else if (s instanceof EnglishStudent) { return “Bennett Hall”; } }
Instanceof example 2 • To avoid getting exceptions when you cast you should check an object using instanceof before you cast: CISStudent cis; if (s instanceof CISStudent) { cis = (CISStudent) s; }
Garbage Collection • Java uses garbage collection for memory management (like ML, Scheme). • Programmer does not have to worry about memory leaks or pointers. BigStructure b; //BAD in C, OK in Java for (int i = 0; i < 1000 ; i++) { b = new BigStructure(); }