Parts of a program that produces a value.
Simple value expressions just produce a value.
Assignable expressions are expressions that can be assigned a value. When used for a value, their value is whatever value was last assigned.
Literal | Directly specified value |
Operator | Value computed from operands |
Method call | Value returned by method |
Constructor call | New object |
Array creation | New array |
int: 1
, 1_000_000
, -42
double: 1.5
, 0.00001
, 1e6
boolean: true
, false
String: "foo"
, "hello, world!"
null
Low-level features of the language that operate on numbers, booleans, and references as references. We'll go through the ones we know about later in these slides.
Calling a method with a non-void
return type is an expression whose value is the value returned by the method.
s.indexOf("abc")
Math.random()
s.length()
Calling a constructor (with the new
keyword) is an expression whose value is a reference to the newly created object.
new Point(0, 0)
There are two ways to create arrays with the new
keyword, by specifying the dimensions of the array or by providing the initial values.
new int[10]
new int[] { 1, 2, 3 }
Only in the context of a variable declaration we can write:
int[] nums = { 1, 2, 3 };
rather than:
int[] nums = new int[] { 1, 2, 3 }
This is just a bit of syntactic sugar.
int x = y * 10; |
Right side of an assignment. |
y * 10 + 100 |
As an operand. |
foo(y * 10) |
Method argument. |
new Bar(y * 10) |
Constructor argument. |
return y * 10; |
As a value to be returned. |
xs[y * 10] |
Array and index in array access expression. |
Assignable expressions are expressions that can appear on the lefthand side of an assignment operator because they represent a place where a value can be stored: various kinds of variables and the individual elements of arrays.
When they appear in a position where a value expression can occur, their value is the value they were most recently assigned.
x = 10 |
Assigning to a variable. |
x += 10 |
Compound assignment. |
obj.x = 10 |
Assigning to an instance variable. |
Foo.x = 10 |
Assigning to a class (static) variable. |
xs[0] = 10 |
Assigning to an array element. |
xs[0]++ |
Incrementing an array element. |
Local variables are declared within a method or constructor. They do not have access modifiers like public
or private
because they are not accessible at all outside the method or constructor where they are declared.
x |
Accessing a variable |
x = 10 |
Assigning a value to a variable |
x.foo |
Instance variable access |
x.foo = 42 |
Assigning to an instance variable |
Math.PI |
Class (static) variable access |
MyClass.something++ |
Incrementing a class (static) variable |
public class Robot {
// Class variable
private static int nextSN = 0;
// Instance variables
private String name;
private int serialNumber;
public Robot(String name) { // Parameter is local variable
// Asssign value of local variable to instance variable
this.name = name;
// Assign value of static variable to instance variable.
serialNumber = nextSN++; // and update static var
}
}
nums[0] |
Access the first element of array |
nums[0] = 100 |
Assigning to the first element of array |
nums[nums.length - 1] |
Access the last element of array |
Parenthesized expressions are mostly used in for-value expressions to control the order of operations but they are technically assignable if the inner expression is.
(a + b) * c |
Control the order of operation |
(array1)[0]++ |
Increment the first element of array1 . |
The value of (a + b)
is the same as a + b
. The parentheses just cause it to be evaluated first.
Arithmetic | Operands numbers; result number |
String | Operands String and anything; result String |
Logical | Operands booleans; result boolean |
Comparison | Operands numbers; result boolean |
Equality | Operands anything; result boolean |
Assignment | Assign values to variables and array elements |
Cast | Convert between ints and doubles |
Ternary | Bonus operator. Not in AP curriculum. |
+ |
addition |
- |
subtraction |
* |
multiplication |
/ |
division |
% |
remainder |
+ |
concatenation |
&& |
logical and |
|| |
logical or |
! |
logical not |
< |
less than |
> |
greater than |
<= |
less than or equal |
>= |
greater than or equal |
== |
equal |
!= |
not equal |
Remember that for reference types (e.g. String
and arrays) ==
just checks whether the two values are references to the same object that lives in the same place in memory; it doesn't do any deeper comparison.
Classes such as String
often implement an equals
method that does an appropriate comparison that allows two different objects to be consideder the same if they have the same contents.
= |
simple assignment |
+= |
add to variable |
-= |
subtract from variable |
*= |
multiply variable by |
/= |
divide variable by |
%= |
set variable to remainder by |
++ |
increment |
-- |
decrement |
(int) |
cast to int |
(double) |
cast to double |
A bonus operator. Like an if
statement but can be used in expressions:
Color c = row % 2 == 0 ? RED : WHITE
First sub-expression must evaluate to a boolean. Then evaluates either the expression after the ?
or the expression after the :
, depending on whether the boolean expression is true
or false
.
Parts of a program that do things, mostly controlling the flow of the program.
return
if
, if
/else
for
(normal and enhanced)
while
Some (but not all) expressions can be used as a statements.
x = 10; |
Assignment |
x++; |
Increment |
x--; |
Decrement |
someMethod(); |
Method call |
Note the semicolon at the end of each statement.
Parts of a program that create named elements.
They are neither expressions nor statements as they neither produce a value nor cause any computation to happen.
Classes. Withn classes are:
Instance and class variables
Instance and class methods
Constructors
Within methods and constructors:
Method and constructor parameters
Local variables