Title: Transition from C to Java
1Transition from C to Java
- Walt Savitch
- University of California, San Diego
- wsavitch_at_ucsd.edu
2Java even a simple program is not simple.
- public class Program1
-
- public static void main(String arg)
-
- System.out.println("Hello World")
-
-
3Some Similarities betweenC and Java
- Simple (primitive) types int, double, char
- Control Structures if-else, switch, while, for
- Arithmetic expressions
- Both have a string type
C string, Java String. - Arrays
- Both have classes.
- Both have a "main".
4Some Differences betweenC and Java
- Java has automatic garbage collection. C does
not. - C has operator overloading. Java
does not. - C says "function".
Java says "method". - These require no explanation, unless students
already know C.
5More Differences
- C classes can be avoided. Java classes cannot
reasonably be avoided. - C has built in console I/O. Java has no
standard console input (but does have standard
console output.) - C and Java divide a program into pieces (for
separate compilation) in different ways. - These require some explanation.
6C classes can be avoided.Java classes cannot
reasonably be avoided.
7Every compilation unit in Java is a class. A
program is a class with a method named
mainpublic class Program1 public static
void main(String arg)
8In Java, every method is a member of some
class.You cannot have a freestanding (global)
function in Java.
9You can fake a "no classes" program in Java by
making all methods static.
10A Sample Java Class
11public class PetRecord private String name
private int age//in years public
PetRecord(String initName,
int initAge) name initName if
((initAge lt 0)) System.out.println("Error"
) else age initAge
12 public void writeOutput()
System.out.println("Name "
name) System.out.println("Age "
age " years")
13C has built in console I/O.Java has no
standard console input(but Java does have
standard console output.)
14C has cin, cout, cerrJava has
System.out.print and System.out.printlnbut
NO console input.Solutions?
15Solutions
- AP does not require console input.
- There are classes for console input that are not
part of Java but written in Javae.g.,
SavitchIn.readInt() - JOptionPane, simple GUI I/O
16C and Java divide a program into pieces (for
separate compilation) in different ways.
17C Traditionally has an interface (header)
file, implementation file(s), application
(driver) file.C Can confine a program to a
single file if you want.
18- Java A compilation unit is always a class
definition. - Every class is in a separate file (except for
some special cases). - No header files.
- Normally, you have no one file programs in Java.
19More Subtle Differences
- C has pointer types.
- Java has no pointer types .
- Assignment () and equality comparison () have
minor differences. - C gives a choice of parameter types.
- Java No choice of parameter types.
- Exception handling can be avoided in C
- Exception handling is needed for some fundamental
things in Java, e.g. file I/O.
20Java has no pointer types
- But Java does have "pointers".
- In Java class (and array) types are REFERENCE
TYPES. - A reference is a "pointer". All class values in
Java are handled as references, but it is all
automatic. - In Java primitive types are just like in C.
21- In Java a primitive type variable holds values,
just as in C. int n 42 - Java a class type variable contains a reference
("pointer") to the object (value). - However, this is all automatic. There are no
pointer types as such in Java. - PetRecord myDog new PetRecord("Fido", 3)
- Note that all class objects are created
dynamically.
22Assignment () and equality comparison () have
minor differences.
- On primitive (simple) types, and are the
same in C and Java. - In Java, and on classes (or arrays) are
comparing references ("pointers"), - and you cannot overload (redefine) and in
Java.
23Assignment () and equality comparison () have
minor differences.
- If (n 0) .
- In C this is probably an error with no error
message, assuming you meant to use . - In Java this generates a compiler error.
- In Java ints neither are nor can they be type
cast to Booleans
24C a choice of parameter types.Java no choice
of parameter types.
- C Call-by-value
- void f(int n)
- C Call-by-reference
- void f(int n)
- Other C variants
- void f(const int n)
- void f(const int n)
25C a choice of parameter types.Java no choice
of parameter types.
- Java all parameters are call-by-value.
- But, it is almost like there are different
parameter types for primitive types and classes.
26Java no choice of parameter types,but
- All primitive type
- parameters are automatically call-by-value.
- public void f(int n)
- ...
- All class types are automatically something very
much like call-by-reference. - public void f(String n)
- ...
27C a choice of parameter types.Java no choice
of parameter types.
- Java Full Story
- In Java primitive types are just like in C.
- In Java class (and array) types are REFERENCE
TYPES. - A reference is a "pointer". All class values in
Java are handled as references, but it is all
automatic. - All parameters are call-by-value of a reference.
28C a choice of parameter types.Java no choice
of parameter types.
- Java Full Story
- In Java all parameters are call-by-value.
- Parameter is a local variable initialized to the
value of the argument. - Primitive types no surprises.
- Class type (local) variables hold references.
- Class parameters are call-by-value of a reference.
29Java no choice of parameter types.
- public void change(PetRecord r)
-
- r.name "FooFoo"
-
- This really changes its PetRecord argument.
- public void change(int n)
-
- n 42
-
- This does not change its int argument.
30Java no choice of parameter types.
- public void change(int n)
-
- n 42
-
- This does not change its int argument.
- There is no way to write a Java method that has a
parameter for an int variable and that changes
the value of an argument variable.
31There is no way to write a Java method that has a
parameter for an int variable and that changes
the value of an argument variable.So, how do you
manage to cope?
- int n computeNewValue()
- OR use class objects.
32- public class Stuff
-
- private int n
- ....
- public void changeTheN(Stuff s)
-
- s.n 42
-
-
33Exception handling can be avoided in
CException handling is needed for some
fundamental things in Java, e.g. file I/O.
- Solutions
- AP requirements do not include file I/O.
- Teach exception handling.
- Fake it with "magic formulas"
34AP Exception Requirements
- Covers exceptions as error messages.
- Does not cover try/throw/catch.
- Does not cover throws clause (declaring
exceptions).
35Exception handling in Java
- Fake it with "magic formulas" approach
- public class TextFileOutputDemo
-
- public static void main(String arg)
- throws IOException
-
- PrintWriter outputStream
- new PrintWriter())
- outputStream.println("To file")
36- public class TextFileOutputDemo
- //without magic formula
- public static void main(String arg)
-
- PrintWriter outputStream null try
-
- outputStream new PrintWriter(
- new FileOutputStream("out.txt"))
-
- catch(FileNotFoundException e)
-
- outputStream.println("To file")
-
37Style Comparison C/Java
- Java uses loooong names
- e.g. FileNotFoundException
- while C uses some abbreviations
- Java spelling conventions
- ClassName, variableName, methodName,LITERAL_NAME
- Java has an official commenting style
- javadoc
38javadoc
- Extracts an interface from a class definition.
- May not need full blown details for AP course,
but be consistent with javadoc. - Comments before method headings/
- javadoc comment style.
- /
39Getting a Java CourseOff-the-Ground
- Need some "magic formulas," but
- Move to real classes quickly.
- Do something about console inputadd console
input classuse JOptionPaneuse magic formulas
40"Magic Formulas"
- public class ProgramName
-
- public static void main(String arg)
-
- means "begin".
- Use this to explain simple flow of control
then quickly move to classes and explain what
this means.
41Console Input
- You need to do something.
- Use SavitchIn or some other console input class
or - Use a very messy magic formula or
- Explain the formula (still messy) or
- Use JOptionPane.
42GUIs (Graphical User Interfaces, i.e., Windowing
Interfaces)
43GUIs
- Not part of the AP requirements.
- Applets Designed to be used over the internet.
Can be used for ordinary programs, but have some
problems and no easier than regular windowing
systems. - "Regular Windowing Systems"
- Swing Library is the latest version.
44Java Software
- Java is well standardized. SDK (aka JDK) Java
compiler is free. - java.sun.com
- Works well with Windows and Unix
- Want Java 2, version 1.4 or higher
- (Standard Edition is enough)
- Mac users have traditionally had limited choices,
but things are better now. - JJ works with all operating systems.
45Java Software for Mac
- Good (free?) Java compiler for Mac OS X (Im
told) - http//developer.apple.com/java/
- Some of the good IDEs for Mac Code Warrior,
BlueJ. - JJ Works for any operating system.
46IDEs
- Windows
- TextPad (shareware) www.textpad.com
- use with Sun SDK
- Forte (free) java.sun.com
- Borland www.borland.com
- Mac
- BlueJ (free) www.bluej.org
- CodeWarrior www.metrowerks.com
- JJ Works with all operating systems.
- www. .LearnJavaNow.org/
47Text Books
- Lots to choose from.
- For example,
- Walter Savitch Java An Introduction to Computer
Science and Programming, - Prentice-Hall.