Java Crash Course A Tutorial Introduction for C++ Programmers.

41
Java Crash Course A Tutorial Introduction for C++ Programmers

Transcript of Java Crash Course A Tutorial Introduction for C++ Programmers.

Page 1: Java Crash Course A Tutorial Introduction for C++ Programmers.

Java Crash CourseA Tutorial Introduction for C++ Programmers

Page 2: Java Crash Course A Tutorial Introduction for C++ Programmers.

So what the heck is Java (besides coffee, that is)?

A programming language. Syntax and constructs are very similar to C++

A virtual platform Java Virtual Machine is a software “machine” or

“hypothetical chip” Since it’s “virtual”, it can be implemented on any hardware Cross-platform distribution achieved via .class binary file

of bytecodes (instead of machine-dependent machine code) Write Once, Run Anywhere

A class library Standard APIs for GUI, data storage, processing, I/O, and

networking.

Page 3: Java Crash Course A Tutorial Introduction for C++ Programmers.

Getting Java Brewing…1. Download the latest Java SDK from http://java.sun.com

The SDK is a command-line based set of tools

2. A Text Editor: our choice is, of course, Emacs! 3. Web-browser that’s java-enabled (optional)4. IDE like BlueJ from http://www.bluej.org or JCreator from

http://www.jcreator.com (optional)5. Some introductory links/guides/tutorials:

http://developer.java.sun.com/developer/onlineTraining/Programming/BasicJava1/compile.html

http://www.horstmann.com/ccc/c_to_java.pdf http://www.csd.uu.se/datalogi/cmtrl/oopj/vt-2000/slides/OOPJ-1-04.pdf

Page 4: Java Crash Course A Tutorial Introduction for C++ Programmers.

Mechanics of Writing Java Programs Create a Java source file. Must have the .java extension and

contain only one public class. Compile the source file into a bytecode file. The Java

compiler, javac, takes your source file and translates its text into instructions that the Java Virtual Machine (Java VM) can understand.

The compiler puts these instructions into a .class bytecode file. Run the program contained in the bytecode file. The

Java VM is implemented by a Java interpreter, java. This interpreter takes your bytecode file and carries out the instructions by translating

them into instructions that your computer can understand.

Page 5: Java Crash Course A Tutorial Introduction for C++ Programmers.

Putting it all together

public class Hello { public static void main(String args[]) { System.out.println(“Hello, world!”); }}

1. Put in: Hello.java

2. Compile with: javac Hello.java Creates Hello.class

3. Run with: java Hello

Page 6: Java Crash Course A Tutorial Introduction for C++ Programmers.

Applications vs. Applets A Java application:

Is a standalone program Is interpreted by the Java Virtual Machine and run using the java

command Contains a main() method.

A Java applet: Runs within a Java-enabled Web browser extends the Applet or JApplet class (Inheritance) Contains an init() or a paint() method (or both).

To create an applet, you'll perform the same basic steps:

1. Create a Java source file (NameOfProgram.java) and an HTML file (NameOfHTMLFile.html)

2. Compile the source file (NameOfProgram.class)

3. Run the program (either using java NameOfProgram (application) or appletviewer NameOfHTMLFile.html (applet))

Page 7: Java Crash Course A Tutorial Introduction for C++ Programmers.

Java notes for C++ programmers Everything’s an object

Every object inherits from java.lang.Object No code outside of the class definition!

No global variables (use static variables instead) Single inheritance only

Instead, implement interfaces All classes are defined in .java files

One top level public class per file The file has to have the same name as the public class!

Syntax is similar (control structures are very similar). Primitive data types are similar But a bool is not an int To print to stdout, use System.out.println()

Page 8: Java Crash Course A Tutorial Introduction for C++ Programmers.

Requisite First Program (Application Version)

Put in HelloWorld.java:

public class HelloWorld {

public static void main(String args[]) {

System.out.println("Hello World");

}

}

Page 9: Java Crash Course A Tutorial Introduction for C++ Programmers.

Compiling and Running

HelloWorld.java javac HelloWorld.java

java HelloWorld

HelloWorld.class

compile

run

bytecode

source code

Page 10: Java Crash Course A Tutorial Introduction for C++ Programmers.

So what’s going on? The Java bytecode and interpreter at work!

Bytecode is an intermediate representation of the program (the class file) Think of it as the machine-code for the Java Virtual

Machine

The Java interpreter (java) starts up a new “Virtual Machine”

The VM starts executing the user’s class by running its main() method

Page 11: Java Crash Course A Tutorial Introduction for C++ Programmers.

Put in HelloWorld.java:import java.awt.Graphics;public class HelloWorld extends java.applet.Applet { public void paint(Graphics g) { g.drawString("Hello World“, 35, 15); }}

Put in test.html:<html><title>Test the applet</title><body><h3>Test the applet</h3><applet code=“HelloWorld.class” height=“200”

width=“300”></applet></body></html>

Requisite First Program (Applet Version)

Page 12: Java Crash Course A Tutorial Introduction for C++ Programmers.

Cool Applet Methods Basic methods on Applet

init(): called once for your applet start(): called every time you enter the page stop(): called every time you leave the page destroy(): called when your page is discarded

Funky methods on Applet AudioClip getAudioClip(URL url): gets audioClip object (play

with audioClip.play()) Image getImage(URL url): starts asynchronous image loading java.net.URL constructor takes normal string argument (used to

store URLs) void showDocument(URL url): tells browser to load new

document void showStatus(String msg): writes to browser status line

Applet repainting paint(): defaults to nothing update(): clears screen, calls paint() repaint(): passes events to Motif/Win32 don’t override/change this

Page 13: Java Crash Course A Tutorial Introduction for C++ Programmers.

Java Language Basics Data types same as in C++ (except bool)

bool,char,byte,short,int,long,float, double,string, etc.

Operators (same as C++) Assignment: =, +=, -=, *=, … Numeric: +, -, *, /, %, ++, --, … Relational: ==. !=, <, >, <=, >=, … Boolean: &&, ||, ! Bitwise: &, |, ^, ~, <<, >>, …

Control Structures more of what you expect:1. conditional: if, if else, switch

2. loop: while, for, do

3.break and continue

not an int!

Page 14: Java Crash Course A Tutorial Introduction for C++ Programmers.

Classes, References, & Packages Classes and Objects

“All Java statements appear within methods, and all methods are defined within classes”.

Java classes are very similar to C++ classes (same concepts). Instead of a “standard library”, Java provides a lot of Class

implementations or packages What are packages?

You can organize a bunch of classes and interfaces into a package (or library of classes) defines a namespace that contains all the classes.

Use the import keyword to include the packages you need import java.applet.*;

You need to use some java packages in your programs java.awt (Abstract Windowing Toolkit), java.io (for Files, etc.), java.util

(for Vectors, etc.) References

No pointers everything’s a reference! classes arrays

Page 15: Java Crash Course A Tutorial Introduction for C++ Programmers.

Type Conversions (Skip) conversion between integer types and

floating point types. this includes char

No automatic conversion from or to the type boolean!

You can force conversions with a cast – same syntax as C/C++.

int i = (int) 1.345;

Page 16: Java Crash Course A Tutorial Introduction for C++ Programmers.

Exceptions When a program carries out an illegal action, an

exception is generated. Terminology:

throw an exception: signal (in the method header) that some condition or error has occurred but we want to pass the buck and not deal with it.

catch an exception: deal with the error (or whatever) ourselves inside the function/method.

Catch it using a try/catch block (next slide).

In Java, exception handling is necessary (forced by the compiler compilation errors!) Except for RunTimeExceptions

Page 17: Java Crash Course A Tutorial Introduction for C++ Programmers.

Try/Catch/Finallytry {// code that can throw an exception

} catch (ExceptionType1 e1) { // code to handle the exception} catch (ExceptionType2 e2) { // code to handle the exception} catch (Exception e) { // code to handle other exceptions} finally { // code to run after try or any catch}

This block is always run

Page 18: Java Crash Course A Tutorial Introduction for C++ Programmers.

Exception Handling

Exceptions take care of handling errors instead of returning an error, some method calls will

throw an exception. Can be dealt with at any point in the method

invocation stack. But if no method in the hierarchy handles it, results

in an unchecked exception which generates a compiler error (unless it’s a RunTimeException)

Forces the programmer to be aware of what errors can occur and to deal with them.

Page 19: Java Crash Course A Tutorial Introduction for C++ Programmers.

Defining a Class One top level public class per .java file.

Typically end up with many .java files for a single program with at least one containing a static public main() method (if they’re applications).

Class name must match the file name! The compiler/interpreter use class names to figure out

what the file name is. Classes have these three features:

A constructor that’s used to allocate memory for the object, initiailize its elements, and return a reference to the object

Methods (function members) Fields (data members)

Page 20: Java Crash Course A Tutorial Introduction for C++ Programmers.

A Sample Class

public class Point {public Point(double x, double y) {

this.x = x; this.y=y;}public double distanceFromOrigin(){

return Math.sqrt(x*x+y*y);}private double x,y;

}

Page 21: Java Crash Course A Tutorial Introduction for C++ Programmers.

Objects and new You can declare a variable that can hold an object:

Point p;

But this doesn’t create the object! You have to use new:

Point p = new Point(3.1,2.4);

new allocates memory and the garbage collector reclaims unused memory

Page 22: Java Crash Course A Tutorial Introduction for C++ Programmers.

Using Java objects Just like C++:

object.method() or object.field

BUT, never like this (no pointers!) object->method() or object->field

Event driven model: Objects “register” to receive (and respond to) certain

messages like button presses, mouse clicks, etc. (e.g., mouseUp(), mouseDown(), keyUp(), keyDown())

Page 23: Java Crash Course A Tutorial Introduction for C++ Programmers.

Strings are special You can initialize Strings like this:

String blah = "I am a literal ";

Or this ( + String operator):

String foo = "I love " + “CET375"; Or this ( new operator):

String foo = new String(“Yummy FooBars!”);

Page 24: Java Crash Course A Tutorial Introduction for C++ Programmers.

Arrays

Arrays are supported as a second kind of reference type (objects are the other reference type).

Although the way the language supports arrays is different than with C++, much of the syntax is compatible. however, creating an array requires new

Index starts at 0. Arrays can’t shrink or grow.

e.g., use Vector instead. Each element is initialized. Array bounds checking (no overflow!)

ArrayIndexOutOfBoundsException Arrays have a .length

Page 25: Java Crash Course A Tutorial Introduction for C++ Programmers.

Array Examplesint x[] = new int[1000];

byte[] buff = new byte[256];

float[][] mvals = new float[10][10];

int[] values;

int total=0;

for (int i=0;i<value.length;i++) {

total += values[i];

}

Page 26: Java Crash Course A Tutorial Introduction for C++ Programmers.

Array Literals

You can use array literals like C/C++ (no need for new keyword):

int[] foo = {1,2,3,4,5};

String[] names = {“Joe”, “Sam”};

Page 27: Java Crash Course A Tutorial Introduction for C++ Programmers.

Reference Types

Objects and Arrays are reference types Primitive types are stored as values Reference type variables are stored as references

(pointers that we can’t mess with)

Page 28: Java Crash Course A Tutorial Introduction for C++ Programmers.

Primitive vs. Reference Types

int x=3;

int y=x;

Point p = new Point(2.3,4.2);

Point t = p;

There are two copies of the value 3 in memory

There is only one Point object in memory!

Page 29: Java Crash Course A Tutorial Introduction for C++ Programmers.

Passing arguments to methods

Primitive types: the method gets a copy of the value. Changes won’t show up in the caller Pass by value

Reference types: the method gets a copy of the reference, the method accesses the same object Pass by reference

There is no pass by pointers!

Page 30: Java Crash Course A Tutorial Introduction for C++ Programmers.

Comparing Reference Types

Comparison using == means: “Are the references the same?”

Do they refer to the same object? Sometimes you just want to know if two

objects/arrays are identical copies. Use the .equals() method

You need to write this for your own classes! All objects and arrays are references!

Page 31: Java Crash Course A Tutorial Introduction for C++ Programmers.

Inheritance

Use the extends keyword to inherit from a super (or parent) class

No multiple inheritance Use implements to implement multiple interfaces

(abstract, virtual classes) Use import instead of #include (not exactly

the same but pretty close) to include packages (libraries)

Page 32: Java Crash Course A Tutorial Introduction for C++ Programmers.

Using Documentation Comments Documentation comments are delimited by /**

and */ javadoc automatically generates documentation

Copies the first sentence of each documentation comment to a summary table Write the first sentence with some care!

For each method/class, supply: @param followed by the parameter name and a short

explanation @return followed by a description of the return

value @author for author info, etc.

Need to use “javadoc –author” for this…

Page 33: Java Crash Course A Tutorial Introduction for C++ Programmers.

javadoc The Java Standard calls for every class, every

method, every parameter, and every return value to have a comment

Write the method comments first! If you can’t explain what a class or method does,

you aren’t ready to implement it! How to create HTML documentation:

Type: javadoc *.java in the directory containing your source code

This produces one HTML file for each class and an index.html file

Documenation is together with code!

Must come immediately before the class, method, etc.

Page 34: Java Crash Course A Tutorial Introduction for C++ Programmers.

import java.applet.Applet;import java.awt.*;import java.awt.event.*;

public class ClickMe extends Applet implements ActionListener {

private TextField text1;private Button button1;

public void init() {text1 = new TextField(20);add(text1);button1 = new Button (“Click me please!”);add(button1);button1.addActionListener(this);

}

public void actionPerformed(ActionEvent e) {String msg = new String (“Hello, world!”);if (e.getSource() == button1) {

text1.setText(msg);}

}}

Add GUI elements in init()

Add components to the current frame (AWT)

Register a class (this one) to listen for button events

A Gooey GUI! What does an applet with multiple buttons and a text field look like? We’ll develop this in more detail in lab but let’s just see it (in all its gory detail) here in ClickMe.java:

Page 35: Java Crash Course A Tutorial Introduction for C++ Programmers.

It don’t mean a thing… Adding Swing to GUI applets/applications is easy:

Add import javax.swing.*; or import java.awt.swing.*;

Use JApplet instead of Applet, JButton instead of Button, JTextField instead of TextField, etc. These are from the JFC (hence, all the “J” prefixes)

In addition, you need to add components to the correct ContentPane by doing the following in the init() fxn:1. Use JPanel contentPane; to declare it and

contentPane = new JPanel(); to initialize a new contentPane Could also have used Container contentPane =

getContentPane() if our class extends JFrame

2. add everything to that contentPane using a statement like contentPane.add(button1);

3. Finally, do a setContentPane(contentPane); (all in the init() function) to make this the active contentPane

Page 36: Java Crash Course A Tutorial Introduction for C++ Programmers.

GridBagLayout Instead of the default FlowLayout (left-to-right), use

the GridLayout or GridBagLayout to add buttons and other GUI elements along the grid

To call GridLayout, just use: setLayout(new GridLayout(9,3)); for AWT

or contentPane.setLayout(new GridLayout(9,3)); for Swing

GridLayout’s first argument is the number of rows (0 for unlimited) and the second argument is the number of columns

Page 37: Java Crash Course A Tutorial Introduction for C++ Programmers.

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class ButtonsArray extends JApplet implements ActionListener {

private JTextField text[] = new JTextField[3];

private JButton button[] = new JButton[3];

private JPanel contentPane = new JPanel();

public void init() {

contentPane.setLayout(new GridLayout(3,2));

for (int i=0; i<3; i++) {

text[i] = new JTextField(20);

contentPane.add(text[i]);

button[i] = new JButton(String.valueOf(i));

contentPane.add(button[i]);

button[i].addActionListener(this);

}

setContentPane(contentPane);

}

public void actionPerformed(ActionEvent e) {

for (int i=0; i<3; i++) {

if (e.getSource() == button[i]) {

text[i].setText("Clicked Button #" + i);

}

}

}

}

An example of a Swing-based GridLayout applet:

Page 38: Java Crash Course A Tutorial Introduction for C++ Programmers.

Concurrent Multi-threaded Programming Java is multithreaded!

Threads are easy to use. Two ways to create new threads:

Extend java.lang.Thread Override “run()” method.

Implement Runnable interface Include a “run()” method in your class.

Usually, you’ll implement the Runnable interface How to implement the Runnable interface:

Add a public void start() function: This is where you’ll initialize the thread and start() it

Add a public void stop() function: This is where you’ll set the boolean stopFlag to true

Add a public void run() function: This is where you’ll call repaint() to paint each new frame and

handle any synchronized variables or methods

Page 39: Java Crash Course A Tutorial Introduction for C++ Programmers.

The synchronized Statement Instead of mutex (a binary semaphore), use synchronized:

synchronized ( object ) { // critical code here} Also, declare a method as synchronized:synchronized int blah(String x) { // blah blah blah} Can also use wait() and notify() to put

threads on hold and wake them up again (e.g., to implement a pause or suspend feature) Must be called within a synchronized block

Page 40: Java Crash Course A Tutorial Introduction for C++ Programmers.

Double-buffering Composing an image off-screen to avoid flickering

Not needed with Swing objects (already double-buffered!) Create an offscreen graphics image and context:

Image offscreen;Graphics offgraphics;Dimension offdim;

Set them in init() method:offdim = getSize(); // Get size of applet first:

offscreen = createImage(offdim.width,offdim.height); // Create offscreen image of same size:

offgraphics = offscreen.getGraphics(); // Setup offscreen graphics context

Add an update() method that simply calls paint(): Overriding update() prevents the OS from wiping off the applet’s previous

drawings and, instead, immediately repaints (since wiping off causes flickering, too). Called automatically when repaint() is called.

Do all drawing to offscreen graphics context in the paint() method: Erase the previous image (with a big blank rectangle) Do all new drawing to the offscreen graphics context Finally, draw the offscreen image to the screen like a normal image:gr.drawImage(offscreen,0,0,this); //offscreen is width of screen, so start at 0,0

Page 41: Java Crash Course A Tutorial Introduction for C++ Programmers.

Some Random Links

http://java.sun.com/docs/books/tutorial/uiswing/components/components.html

http://java.sun.com/docs/books/tutorial/uiswing/components/toplevel.html

http://java.sun.com/docs/books/tutorial/uiswing/components/layeredpane.html