Download strongly typed

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
Data Types in Java
Java’s Central Casting
CS 102
CS102
Are You Java’s Type?
• Type: a set of values that are
semantically similar
• Java is a strongly typed language
– Every variable and every expression has a
type that is known at compile time.
– Strong typing helps detect errors at
compile time.
CS102
What’s the Role of Types?
• Types limit the:
– Values that a variable can hold or that an
expression can produce
– Limit the operations supported on those
values
– Determine the meaning of the operations.
CS102
Java Types
• Primitive types
– boolean
– numeric
• Integral: byte, short, int, long,
and char
• Floating-point: float and double
• Variables of primitive types hold the
actual value
CS102
Inside a Primitive Type
• Actual values for integral types:
byte:
-128 to 127
short: -32768 to 32767
int: -2147483648 to 2147483647
long: -9223372036854775808 to
9223372036854775807
char: from '\u0000' to '\uffff’
(from 0 to 65535)
• Why use int instead of long?
CS102
Boolean Type
• boolean type represents a logical
quantity with two possible values,
indicated by the literals true and
false
CS102
Building a Boolean from a Number
• Can’t say (why not?):
if (x)
System.out.println(“Congratulations,
it’s a Boole!”);
• Convert an integer x (following the C
language convention that any nonzero
value is true):
if (x != 0)
System.out.println(“Congratulations,
it’s a Boole!”);
CS102
Building a Boolean from an Object
• Object reference obj can be converted
(any reference other than null is true):
obj! = null
CS102
The Other Kind of Type
• Reference types
– Variables of reference types don’t hold
values, but references to values
– Classes, interfaces and arrays are all
reference types
CS102
A Graphical View
int counter
Airport midway
0010010
1110010
The data of the
midway object
CS102
Classes, Interfaces and Arrays, oh my!
• Classes we’ve already seen
• Interfaces are programming contracts
– An interface is a set of constants and
methods
– In Java, a class implements an interface
CS102
Implementing an Interface
• An example from the Comparison
applet:
public class Comparison extends Applet
implements ActionListener
• Comparison promises to do everything
an ActionListener does
CS102
Comparison Does What It Has To
• What does an ActionListener have to do?
actionPerformed
public abstract void
actionPerformed(ActionEvent e)
• Provides an implementation for the
interface:
public void actionPerformed(ActionEvent e) {
number1 = Integer.parseInt(input1.getText() );
number2 = Integer.parseInt(input2.getText() );
repaint();
}
CS102
Array Types
• If T is a primitive type, then a variable of type
"array of T"can hold:
– Null reference
– Reference to any array of type "array of T"
• If T is a reference type, then a variable of type
"array of T" can hold:
– Null reference
– Reference to any array of type "array of S"
such that type S is assignable to type T
CS102
Object is the Root of All Java
• Variable of type Object can hold:
– Null reference
– Reference to any object, whether class
instance or array.
CS102
Class  Type
• Variables have types
• Objects (and arrays) don’t have a type,
but belong to a class
• Usually we’ll consider them the same
CS102
Casting Against Type
• A value could be two different types
– Is 12 an int or a float?
• Compiler isn’t smart, so it’s conservative
(signals an error)
• Override the compiler with a cast
– Cast says: Treat this variable as the type I
say
– To cast in Java, write:
(newType) variable
CS102
Examples of casting
// Casting a float literal to a type int.
// Without the cast operator, this would be a
// compile-time error, because it’s a narrowing
// conversion:
int i = (int)12.5f;
// From class average applet (Figure 2.9)
if ( counter != 0 ) {
average = (double) total / counter;
System.out.println( "Class average is " +
average );
} else ...
CS102
Can’t Always Cast
• Can’t do this:
if ((boolean) x)
System.out.println(“Congratulations,
it’s a Boole!”);
• Sometimes casts are automatic, and
are called conversions
CS102
One of Two Ways
• Create an expression in a context
where the type of the expression is not
appropriate and either:
– Error at compile time (if statement has
any type other than boolean)
– May be able to accept a type that is related
to the type of the expression
CS102
Automatic Conversion
• For convenience, Java performs an
implicit conversion
– From the type of the expression to a type
acceptable for its surrounding context
• Kinds of conversions:
– Identity, Widening primitive, Narrowing
primitive, Widening reference, Narrowing
reference, String
CS102
Coming Attractions
• Arrays: Grouping related values
together
CS102