450 likes | 533 Views
Finally! …a taste of Java!. History 1991 - James Gosling, Sun Microsystems, Inc. originally a language for programming home appliances later (1994) used for World Wide Web applications (since byte code can be downloaded and run without compiling it)
E N D
Finally! …a taste of Java! • History • 1991 - James Gosling, Sun Microsystems, Inc. • originally a language for programming home appliances • later (1994) used for World Wide Web applications (since byte code can be downloaded and run without compiling it) • Eventually used as a general-purpose programming language (for the same reason as above plus it is object-oriented)
Three Elements of Java • The Java Runtime Environment (JRE) • Needed to run Java programs • Most internet browsers now include the JRE. • If you are going to use Java programs (as opposed to creating them), this is all you need. • The Java programming language • The language used to create programs. • The Java Application Programmer’s Interface (API) • A (large) collection of pre-written programs in the software development kit (SDK) that can be used by your Java programs. • The “interface” describes how to connect your programs with the ones in the SDK.
Translation of Java to machine code • A two step process • Step 1: Compile source code to Java “byte code”. • “Byte code” is a standard intermediate-level language. • Input: Java code in one or more files ending in .java • Output: Byte code in one or more files ending in .class • Step 2: Interpret Java byte code on a particular machine • The interpreter converts each byte code statement to the specific type of machine code and then runs that machine code.
Why 2 steps? • Byte code is standard, so you can compile Java programs on any machine, and run them on any other machine that has a Java interpreter. • This means that .class files can be downloaded from the Internet and run locally. • Only the original program developer needs a compiler and the software development kit. • Avoids having to re-compile the program for every combination of hardware and operating system. • The Java interpreter is called a “Virtual Machine” and is part of the Java Runtime Environment. • Java virtual machines are specific to one type of computer and operating system. • Most internet browsers now include a Java virtual machine.
Compile Java Source Code (.java) Java Byte Code (.class) Java Compiler Download (optional) .class .class Run Java Virtual Machine A Java Virtual Machine B (Machine Code A) (Machine Code B)
Our First Java Program • Let’s write a Java program to print Hello, world! on the screen
Our First Java Program • Code to begin and end your program: • (to be explained later) public class Hello { public static void main( String[ ] args ) { System.out.println( "Hello, world!" ); } }
Java Program Structure • All Java code must be part of a “class”, and a Java program is structured as a set of classes. • Every class has a name: public class Hello { } • Braces { and } are used to mark the start and end of the class. • Other class information may also appear with the name: • A “public” class is one that can be referred to by other classes.
Comments • Programmers use comments in their code to provide information to the reader on what the code is doing. • When a program is compiled, the compiler skips all comments. • It is common (and good) practice to use a comment at the top of the code containing general information about the file (known as a header).
Code Comments • Single line comment • Everything from // to the end of the line is the comment some code// This is a comment more code • General comment • Everything from /* to the next occurrence of */ is a comment • Can be part of a line code /* comment */ more code • Can be several lines code /* start of comment more comment end of comment */more code
Sample Program Header /** * Hello.java * Author Brigitte Helen Boudreau * Student ID 123456 * This program is a simple program that displays * Hello, world!* * Modifications * 08/09/2003 BHB first created * 25/08/2004 AWW modified slightly */
Components of Classes • Inside a class, there can be • “attributes”: they store some information • “methods”: they do some work. • In our first program, we have zero attributes and one method. • Each method has 2 parts: a header, and a body. • The header contains the name and other information about the method. • A user of the method needs to know this information. • The body describes what the method should do. • Braces { and } are used to mark the start and end of the method body.
Methods • In our first program, we have one method. public static void main(String[ ] args) // header { System.out.println( "Hello, world!" ); } • The name of the method is main • main is a special name: it means “when you run the program, start here.” • Other information in the method header will be explained later; for now, every main method should have this exact header. • A method body consists of a set of statements. • Each statement is terminated by a semi-colon ; • Our main method has only one statement.
Statements • Our first Java program has one statement: System.out.println( "Hello, world!" ); • Whatever is between the double quotes will appear on the screen, and then the output will move to the next line of the screen. • System is the name of a special class that comes with Java • The . operator asks to go inside a class to an attribute or method. • The above asks to start the println method contained in the out attribute of the System class. • The information between quotes is passed to the println method. • On any computer with a Java virtual machine, the System class keeps track of machine-specific information (such as how to get information onto the screen).
Data in Java • Java is a “typed” language: • Every data value must have a type • The type gives rules for what values are allowed, and what operations can be done with the values. • For the computer, values of a certain type usually take a known amount of storage space in memory.
Java Primitive data types • A data item has a PRIMITIVE type if it represents a single value, which cannot be decomposed. • Java has a number of pre-defined primitive data types. In this course, we will use the following types: int represents integers (e.g. 3) long represents large integers double represents “real” numbers (e.g. 3.0) char represents single characters boolean represents Boolean (logical) values
Variables • To store a value, we use a variable – a name referring to the location in which the value is stored. • Variables must be declared before they can be used. • A variable declaration has three parts: • The type of the variable • The name of the variable • (Optional) Assign an initial value to the variable. • Example: int x = 3;
Assigning Values • The equals sign = is used to represent assigning a value to a variable. • General form: <variable name>= <expression>; • In an assignment statement: • The expression to the right of = is evaluated. • The value is put in the memory location represented by the variable name. • Whatever value was previously associated with the variable is replaced (lost). • Example (assume x and y are declared previously): x = 3 + y;
The Boolean Type • A Boolean variable is one which can have only 2 possible values: true or false. (These are not numbers.) • Boolean variables are used when you need to do logical tests • Example “Is X greater than 3?” x > 3 • Boolean operators: • and (represented by && in Java) • or (represented by || in Java) • not (represented by ! in Java)
Truth Tables • A TRUTH TABLEfor a compound Boolean expression shows the results for all possible combinations of the simple expressions:
Type int • A variable of type int may take values from–2147483648 to 2147483647. • Exceeding the range of legal values results in OVERFLOW, a run-time error. • The following operators are available for type int : + (addition) – (subtraction, negation) * (multiplication) / (integer division, where fraction is lost; result is an int) Example: 7 / 3 = 2 % (remainder from division) Example: 7 % 3 = 1 == != > < >= <=(comparisons: these take two values of type intand return a boolean value)
Type long • A variable of type long may take values from–9223372036854775808L to 9223372036854775807L. • To indicate the difference between an int constant and a long constant, the character L is appended • Example • 1 is of type int • 1L is of type long • Values of type long take up twice as much memory as values of type int.
Type double (Literals) • Type double represents “real” numbers approximately from-1.7 10308 to 1.7 10308 with 15 accurate significant digits. • While there are a lot of doublevalues, the set of legal double values is still finite, and so they are only an approximation to real numbers. • After a computation, the computer has to choose the closest double value to a real result: this can introduce “round-off” errors. • Format of large or small values: 12345600000000000.0 = 0.123456 1017 is 0.123456e17 0.00000123456 = 0.123456 10-5 is 0.123456e-5 • If the value of e is more negative than about -308, the result is UNDERFLOW, and the value will be replaced by zero. This happens quietly, and is not a run-time error.
Type double (Operators) • The following operators are available for type double : + (addition) – (subtraction, negation) * (multiplication) / (division in “real” numbers, result is a double) > <(comparisons: these take two values of type doubleand return a boolean value) • WARNING: Using == (or !=>=<=) to compare two values of type double is legal, but NOT recommended, because of the potential for round-off errors. • Later on, we will see a safe way to do this.
Type char • Characters are individual symbols, enclosed in single quotes • Examples • letters of the alphabet (upper and lower case are distinct) 'A', 'a' • punctuation symbol (e.g. comma, period, question mark) • single blank space • parentheses '(',')'; brackets '[',']'; braces '{','}' • single digit ('0', '1', … '9') • special characters such as '@', '$', '*', and so on.
Special characters • Some characters are treated specially because they cannot be typed easily, or have other interpretations in Java. • new-line character '\n' • tab character '\t' • single quote character '\'' • double quote character '\"' • backslash character '\\' • All of the above are single characters, even though they appear as two characters between the quotes. • The backslash is used as an escape character: it signifies that the next character is not to have its “usual” meaning.
Strings (1) • A STRING is a collection of characters. • There is NO primitive data type in Java for a string. • We will see later how to deal with strings in general. • String literals (constants) can be used to help make your program output more readable. • String literals are enclosed in double quotes: "This is a string” • Watch out for: • "a" (a string) versus 'a' (a character) • " " (a string literal with a blank that has length 1) versus"" (an empty string: a string literal of length 0) • "257" (a string) versus 257 (an integer)
String Concatenation • Strings can be CONCATENATED (joined) using the + operator: • "My name is" + "Alan" gives"My name isAlan" • String values can also be concatenated to values of other types with the + operator. • "The speed is " + 15.5 gives"The speed is 15.5" • Because one of the values for the + operator is a string , the double is temporarily converted to a string value "15.5" before doing the concatenation.
Precedence of Operators • Operators are evaluated left-to-right, with the following precedence (all operators on the same line are treated equally): ()(expression)[](array subscript).(object member) +– (to indicate positive or negative values) ! (not) * / % + - (for addition or subtraction of two values, concatenation) < > >= <= == != && || = (assignment to variable)
Operator Precedence • What is the order of evaluation in the following expressions? a + b + c + d + e a + b * c - d / e a / (b + c) - d % e a / (b * (c + (d - e)))
The Math class • The Java class Math provides constants and methods for common mathematical functions (see text page 43): Math.PI the value of Math.E the value of e Math.abs(x) absolute value Math.sin(x) sine x in radians (also cos, tan) Math.asin(x) arcsine (also acos, atan) Math.log(x) natural logarithm, x > 0 Math.exp(x)ex Math.pow(x,y)xy Math.sqrt(x) square root Math.floor(x) next lower integer Math.ceil(x) next higher integer Math.round(x) closest integer
Random Numbers • Random numbers are often needed for: • simulations • games • The method Math.random() returns a random number x of type double such that 0 ≤ x < 1. • Repeated calls will produce a uniform distribution • that is, the probability that any particular number will be returned is exactly the same as any other number. • To adjust the range of random numbers: y = Math.floor(Math.random() * 5) + 1; y will be an integer such that 1 ≤ y ≤ 5
Console Input and Output • We have already seen how to print a value on the screen: System.out.println( aValue ); • Reading information from the keyboard is not straightforward in Java • What you type is treated as a collection of characters, even if you want to enter a number. • We have to read an entire line at once, and then convert the characters to whatever data type is needed.
Java Output methods • There are two useful Java methods from the class System: System.out.println( aValue ) System.out.print( aValue ) • Method println() will append a new-line character to the output, while print() does not. • These methods are unusual in that the type of aValue does not matter. • Method println() with no parameters can be used to print a blank line.
Java Input • If one were to use Java’s input methods directly (see text, section 2.8), the following is needed: • At the start of the program, create a “buffered reader” • Whenever you want to read some input: • Read a line of characters from the keyboard • PARSE the input • For example, if you are expecting the user to enter a value for type double, parsing checks that the characters that have been entered form a valid double.
Simplified Keyboard Input • To simplify your code, a class called Keyboard is provided. You can download it from the course website. • In your assignments and labs, include this file, called Keyboard.java, in the same directory as your program. Then you may call the methods in this class to read a value (or values) from the keyboard.
Methods in class Keyboard • Here are some of the methods available in the class Keyboard. • Keyboard.readInt() • Reads a single integer value of type int • Keyboard.readLong() • Keyboard.readDouble() • Keyboard.readChar() • Read a single character from the keyboard. • Keyboard.readString() • Read all characters typed before the user hits ‘enter’ • Keyboard.readBoolean() • Type the word true or false (no quotes) on the keyboard and the appropriate boolean value will be created.
Examples of using Keyboard int x = Keyboard.readInt( ); • If you type 123 and press ENTER, x will have the value 123 . • Method readDouble works the same way. boolean b = Keyboard.readBoolean( ); • If you type false and press ENTER, b will have the value false. long x = Keyboard.readInt( ); • If you type 123 and press ENTER, x will have the value of a long integer 123L.
What happens if the usertypes the wrong value? • If you use Keyboard.readInt(), you are expecting the user to type a set of characters that form a legal integer in the proper range for an int variable. • If the user types something else: • A “default value” will be returned that will match the type of the variable • false for a boolean • the lowest possible integer • a special “not a number” floating point value • Later on, we will see how to check user input in our programs.
Input and Output Prompts • When the user is being asked to enter something from the keyboard, your program should always print a message first to tell the user what to enter. • Example: int x; System.out.println(“Enter an integer from 0 to 3:”); x = Keyboard.readInt(); • Likewise, when your program prints a value, there should be a prompt to explain what the value is: • Example: System.out.println(“You typed:” + x );
Problem Solving • We now have enough tools to start solving some problems. • For any problem, BEFORE you start writing a program, determine: • What are the input values that are needed from the user? • What results (outputs) do we need to determine? • What other values are needed? • math constants: , e, etc. • physical constants • What temporary values might need to be calculated? • How do we calculate the results?
Example 1 • Calculate the area of a circle from its radius • what input values do we need? • what other values do we need? • what is our output? • how do we calculate the result?
Example 2 • Calculate the distance travelled by an object under constant acceleration, given a specified time. • What input values do we need? • What other values do we need? • What is the result? • How do we calculate the result?
Example 3: • Carbon-14 dating • General radioactive decay equation: • Q0: initial quantity of radioactive substance • Q(t): quantity of radioactive substance at time t (in years) • : radioactive decay constant for a specific element • Q(t) = Q0e–t is the rate of decay equation • Carbon-14 is continuously taken in by a living organism, and the amount of material at death is assumed to be known. • Once the intake stops, the carbon-14 decays at the above rate, where = 0.00012097 / year • Measure the percentage of carbon-14 remaining
Example 3 continued: • Solve for t to determine the age: • Another useful thing to know: if half of the Carbon-14 remains, the sample is about 5730 years old. • Create a Java program to determine the age: • what are the inputs? • what are the outputs? • what other values do we need? • how do we calculate the formula?