=====
CS 235 - Week 2 Lecture - 2021-08-30
=====
=====
TODAY WE WILL
=====
* announcements
* continuing Java basics for C++ programmers
* prep for next class
-----
Announcements
-----
* Reading: (from "Core Java" course text)
* Skimming Chapters 1-3
* Chapter 3 - Section 3.10 - Arrays
* Chapter 5 - Section 5.3
and Chapter 9 - Subsection 9.3.2 - ArrayList class
(analogue to C++ vector class)
* Chapter 3 - Subsection 3.7.3 - File input and output
* CLICKER QUESTIONS for POINTS start today!
* You should would be working on Homework 1
* jshell -- Java's REPL, read-evaluate-print-loop!!!!!!
* jshell -- Java's REPL, read-evaluate-print-loop!!!!!!
* NOTE: forgot to mention during class:
you can EXIT a jshell session by typing
the control key and d at the same time!
(that's often "abbreviated" as ^D)
=====
* Java programming language - you write Java classes,
applications, servlets, and components are written
* Java platform - the predefined set of Java classes that
exist on every Java installation
* sometimes these are called the "core Java APIs"
* API - application programming interface
=====
* Java is PICKY about its file names, as discussed last week!
* And Java has very-accepted naming CONVENTIONS --
(style, not syntax)
* class names start upper case letter, then CamelCase
* often "noun"-y
* method and data field andvariable names start
with a lower-case letter,
then camelCase
* EXCEPT for CONSTRUCTOR METHODS!!!
like C++, constructor method name IS the name of the class!!
* method names are often "verb"-y
* "classic" selectors - typically named getDesiredAttrib
(like GameDie's getCurrTop)
* "classic" modifiers - typically named setDesiredAttrib
(we'll see setText in some graphical elements later,
for example)
* variable names are often "noun"-y
* named constants - name like in C++ common practice,
all-uppercase, with underscores
MAX_SAFE_TEMP
=====
* basic declarations are MOSTLY like you know from C++:
desiredType varName;
desiredType varName = desiredExpr;
(Java also has a var option now -- cute nod to JavaScript (?),
feel free to use if you'd like.)
=====
* Java data types:
* has eight primitive types <- variables of these types
are NOT objects! These types are NOT classes!
* ...and the rest are classes!
* 4 of the primitive types are integer types:
int short long byte
* unlike C++, the ranges of these are part of the Java *language*
definition
* 2 are floating-point number types
float double
* float: 7 significant decimal digits
* double: 14 (I think) significant decimal digits
* double is double-precision floating point
* unless you have a good reason, use double instead of float
* character type char
Unicode! see course text for more!!
'a' is a char, Unicode CAN add some compexity...
* Boolean-type boolean <---- NOT integer-based...!
=====
NOTE this! it is an ERROR to treat a boolean like an int in Java!
=====
boolean literals in Java: true false
a separate and non-numeric type!
can't set a boolean variable to an int,
control structures that expect a boolean expression
will not accept a non-boolean expression in its place!
=====
* reminder: named constants use final instead of const in their
declarations,
and typically make it static (one copy only) when it is
a data field named constant
(and you decide if it is visible to the user-world
by making it either public or private)
=====
* operators -- a LOT of overlap between C++ and Java
+ - * /
% modulo
++ -- += -= *= /=
&& short-circuit boolean and [NOT the keyword and ]
|| short-circuit boolen or [NOT the keyword or ]
== and != also -- BUT!!!
== for primitive type values is what you expect --
do they have equivalent values?
== for OBJECTS (any instance of a class), you need to be CAREFUL;
== for objects is asking if the references of those two
objects are the same -- do they reference the same OBJECT in
memory;
====
ASIDE - FUN FACT -
* in the jshell, you can type in a class to use it!
if it exists in the current directory, you can bring in its
code using /open and the source code file name
If I have GameDie.java in the directory where I started jshell,
then
/open GameDie.java
...and now I can use GameDie in that jshell
=====
...SO many classes -- if you would like to test if two
instances are EQUIVALENT in value --
declare an equals method
String has this!
"die".equals("die")
=====
* a public static member of class -- either a data field or method --
can be accessed in a number of ways,
the most classic is to precede it by the name of the class it is
a member of;
So, the Math class has a method sqrt that is static,
and I can call it using
Math.sqrt(34)
=====
* operator precedence chart for Java is Table 3.4 on p. 61 of
course text
---but use parentheses to make operation meanings clear, please!!
=====
* String class in Java
* yes, "double quoted thing" IS a String OBJECT
* String has MANY methods! see the Java API, class String
* weird bit: String instances are IMMUTABLE
once you have created a String instance, you CANNOT change
what is in it!
* this is amazingly not a problem that often --
when it is, use a StringBuffer instead of a String
=====
Simple I/O!!!
* we've seen System.out.println(a_str_expr);
* here's some simple interactive input:
Scanner is a class in package java.util
(sometimes to use a java.util class, you need to import it:
import java.util.*; // imports all the classes in that package
)
// attach a Scanner object to standard input
Scanner myInny =- new Scanner(System.in);
// to read something in, of a given type,
// you use the appropriate next method --
// nextLine nextInt nextDouble and more!
=====
* Arrays in Java!
an array in Java IS AN OBJECT.
so it has the ability to remember its size!!!!!
int[] a; // a is a reference to an int array
int b[]; // b "
a = new int[100]; // a now references an int array object of size 100
b = new int[3]; // b " 3
* also note: you can use the length DATA FIELD to get the
number of elements in an array
in jshell:
a.length == 100
b.length == 3
* you CANNOT reference outside of an array's bounds in Java --
you'll get an Exception!
=====
* what, you want something like a C++ vector in Java?
Try the Java ArrayList class!
ArrayList<desiredType> name;
ArrayList<desiredType> name = new ArrayList<desiredType>();
ArrayList has methods such as:
add
size
get
remove