Basic Java Features¶
Written by PChan on 2017-04-12
- Data Types
Java is a statically typed language. This means that not only does each variable have to be declared with a type, it may only store values of that type. The type may fall under one of two categories: primitives and objects.
Primitives are predefined by Java with the usage of reserved keywords. There are 8 in total:
|byte||8 bits||[-2^7, (2^7) - 1]|
|short||16 bits||[-2^15, (2^15) - 1]|
|int||32 bits||[-2^31, (2^31) - 1]|
|long||64 bits||[-2^63, (2^63) - 1]|
|Floating Point||Memory Space|
|Other||Memory Space||Possible Values|
|char||16 bits||single Unicode character|
By the standard Java naming convention, primitives are composed only of lowercase letters.
Everything that is not a primitive is an object which is composed of what it can do (action) and what it knows (data). For now, just know that names of Objects in Java are camel-cased. Therefore, the first letter of each word is capitalized and spaces between words are eliminated.
- donut –> Donut
- little sister –> LittleSister
Notice how we do not insert underscores, hypens, or spaces in between each word. Spaces are completely forbidden in names of Objects and identifers in general.
In computer science, identifiers refer to any user-defined word. This may include variable names, function names, and etc. The rules of Java identifiers are simple:
- Must NOT be a Java reserved keyword
- The first letter of an identifier may be a underscore (
_) or an alphabetic character
- The rest of the identifier must be alphanumeric characters
Here are some examples:
|Valid Identifiers||Invalid Identifiers|
There are no spaces in Java identifiers and they are case-sensitive.
For is valid while
We will start with the most basic type of operators: arithmetic operators. The four basic operators should look familiar to you, but the modulus operator might be new to you:
|+||Add or concatenate the two operands|
|-||Subtract the second value from the first value|
|*||Multiply the two operands|
|/||Divide the first value by the second value|
|%||Remainder of left-hand operand divided by right-hand operator (Modulus operator)|
Java does not have a exponent operator; you need to make a function call instead.
Next, we will take a look at relational operators. These operators are used to make a comparison and return a boolean value:
|==||Check if two values are equal (
|!=||Check if two values are not equal|
|>=||Check if the first value is greater than or equal to the second value|
|<=||Check if the first value is less than or equal to the second value|
|>||Check if the first value is strictly greater than the second value|
|<||Check if the first value is strictly less than the second value|
These operators would only work with primitives and may give the wrong answers for Objects.
Due to the way how floating-point values are stored, you might not always get the correct answer if you used the relational operators incorrectly due to round-off errors. Instead, you should test to see if they are close enough in precision to be considered equal:
where \(\epsilon\) is a very small number.
The next type of operators we would look at is: logical operators. These are used to chain boolean expression together.
|&&||Logical AND operator, return true if both operands are true||A && B|
|||||Logical OR operator, return true if at least one operand is true||A || B|
|!||Logical NOT operator, return true if operand is false||!(A)|
|^||Logical XOR operator, return true only if one operand is true||A ^ B|
The pipe (
|) character can be accessed with
Java uses short-circuit evaluation for logical operators. This means that it would try to do as little work as possible:
If the first operand of
&&is false, then it would skip the evaluation of the second operand as the value of the second operand would not affect the result of the expression (false)
If the first operand of
||is true, then it would skip the evaluation of the second operand as the value of the second operand would not affect the result of the expression (true)
The last type of operators we would look at is: assignment operator. It is used to bind a value to a variable.
|=||Bind the right hand value to the left hand variable|
There are a few others which we will cover later...
It is important to know the precedence of Java operators. In the table below, the smaller the level, the higher the precedence:
|!||1||Right to left|
|2||Left to right|
|3||Left to right|
|4||Left to right|
|5||Left to right|
|^||6||Left to right|
|&&||7||Left to right|
|||||8||Left to right|
To change the order of precedence and/or make your code more readable, wrap your expressions around parentheses which has a higher precedence than everything else.