PIC 20A The Basics of Java

Similar documents
PIC 10A Objects/Classes

Introduction to Programming Using Java (98-388)

CS 251 Intermediate Programming Java Basics

Full file at

Full file at

c) And last but not least, there are javadoc comments. See Weiss.

boolean, char, class, const, double, else, final, float, for, if, import, int, long, new, public, return, static, throws, void, while

Chapter 2 Using Data. Instructor s Manual Table of Contents. At a Glance. Overview. Objectives. Teaching Tips. Quick Quizzes. Class Discussion Topics

COMP 250 Winter 2011 Reading: Java background January 5, 2011

Chapter 2 Using Data. Instructor s Manual Table of Contents. At a Glance. A Guide to this Instructor s Manual:

Computational Expression

PIC 10A Pointers, Arrays, and Dynamic Memory Allocation. Ernest Ryu UCLA Mathematics

Review Chapters 1 to 4. Instructor: Scott Kristjanson CMPT 125/125 SFU Burnaby, Fall 2013

Packages & Random and Math Classes

COMP 202 Java in one week

Chapter 4 Defining Classes I

Index COPYRIGHTED MATERIAL

CS 231 Data Structures and Algorithms, Fall 2016

Lesson 10A OOP Fundamentals. By John B. Owen All rights reserved 2011, revised 2014

BASIC COMPUTATION. public static void main(string [] args) Fundamentals of Computer Science I

Pace University. Fundamental Concepts of CS121 1

Java How to Program, 10/e. Copyright by Pearson Education, Inc. All Rights Reserved.

QUIZ. What is wrong with this code that uses default arguments?

Getting started with Java

CS260 Intro to Java & Android 03.Java Language Basics

Outline. Overview. Control statements. Classes and methods. history and advantage how to: program, compile and execute 8 data types 3 types of errors

Last Time. University of British Columbia CPSC 111, Intro to Computation Alan J. Hu. Readings

PIC 10A Flow control. Ernest Ryu UCLA Mathematics

A variable is a name for a location in memory A variable must be declared

Visual C# Instructor s Manual Table of Contents

BM214E Object Oriented Programming Lecture 8

CS11 Java. Fall Lecture 1

1 Shyam sir JAVA Notes

The issues. Programming in C++ Common storage modes. Static storage in C++ Session 8 Memory Management

Java Bytecode (binary file)

Mobile Computing Professor Pushpendra Singh Indraprastha Institute of Information Technology Delhi Java Basics Lecture 02

1 Epic Test Review 2 Epic Test Review 3 Epic Test Review 4. Epic Test Review 5 Epic Test Review 6 Epic Test Review 7 Epic Test Review 8

AP Computer Science Chapter 10 Implementing and Using Classes Study Guide

Java: introduction to object-oriented features

Formatting Output & Enumerated Types & Wrapper Classes

PIC 20A Streams and I/O

Two Types of Types. Primitive Types in Java. Using Primitive Variables. Class #07: Java Primitives. Integer types.

Program Fundamentals

Introduction to Visual Basic and Visual C++ Introduction to Java. JDK Editions. Overview. Lesson 13. Overview

Contents. I. Classes, Superclasses, and Subclasses. Topic 04 - Inheritance

A Short Summary of Javali

5/3/2006. Today! HelloWorld in BlueJ. HelloWorld in BlueJ, Cont. HelloWorld in BlueJ, Cont. HelloWorld in BlueJ, Cont. HelloWorld in BlueJ, Cont.

Fall 2017 CISC124 9/16/2017

Vector and Free Store (Pointers and Memory Allocation)

ITI Introduction to Computing II

Control Flow. COMS W1007 Introduction to Computer Science. Christopher Conway 3 June 2003

12/22/11. Java How to Program, 9/e. public must be stored in a file that has the same name as the class and ends with the.java file-name extension.

Simple Java Reference

Basics of Java Programming

Outline. Computer programming. Debugging. What is it. Debugging. Hints. Debugging

Lesson 1A - First Java Program HELLO WORLD With DEBUGGING examples. By John B. Owen All rights reserved 2011, revised 2015

Java Fundamentals (II)

Weiss Chapter 1 terminology (parenthesized numbers are page numbers)

Object Class. EX: LightSwitch Class. Basic Class Concepts: Parts. CS257 Computer Science II Kevin Sahr, PhD. Lecture 5: Writing Object Classes

4. Java Project Design, Input Methods

CS321 Languages and Compiler Design I. Winter 2012 Lecture 2

Assoc. Prof. Dr. Marenglen Biba. (C) 2010 Pearson Education, Inc. All rights reserved.

Interpreted vs Compiled. Java Compile. Classes, Objects, and Methods. Hello World 10/6/2016. Python Interpreted. Java Compiled

3. Java - Language Constructs I

CSCI 2010 Principles of Computer Science. Data and Expressions 08/09/2013 CSCI

CS112 Lecture: Primitive Types, Operators, Strings

Course information. Petr Hnětynka 2/2 Zk/Z

An overview of Java, Data types and variables

MODULE 02: BASIC COMPUTATION IN JAVA

Fast Introduction to Object Oriented Programming and C++

Pointers and Memory 1

CHAPTER 7 OBJECTS AND CLASSES

Absolute C++ Walter Savitch

VARIABLES AND TYPES CITS1001

Objects and Classes. Basic OO Principles. Classes in Java. Mark Allen Weiss Copyright 2000

COMP 250: Java Programming I. Carlos G. Oliver, Jérôme Waldispühl January 17-18, 2018 Slides adapted from M. Blanchette

CS 112 Introduction to Computing II. Wayne Snyder Computer Science Department Boston University

Selected Questions from by Nageshwara Rao

PIC 20A Anonymous classes, Lambda Expressions, and Functional Programming

PIC 20A Exceptions. Ernest Ryu UCLA Mathematics. Last edited: November 27, 2017

Zheng-Liang Lu Java Programming 45 / 79

Rules and syntax for inheritance. The boring stuff

COMP-202 Unit 2: Java Basics. CONTENTS: Using Expressions and Variables Types Strings Methods

Chapter 2: Using Data

9 Working with the Java Class Library

TOPIC 2 INTRODUCTION TO JAVA AND DR JAVA

1007 Imperative Programming Part II

Chapter 2: Using Data

A Fast Review of C Essentials Part I

CHAPTER 7 OBJECTS AND CLASSES

PIC 20A Number, Autoboxing, and Unboxing

Lecture Notes. System.out.println( Circle radius: + radius + area: + area); radius radius area area value

Graphical Interface and Application (I3305) Semester: 1 Academic Year: 2017/2018 Dr Antoun Yaacoub

Java Intro 3. Java Intro 3. Class Libraries and the Java API. Outline

CS 302: Introduction to Programming

Programming with Java

12/22/11. Java How to Program, 9/e. Help you get started with Eclipse and NetBeans integrated development environments.

Lecture 10 Declarations and Scope

CS-140 Fall 2017 Test 1 Version Practice Practie for Sept. 27, Name:

Section 2.2 Your First Program in Java: Printing a Line of Text

Transcription:

PIC 20A The Basics of Java Ernest Ryu UCLA Mathematics Last edited: November 1, 2017

Outline Variables Control structures classes Compilation final and static modifiers Arrays Examples: String, Math, and main imports and packages assert and debug mode Garbage collection More on constructors, this, and initializer blocks Variables 2

Variables As in any programming language, Java has variables. public class Test { public static void main ( String [] args ) { double d1 = 0.2 ; double d2 = 0.5 ; System. out. println (d1*d2 ); In Java, there are primitive and reference variables. Variables 3

Variable names Names are case-sensitive and must not conflict with reserved keywords. Reserved keywords include: abstract, class, continue, else, for, int, new, static, etc. http://docs.oracle.com/javase/tutorial/java/nutsandbolts/_keywords.html Variables 4

Primitive data types There are 8 primitive data types. byte: 1 byte integer short: 2 byte integer int: 4 byte integer long: 8 byte integer float: single-precision floating-point number double: double-precision floating-point number boolean: a Boolean (it s not spelled bool) char: 16-bit unicode character http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html Variables 5

Literals Literals represent a fixed value. Integer literals: int i1 = 100 ; // decimal int i2 = 0 x1abc ; // hex int i3 = 0 b11011 ; // binary long i3 = 1000000 L; // L means long Boolean literals boolean b1 = true ; boolean b2 = false ; Variables 6

Literals Floating-point literals double d1 = 123. 4 ; double d2 = 1. 234 e2; // in scientific notation float f1 = 123. 4 f; // f means float Character literals char c1 = a ; char c2 = \ ; // apostrophe character https://en.wikibooks.org/wiki/java_programming/literals Variables 7

class String The class String is not a primitive data type. However it receives special support by the language, so people often think of it as such. More on Strings later. Variables 8

Variable initialization Variables should be initialized before use. public class Test { public static void main ( String [] args ) { int i; //i is declared // System. out. println (i); // won t compile i = 0; // i is assigned / initialized System. out. println (i); (Some variables will be automatically initialized to a reasonable default value. Don t rely on this behavior, as it s bad style, and save yourself from memorizing the precise rules for this.) Variables 9

Conversions A variable of one type is converted to another with casting conversion and other implicit conversions. Casting conversion converts from type T1 to T2 with (T2) T1. double d = (( double ) 1) / (( double ) 2); Roughly speaking, implicit conversion converts from type T1 to T2 when a variable of type T1 is provided when T2 is expected. double d = 5; Variables 10

Operators Operators (which are functions) like ++, +, &&, =, and -= are similar to those of C++. public class Test { public static void main ( String [] args ) { int i = 2; System. out. println (++ i); //3 System. out. println (i>0); // true System. out. println ((i>0) false ); // true http://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html Variables 11

Basic I/O Here s how take input from and output to (I/O) the command line. // import class Scanner from Java API import java. util. Scanner ; public class Test { public static void main ( String [] args ) { Scanner reader = new Scanner ( System. in ); int i = reader. nextint (); // get int from user System. out. println (i); // print out the int More on I/O and Scanner later. Variables 12

Outline Variables Control structures classes Compilation final and static modifiers Arrays Examples: String, Math, and main imports and packages assert and debug mode Garbage collection More on constructors, this, and initializer blocks Control structures 13

Control structures Control structures like if-statements, for-loops, and while-loops are similar to those of C++. public class Test { public static void main ( String [] args ) { int i = 2; if (i > 0) { System. out. println ("i is positive "); else if (i < 0) { System. out. println ("i is negative "); else { System. out. println ("i is zero "); http://docs.oracle.com/javase/tutorial/java/nutsandbolts/flow.html Control structures 14

Omitting curly braces When one statement follows a control structure, { and can be omitted. public class Test { public static void main ( String [] args ) { int i = 2; if (i > 0) System. out. println ("i is positive "); else if (i < 0) System. out. println ("i is negative "); else System. out. println ("i is zero "); for ( int j=i; j<5; j ++) System. out. println (j); Some consider this bad style (I disagree) but I ll use it in lecture slides to save space. Control structures 15

Outline Variables Control structures classes Compilation final and static modifiers Arrays Examples: String, Math, and main imports and packages assert and debug mode Garbage collection More on constructors, this, and initializer blocks classes 16

classes You should be familiar with these basics concepts of classes: classes, data members, member functions, constructors, and public and private members. Let s see how they re done in Java. classes 17

Fields In Java, data members are called fields. public class Complex { public double real ; // fields public double imag ; In Java, the first letter of class is capitalized by convention. The class Complex has 2 fields named real and imag. classes 18

Access modifiers In Java there are 4 access modifiers: public, private, protected, and package-private (no explicit modifier). We ll later talk about protected and package-private later. public class Complex { // public class? what? public double real ; // public make sense public double imag ; You should be familiar with public and private fields. We ll talk about public classes later. classes 19

Constructors You can have multiple constructors. public class Complex { public double real ; public double imag ; public Complex () { real = 0; imag = 0; public Complex ( double r, double i) { real = r; imag = i; (You will soon see why private constructors are sometimes useful.) classes 20

Methods In Java, member functions are called methods. public class Complex { public double real ; public double imag ;... public void printnum () { System. out. println ( real +"+"+ imag +"i"); classes 21

Reference variables Let s see how to use a class in another class. public class Test { public static void main ( String [] args ) { Complex c1; // c1 is a reference variable c1 = new Complex (); // c1 refers to a Complex Complex c2 = new Complex ( 0.1, 1.2 ); In this example, c1 and c2 are reference variables of type Complex. You must use the new keyword to instantiate an object. (In Java, primitive variables are not objects.) classes 22

Reference variables are like pointers c1 is not the object. c1 refers to the object. public class Test { public static void main ( String [] args ) { Complex c1 = new Complex ( 1, 2); Complex c2 = c1; // copies the reference c2. real = 10; System. out. println (c1. real ); // output 10.0 (We ll later talk about how to copy objects.) classes 23

Reference variables are like pointers We can change what the reference variable refers to. With null, we can make it refer to nothing. public class Test { public static void main ( String [] args ) { Complex c1 = new Complex ( 1, 2); c1 = new Complex ( 3, 3); // first Complex gone c1 = null ; // second Complex gone (The garbage collector will automatically destroy objects with no reference variables referring to it. More on this later.) classes 24

returning objects Methods can return objects. public class Complex { public double real ; public double imag ;... public Complex ( double r, double i) { real = r; imag = i;... public Complex add ( Complex c) { return new Complex ( real +c.real, imag +c. imag ); classes 25

returning objects public class Test { public static void main ( String [] args ) { Complex c1 = new Complex ( 1, 2); Complex c2 = new Complex ( 3, 4); Complex c3 = c1.add (c2 ); c3. printnum (); // output 4.0+6.0 i Complex c4 = ( new Complex (5,6 )). add ( new Complex (7,8 )); c4. printnum (); // output 12.0+14.0 i classes 26

Package-private classes classes can be public or package-private (no explicit modifier). (Top-level) classes cannot be private or protected. Package-private classes can be accessed within the same file and same package. (More on packages soon.) If you know a class should not be use elsewhere, make it package-private. public class Test { public static void main ( String [] args ) { SomeClass v1 = new SomeClass ();... class SomeClass {... classes 27

Package-private fields and methods Fields and methods of a package-private class can be package-private. A public class can but probably shouldn t have package-private fields and methods. classes 28

public classes A public class can be used from other files. (class Complex should be public.) A file can have only one public class. It s name must match the filename. A public class can have a main function. The command java ClassName calls that main function. classes 29

Outline Variables Control structures classes Compilation final and static modifiers Arrays Examples: String, Math, and main imports and packages assert and debug mode Garbage collection More on constructors, this, and initializer blocks Compilation 30

Compiling multiple files When you compile javac Test.java and Test.java uses a class named Complex, there are 3 scenarios: 1. javac finds and uses a package-private class Complex defined in the file Test.java. 2. javac finds and uses Complex.java or Complex.class in the current directory. 3. javac can t figure out what Complex is and issues an error. (The option -classpath changes where to look for Complex.java or Complex.class.) Compilation 31

Compiling multiple files When javac finds the definition of Complex in another file, there are 3 scenarios. There s Complex.class but not Complex.java. Then javac uses yy.class. There s Complex.java but not Complex.class. Then javac compiles Complex.java and produce Complex.class. There s both Complex.java and Complex.class. If, according to the files timestamps, Complex.class is newer than Complex.java, then Complex.class is used. If Complex.java is newer, it recompiled and Complex.class is overwritten. (The last rule says Complex.java is recompiled if it s been updated since the last compilation.) Compilation 32

Compiling multiple files Summary: Put all.java files in the same directory, and explicitly compile only the file with the main function. The rules are set up so that things will just work. We ll later talk about more sophisticated methods of managing more complicated code structures. Compilation 33

Outline Variables Control structures classes Compilation final and static modifiers Arrays Examples: String, Math, and main imports and packages assert and debug mode Garbage collection More on constructors, this, and initializer blocks final and static modifiers 34

final variables A final variable is can be set only once. It s like const in C++. public static void main ( String [] args ) { final int i; // blank final variable int j = 2; System. out. println (j); i = 3; System. out. println (i+j); //i= 5; // error You do not have to initialize a final variable immediately. An uninitialized final variable is called a blank final variable. final and static modifiers 35

final parameters You can make function parameters final to prevent certain bugs. static void func ( final int i, final Complex c) { // i = 2; error // c = new Complex (1,2); // error c. real = 5; // not an error! public static void main ( String [] args ) { Complex c1 = new Complex ( 0, 0); func (7,c1 ); c1. printnum (); // 5.0+0.0 i Pay attention to what s constant and what isn t. final and static modifiers 36

final fields final fields must be initialized by the end of the constructor. class Complex { final public double real, imag ; public Complex () { real = 0; imag = 0; public Complex ( double r, double i) { real = r ; imag = i ; final and static modifiers 37

Other uses of final In addition to variables, methods and classes can be final. More on this when we talk about inheritance. final and static modifiers 38

static fields A static field belongs to the class, not the instantiated object. 1 copy of it is shared across objects of the same class. public class Monster { private static int count = 0; // initialize to 0 public Monster () { count ++; System. out. print (" New Monster created."); System. out. print (" There are "); System. out. print ( count + " Monsters.\n"); final and static modifiers 39

static fields public class Test { public static void main ( String [] args ) { Monster m1 = new Monster (); Monster m2 = new Monster (); Monster m3 = new Monster (); The output is New Monster created. There are 1 Monsters. New Monster created. There are 2 Monsters. New Monster created. There are 3 Monsters. final and static modifiers 40

Constants with static fields Use static final fields for constants. public class MyMath { public static final double PI = 3. 141592653589 ; public static final double E = 2. 718281828450 ; public class Test { public static void main ( String [] args ) { double r = 3; System. out. println (2* MyMath.PI*r); // good MyMath m1 = new MyMath (); System. out. println (2*m1.PI*r); // bad style final and static modifiers 41

static functions A static function belongs to the class, not the instantiated object. They can only access static fields. public class Monster { private static int count = 0; private final String name ;... public static int countmonster () { // error! Can t access non - static field // System. out. println ( name ); return count ; final and static modifiers 42

static functions Some static functions have nothing to do with objects, and are simply packaged together into a class. public class MyMath { public static final double PI = 3. 141592653589 ; public static final double E = 2. 718281828450 ; public static double sqrt ( double d) {... public static double sin ( double d) {... public static double cos ( double d) {... public static double tan ( double d) {... final and static modifiers 43

Other uses of static In addition to fields and methods, initialization blocks can be static. More on this soon. final and static modifiers 44

Outline Variables Control structures classes Compilation final and static modifiers Arrays Examples: String, Math, and main imports and packages assert and debug mode Garbage collection More on constructors, this, and initializer blocks Arrays 45

Arrays An array is an object of reference type which contains a fixed number of components of the same type. double [] d_arr ; d_arr is a reference variable of type double[]. Few things to note. Length is fixed. The array length is not part of its type. Arrays use zero-based indexing. Arrays 46

Array creation expression Create an array with an array creation expression. int [] i_arr = new int [5]; for ( int i=0; i<5; i ++) i_arr [i] = 0; i_arr = new int [9]; (The length of i_arr is not part of its type.) Arrays 47

Array creation expression Arrays of objects have the same syntax. Complex [] c_ arr = new Complex [ 5]; for ( int i=0; i<5; i ++) c_arr [i] = new Complex (); c_ arr = null ; Let s parse this carefully. Arrays 48

Array creation expression Create a reference variable c_arr of type Complex[]. Complex [] c_arr ; Create an object of type Complex[] that contains 5 reference variables of type Complex. new Complex [5]; Make c_arr refer to the Complex[] object. c_arr = new Complex [5]; Arrays 49

Array initialization At this point, no Complex objects exist. Create the Complex objects. for ( int i=0; i<5; i ++) c_arr [i] = new Complex (); c_arr can be set to null (and we lose reference to the Complex[] object and 5 Complex objects). c_ arr = null ; Arrays 50

Array initializer We can also use the array initializer. int [] i_arr = {1,2,3; // i_arr = {2,3,4,5,6; // error! i_arr = new int [] {2,3,4,5,6; Complex [] c_arr = { new Complex (0,1), // (*) new Complex (), null ; c_arr [2] = new Complex (3,8); (Newline at (*) only because we re out of space.) Let s parse this carefully. Arrays 51

Array initializer When declaring and initializing an array at the same time, use the array initializer by itself. int [] i_arr = {1,2,3; Otherwise, use the array initializer as part of an array creation expression. i_arr = new int [] {2,3,4,5,6; Arrays 52

Array initializer Create an object of type Complex[] with 3 Complex references. 2 Complex objects created and the first 2 Complex references refer to them. The last Complex reference refers to nothing. Complex [] c_arr = { new Complex (0,1), new Complex (), null ; Create another Complex object and make the last Complex reference refer to it. c_arr [2] = new Complex (); Arrays 53

Array length An array has a public final field named length. int [] i_a = new int [ 300 ]; for ( int i=0; i<i_a. length ; i ++) i_a [i] = 0; // i_a. length = 2; // error! Arrays 54

Varargs A function can take a variable number of arguments (varargs) static void fn( int i, double d, char... c_ arr ) { System. out. println (i); System. out. println (d); for ( int j=0; j< c_arr. length ; j ++) System. out. println ( c_arr [i ]); fn can be called with 2, 3, or more arguments. public static void main ( String [] args ) { fn(1,2.2 ); fn(5,1.2, a, b, c, d ); The variable number of inputs are converted into an array. (Varargs can be used only in the final argument position.) Arrays 55

Varargs You can also use an array as your input. public static void main ( String [] args ) { fn(1,2.2 ); fn(5,1.2, a, b, c, d ); fn(5,1.2, new char [] { a, b, c ); Arrays 56

Varargs A varargs input allows variable inputs or an array. An array input only allows an array. static void fn( int i, double d, char [] c_ arr ) {...... public static void main ( String [] args ) { // fn (5,1.2, a, b, c, d ); // error! fn(5,1.2, new char [] { a, b, c ); Arrays 57

Enhanced for loop In Java, there are two types of for loops: regular and enhanced for loops. public static void main ( String [] args ) { int [] i_arr = {1,5,0,2,2,9,1; // regular for loop for ( int i=0; i< i_arr. length ; i ++) System. out. println ( i_arr [i ]); // enhanced for loop for ( int j : i_arr ) System. out. println (j); The enhanced for loop is also called the for-each loop. Arrays 58

Outline Variables Control structures classes Compilation final and static modifiers Arrays Examples: String, Math, and main imports and packages assert and debug mode Garbage collection More on constructors, this, and initializer blocks Examples: String, Math, and main 59

Strings String is an object (not a primitive type) that represents a sequence of characters. Strings have a lot of special support by the Java language such as String literals and the + operator. Strings are immutable. To change a String you have to create a new one with the desired changes and discard the old one. The class StringBuffer provides a mutable array of characters. Examples: String, Math, and main 60

Special String features Use " to write String literals. String s1 = " Good morning."; Use the + operator to concatenate other objects with strings. Object + String Examples: String, Math, and main 61

tostring method All objects have a method with signature public String tostring () whether you explicitly make one or not. This will be explained later in the context of inheritance. The System.out.println method calls tostring on its input. Complex c1 = new Complex (); System. out. println (c1 ); System. out. println (c1. tostring ()); The output is Complex@15db9742 Complex@15db9742 Examples: String, Math, and main 62

tostring method You can override the tostring method public class Complex {... public String tostring () { return real + "+" + imag + "i"; and you get a better output. Complex c1 = new Complex ( 2, 3); System. out. println (c1 ); System. out. println (c1. tostring ()); The output is 2+3i 2+3i Examples: String, Math, and main 63

The + operator The + operator on primitivetype + String (or vice versa) converts the primitive type to an appropriate String and concatenates it to the other String. The + operator on Object + String calls the tostring on the object and concatenates the output to the other String. Examples: String, Math, and main 64

Math, a utility class A utility class contains a set of common and reused members. A utility class is more of a package rather than a blueprint for an object. public class Test { public static void main ( String [] args ) { System. out. println ( Math. sin ( 0.1 )); // sin is a static method of Math Utility classes use static members to provide their functionalities. Examples: String, Math, and main 65

Math, a utility class In fact, you are not allowed to instantiate Math. public class Test { public static void main ( String [] args ) { Math m1 = new Math (); Compiling this produces error: Math() has private access in Math Math m1 = new Math(); More on this later. Take a look at: https://docs.oracle.com/javase/8/docs/api/java/lang/math.html Examples: String, Math, and main 66

main The main function of a public class must have signature public static void main ( String [] args ) or public static void main ( String... args ) The parameter args contain the inputs provided through the command line java ClassName input1 input2... Examples: String, Math, and main 67

main You can use args to allow users to specify certain options. public class Test { public static void main ( String [] args ) { for ( String s : args ) System. out. println (s); Examples: String, Math, and main 68

main Examples: String, Math, and main 69

Outline Variables Control structures classes Compilation final and static modifiers Arrays Examples: String, Math, and main imports and packages assert and debug mode Garbage collection More on constructors, this, and initializer blocks imports and packages 70

packages and fully qualified names Java code is organized through packages like java.lang or java.util. To use a class within a package, refer to its fully qualified name. public class Test { public static void main ( String [] args ) { java. util. Scanner r; // fully qualified name... imports and packages 71

import declarations When using a class within a package, it s convenient to import it. From the package java.util import the (public) class Scanner. import java. util. Scanner ; public class Test { public static void main ( String [] args ) { Scanner r;... imports and packages 72

import declarations You can import an entire package. Import all classes from the package java.util. import java. util.*; public class Test { public static void main ( String [] args ) { Scanner r; Calendar c;... imports and packages 73

java.lang The java.lang is special; all classes in it are automatically imported. // import java. lang.*; // imported by default public class Test { public static void main ( String [] args ) { java. lang. String s; double p = java. lang. Math.PI; double d = java. lang. Math. sqrt (p); java. lang. System. out. println (d); imports and packages 74

static imports Import static fields and methods of a class with static imports. import static java. lang. Math. PI; // static field import static java. lang. Math. sqrt ; // st. method import static java. lang. System. out ; // st. field public class Test { public static void main ( String [] args ) { out. println ( sqrt (PI )); imports and packages 75

static imports You can import all static members of a class. import static java. lang. Math.*; public class Test { public static void main ( String [] args ) { System. out. println ( sqrt (PI )); imports and packages 76

Are static imports bad? Experts advise to use static imports very sparingly. import static java. lang. Math.E; import...; import...; public class Test { public static void main ( String [] args ) { // where does E come from? System. out. println (E); They make code less readable. imports and packages 77

Are static imports bad? When you static import from an entire class, import static java. lang. Math.*; you import too many names you don t know. (Do you know all the static members of Math?) This opens up the possibility of name conflicts and bugs. imports and packages 78

Java API The Java language comes with a library called the Java API (Application Program Inteface). The Java API is organized into packages like java.lang, java.util, java.net, java.io, or javax.swing. Becoming proficient with Java involves learning key parts of the Java API. imports and packages 79

Creating a package Create a package with the package declaration. package packagename ; import java. util. Scanner ; public class SomeClass {... imports and packages 80

Unnamed package When no package name is specified, the class belongs to the unnamed package. The unnamed package is for developing small or temporary applications. Generally, you should put all classes in named packages. imports and packages 81

Managing source and class files With respect to a base directory, place the files for a package named packagename within the folder packagename. Place the files for the unnamed package in the base directory. For example, package packagename ; public class SomeClass {... this file should be placed in basedirectory\packagename\someclass.java imports and packages 82

Managing source and class files To compile a.java file within a package, use javac packagename\test.java from the base directory. To run the main function of a class within a package, use java packagename.test from the base directory. imports and packages 83

Managing source and class files For example, to run the following main function, package testpackage ; public class Test { public static void main ( String [] args ) {... imports and packages 84

Managing source and class files do this (Or you can place the main function within a class within the unnamed package and save yourself from typing the package name.) imports and packages 85

Outline Variables Control structures classes Compilation final and static modifiers Arrays Examples: String, Math, and main imports and packages assert and debug mode Garbage collection More on constructors, this, and initializer blocks assert and debug mode 86

assert assert is a useful debugging tool: assert expr1 : expr2; halts the program if expr1 is false and prints expr2 as the error message. import java. util. Scanner ; public class Test { public static void main ( String [] args ) { Scanner reader = new Scanner ( System. in ); int i = reader. nextint (); assert (i>0) : "i must be positive "; assert and debug mode 87

assert When you run your program with java, use the -ea option to enable asserts. They are by default turned off. java -ea ClassName assert and debug mode 88

Debug mode It s often useful to have debugging code that you can turn on and off. package devconstants ; public class Constants { public static final boolean DEV_ MODE = true ; import static devconstants. Constants. DEV_ MODE ; public class SomeClass {... if( DEV_MODE ){ // check stuff System. out. println ( somevariable );... assert... :...;... assert and debug mode 89

Outline Variables Control structures classes Compilation final and static modifiers Arrays Examples: String, Math, and main imports and packages assert and debug mode Garbage collection More on constructors, this, and initializer blocks Garbage collection 90

The Garbage Collector Java periodically deletes unreferenced objects. This process is called garbage collection and is performed by the garbage collector. When the garbage collector runs is unpredictable and is none of your business. Sometimes unreferenced objects may never be garbage collected (and the memory is returned to the OS as the program exists). Your program should not rely on the garbage collector behaving in a certain way. However, you may want to explicitly control garbage collection for debugging purposes. Garbage collection 91

finalize The garbage collector will run the finalize() method before destroying the object. Because garbage collection is unpredictable, you shouldn t rely on finalize() to clean up your object. (Exceptions are rare.) So don t think of finalize() as the equivalent of destructors in C++. Only use finalize() as a debugging tool. Garbage collection 92

finalize public class Monster { private static int monster_ count = 0; private boolean isalive ; public Monster () { monster_ count ++; isalive = true ; public void kill () { monster_ count - -; isalive = false ; public void finalize () { if ( isalive ) System. out. println (" Live Monster is being " + " garbage collected."); Garbage collection 93

System.gc() The static method System.gc() suggests Java to run the garbage collector. This is only a suggestion, and it may be ignored. public class Test { public static void main ( String [] args ) { Monster m1 = new Monster (); Monster m2 = new Monster (); m1. kill (); m1 = null ; m2 = null ; System.gc (); // message from m2. finalize () Again, only use System.gc() as a debugging tool. If your code relies on System.gc(), then there s probably something wrong with it. Garbage collection 94

Outline Variables Control structures classes Compilation final and static modifiers Arrays Examples: String, Math, and main imports and packages assert and debug mode Garbage collection More on constructors, this, and initializer blocks More on constructors, this, and initializer blocks 95

Default constructor When there are no constructors, the compiler provides a no-argument constructor called the default constructor. public class Complex { public double real, imag ; // the same no - argument constructor provided // public Complex () { The default constructor basically does nothing. More on constructors, this, and initializer blocks 96

private constructor Provide a single private constructor to prevent users from instantiating a class. This is a useful safety feature for utility classes. public class MyMath {... private MyMath () { More on constructors, this, and initializer blocks 97

Copy constructor By convention, the constructor of class T with a single input of type T is called the copy constructor and is used to copy objects. public class Complex { public double real, imag ;... public Complex ( Complex c) { real = c. real ; imag = c. imag ; (In Java, there is no automatic default copy constructor.) More on constructors, this, and initializer blocks 98

= doesn t copy objects Again, you can copy primitive variables but not reference variables with =. public class Test { public static void main ( String [] args ) { int i1 = 7; int i2 = i1; // copy Complex c1 = new Complex ( 1, 4); Complex c2 = c1; // not a copy Complex c3 = new Complex ( c1 ); // copy The operator = copies the reference, so c1 and c2 refers to the same object. More on constructors, this, and initializer blocks 99

Don t copy immutable objects You almost never have to copy immutable objects. public class Test { public static void main ( String [] args ) { String s1 = " Hello "; String s2 = s1; String s3 = new String ( s1 ); // why? More on constructors, this, and initializer blocks 100

Factory methods A factory method is a static method that returns an instance of the class. public class Complex { public double real, imag ; public static Complex frompolar ( double r, double th) { double re = r* Math. cos (th ); double im = r* Math. sin (th) return new Complex (re,im );... More on constructors, this, and initializer blocks 101

Factory methods There are 2 major advantages of factory methods. You can have multiple factory methods with the same number and types of inputs. The factory method s name can be descriptive. public class Test { public static void main ( String [] args ) { Complex c1, c2; c1 = Complex. fromxy ( 0.1,3.1 ); c2 = Complex. frompolar ( 5.1,Math.PI/2); More on constructors, this, and initializer blocks 102

Copy factory You can use a copy factory method instead of a copy constructor. public class Complex { public double real, imag ; public static Complex copy ( Complex c) { return new Complex (c.real,c. imag );... In my opinion, copy constructors and copy factories are both fine. More on constructors, this, and initializer blocks 103

Forcing factory methods Make all constructors private to force users to use factory methods. public class Complex { public double real, imag ; public static Complex frompolar ( double r, double th) {... public static Complex fromxy ( double real, double imag ) { return new Complex ( real, imag ); private Complex ( double r, double i) { real = r; imag = i; More on constructors, this, and initializer blocks 104

this Within a non-static method or a constructor, this is a reference to the current object. public class Complex { public double real, imag ;... public Complex ( double real, double imag ) { this. real = real ; this. imag = imag ; This is the most common use of this, to access a field which name is shadowed by a method or constructor parameter. More on constructors, this, and initializer blocks 105

this for explicit constructor invocation Another use of this is for explicit constructor invocation. This is also called constructor chaining. public class Complex { public double real, imag ; public Complex () { this (0,0); public Complex ( double real, double imag ) { this. real = real ; this. imag = iimag ; When you use this to call another constructor, you must do so in the first line of the constructor. More on constructors, this, and initializer blocks 106

Initializer block You can use a initializer block to avoid repeating code in constructors. import java. util. Date ; public class Monster { private String dateofbirth ; private String name ; { dateofbirth = ( new Date ()). tostring (); public Monster () { this (" Unnamed "); public Monster ( String name ) { this. name = name ; More on constructors, this, and initializer blocks 107

Initializer block The initializer block is also called an instance initializer block, in constrast with the static initializer block. The initializer block is run every time the class is instantiated, and it is run right before the constructor is run. Initializer blocks aren t strictly necessary. You can achieve the same effect with a private method More on constructors, this, and initializer blocks 108

Initializer blocks aren t necessary import java. util. Date ; public class Monster { private String dateofbirth ; private String name ; private void setdob () { dateofbirth = ( new Date ()). tostring (); public Monster () { this (" Unnamed "); setdob (); public Monster ( String name ) { this. name = name ; setdob (); In this example, however, using initializer blocks is cleaner. More on constructors, this, and initializer blocks 109

Static initializer block The static initializer block is run once when the class is loaded. public class Card { private static final String [] suits ; private static final char [] nums ; static { suits = new String [] {" Clubs ", " Diamonds ", " Hearts ", " Spades "; nums = new char [ 13 ]; nums [0] = A ; nums [10] = J ; nums [11] = Q ; nums [12] = K ; for ( int i=1; i <=9; i ++) nums [i] = ( ( char ) ( 0 + i) );... static initializer blocks are mostly used to initialize static fields. More on constructors, this, and initializer blocks 110

Initializing fields You can also initialize a field in its declaration. public class Complex { public double real = 0, imag = 0; The right-hand side can be a function evaluation. import java. util. Date ; public class Monster { private final String dateofbirth = ( new Date ()). tostring ();... More on constructors, this, and initializer blocks 111

Initializing fields There are 2 ways to initialize a final static field: in its declaration or in a static initialization block. There are 3 ways to initialize a final non-static field: in its declaration, in an initialization block, or in a constructor. There is more than one way to initialize a field. Use whichever is convenient for the setting. More on constructors, this, and initializer blocks 112