Classes and Objects
Review
public static int getMinIndex(int[] values) {
int minValue = Integer.MAX_VALUE; int minIndex = -1;
for(int i=0; i<values.length; i++) if (values[i] < minValue) { minValue = values[i]; minIndex = i;
}
return minIndex;
}
public static int getSecondMinIndex(int[] values) { int secondIdx = -1; int minIdx= getMinIndex(values);
for(int i=0; i<values.length; i++) { if (i == minIdx) continue;
if (secondIdx == -1 || values[i] < values[secondIdx]) secondIdx = i;
} return secondIdx;
}
• What happens if values = {0}? values = {0, 0}? values = {0,1}?
• Array Index vs Array Value
int[] values = {99, 100, 101};
System.out.println(values[0] ); // 99
Values
Indexes 0 1 2
• Curly braces { … } after if/else, for/while
for (int i = 0; i < 5; i++)
System.out.println(“Hi”); System.out.println(“Bye”);
• What does this print?
• Variable initialization
int getMinValue(int[] vals) { int min = 0; for (int i = 0; i < vals.length; i++) {
if (vals[i] < min) { min = vals[i]
}
}
}
• What if vals = {1,2,3}? Problem?
• Set min = Integer.MAX_VALUE or vals[0]
• Variable Initialization – secondMinIndex
int minIdx = getMin(vals) int secondIdx = 0;
for (int i = 0; i < vals.length; i++) { if (i == minIdx) continue; if (vals[i] < vals[secondIdx]) secondIdx = i;
}
• What if vals = {0, 1, 2}?
• See solutions
Defining a method inside a method
public static void main(String[] arguments) { public static void foobar () {
• Use System.out.println throughout your code to see what it’s doing
for ( int i=0; i< vals.length; i++) {
if ( vals[i] < minVal) {
System.out.println(“cur min: ” + minVal); System.out.println(“new min: ” + vals[i]); minVal = vals[i];
}
}
Debugging Notes 2
• Formatting
• Ctrl-shift-f is your friend
for (int i = 0; i < vals.length; i++) { if (vals[i] < vals[minIdx]) {
minIdx=i;} return minIdx;}
• Is there a bug? Who knows! Hard to read
Object oriented programming
Defining Classes
Using Classes
References vs Values
Static types and methods
Object oriented programming
Defining Classes
Using Classes
References vs Values
Static types and methods
Object orien ed pr
• Represent the real world
Object orien ed pr
• Represent the real world
Name
Sex
Weight
Decibels
# poops so far
Object Orien ed Pr
• Objects group together
– Primitives (int, double, char, etc..)
– Objects (String, etc…)
String name boolean isMale double weight
double decibels int numPoops
• Why not just primitives?
// little baby alex String nameAlex; double weightAlex;
// little baby david String nameDavid; double weightDavid;
• Why not just primitives?
// little baby alex String nameAlex; double weightAlex;
// little baby david String nameDavid; double weightDavid;
// little baby david
David2?
String nameDavid2;
double weightDavid2; Terrible
• Why not just primitives?
// little baby alex String nameAlex; double weightAlex;
// little baby david String nameDavid; double weightDavid;
// little baby david
David2?
String nameDavid2;
double weightDavid2; Terrible
500 Babies? That Sucks!
Baby1
496 more
Babies
Baby1 Baby2 Baby3 Baby4 …
Defining classes
Class - overview public class Baby { String name; boolean isMale; double weight; double decibels; |
|
int numPoops = 0; |
Class Definition |
void poop() {
numPoops += 1;
System.out.println(“Dear mother, ”+
“I have pooped. Ready the diaper.”); }
}
Baby myBaby = new Baby();
Instance
Let’s declare a baby!
public class Baby {
}
Let’s declare a baby!
public class Baby {
fields
methods
}
• Class names are Capitalized
• 1 Class = 1 file
• Having a main method means the class can be run
public class Baby {
TYPE var_name;
TYPE var_name = some_value;
Baby fields
public class Baby { String name; double weight = 5.0; boolean isMale; int numPoops = 0;
Baby Siblings?
public class Baby { String name; double weight = 5.0; boolean isMale; int numPoops = 0; XXXXX YYYYY;
Baby Siblings?
public class Baby { String name; double weight = 5.0; boolean isMale; int numPoops = 0; Baby[] siblings;
Ok, let’s make this baby!
Baby ourBaby = new Baby();
But what about it’s name? it’s sex?
public class CLASSNAME{
CLASSNAME ( ) {
}
CLASSNAME ([ARGUMENTS]) {
}
}
CLASSNAME obj1 = new CLASSNAME();
CLASSNAME obj2 = new CLASSNAME([ARGUMENTS])
• Constructor name == the class name
• No return type – never returns anything • Usually initialize fields
• All classes need at least one constructor
– If you don’t write one, defaults to
CLASSNAME () {
}
public class Baby { String name; boolean isMale;
Baby(String myname, boolean maleBaby){ name = myname; isMale = maleBaby;
}
}
Baby methods
public class Baby {
String name = “Slim Shady”; ...
void sayHi() {
System.out.println(
“Hi, my name is.. “ + name);
}
}
public class Baby { String weight = 5.0;
void eat(double foodWeight) { if (foodWeight >= 0 && foodWeight < weight) {
weight = weight + foodWeight;
}
}
}
public class Baby { String name; double weight = 5.0; boolean isMale; int numPoops = 0; Baby[] siblings;
void sayHi() {…} void eat(double foodWeight) {…}
}
Using classes
// class Definition public class Baby {…}
// class Instances
Baby shiloh = new Baby(“Shiloh Jolie-Pitt”, true);
Baby knox = new Baby(“Knox Jolie-Pitt”, true);
• Object.FIELDNAME
Baby shiloh = new Baby(“Shiloh Jolie-Pitt”, true)
System.out.println(shiloh.name);
System.out.println(shiloh.numPoops);
• Object.METHODNAME([ARGUMENTS])
Baby shiloh = new Baby(“Shiloh Jolie-Pitt”, true)
shiloh.sayHi(); // “Hi, my name is ...” shiloh.eat(1);
References vs Values
Primitives vs References
• Primitive types are basic java types
– int, long, double, boolean, char, short, byte, float
– The actual values are stored in the variable
• Reference types are arrays and objects
– String, int[], Baby, …
• Variables are like fixed size cups
• Primitives are small enough that they just fit into the cup
int double char boolean
• Objects are too big to fit in a variable
– Stored somewhere else
– Variable stores a number that locates the object
• Objects are too big to fit in a variable
– Stored somewhere else
– Variable stores a number that locates the object
• The object’s location is called a reference • == compares the references
Baby shiloh1 = new Baby(“shiloh”);
Baby shiloh2 = new Baby(“shiloh”); Does shiloh1 == shiloh2?
• The object’s location is called a reference • == compares the references
Baby shiloh1 = new Baby(“shiloh”);
Baby shiloh2 = new Baby(“shiloh”); Does shiloh1 == shiloh2?
Baby shiloh1 = new Baby(“shiloh”);
Baby shiloh2 = new Baby(“shiloh”);
shiloh1 shiloh2
Baby mybaby = new Baby(“davy”, true) mybaby.name = “david”
Baby mybaby = new Baby(‘davy’, true) mybaby.name = ‘david’
• Using = updates the reference.
baby1 = baby2
baby1 baby2
• Using = updates the reference.
baby1 = baby2
• using [ ] or
– Follows the reference to the object
– May modify the object, but never the reference
• Imagine
– Following directions to a house
– Moving the furniture around
• Analogous to
– Following the reference to an object
– Changing fields in the object
void doSomething(int x, int[] ys, Baby b) { x = 99; ys[0] = 99;
b.name = “99”;
}
...
int i = 0; int[] j = {0};
Baby k = new Baby(“50”, true); doSomething(i, j, k);
i=? j=? k=?
static types and methods
static
• Applies to fields and methods • Means the field/method
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.