Transition From C++ To Java: Walt Savitch University of California, San Diego Wsavitch@ucsd - Edu
Transition From C++ To Java: Walt Savitch University of California, San Diego Wsavitch@ucsd - Edu
Walt Savitch
University of California,
San Diego
[email protected]
Java: even a simple program is
.not simple
public class Program1
{
public static void main(String[] arg)
{
System.out.println("Hello World");
}
}
Some Similarities between
C++ 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".
Some Differences between
C++ 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++.
More Differences
!But don’t do it
A Sample Java Class
public class PetRecord
{
private String name;
private int age;//in years
{
C++ has built in console I/O.
Java has:
System.out.print and
System.out.println
but NO console input.
Solutions?
:Solutions
• AP does not require console
input.
• There are classes for console
input that are not part of Java
but written in Java:
e.g., SavitchIn.readInt()
• JOptionPane, simple GUI I/O
C++ and Java divide a
program into pieces (for
separate compilation) in
.different ways
C++: Traditionally has an
interface (header) file,
implementation file(s),
application (driver) file.
• 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
C++: 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);
C++: 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.
Java: 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)
{...}
C++: 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.
C++: 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.
Java: 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 in’t argument.
.Java: 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.
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.
?So, how do you manage to cope
• int n = computeNewValue();
• OR use class objects.
public class Stuff
{
private int n;
....
public void changeTheN(Stuff s)
{
s.n = 42;
}
}
Exception handling can be avoided in
C++
Exception 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"
AP Exception Requirements
• Covers exceptions as error
messages.
• Does not cover try/throw/catch.
• Does not cover throws clause
(declaring exceptions).
Exception 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");
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");
Style 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
javadoc
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.
*/
Getting a Java Course
Off-the-Ground
Need some "magic formulas," but
Move to real classes quickly.
Do something about console input:
add console input class
use JOptionPane
use magic formulas
"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.
Console Input