Videos by: Mosh Hamedani
Link: https://www.bilibili.com/video/BV19J411t7dD
1 Getting Started
1.1 Installing Java
JDK: Java Development Kit
1.2 Anatomy of a Java Program
Function
1 | void sendEmail(){ |
every java program should have at least one function: main()
function belongs to class
Class
container for related functions
1 | class Main{ |
method: a function that is part of a class
Access Modifier
public private etc.
1 | public class Main{ |
Name Convention
Classes: pascal PascalNamingConvention
Methods: camel camelNamingConvention
1.3 Your First Java Program
Package
Group related classes。
Structure
- Project
- src :source folder
- com.package (base package)
- class Main
- com.package (base package)
- src :source folder
1 | package com.ryanhe; // package statement |
1.4 How Java Code Gets Executed
Two steps: compilation execution
Compilation
In cmd: javac Main.java
Get the file: Main.class
Execution
Java Runtime Environment (JRE)
In cmd: java com.<package name>.Main
1.5 5 Interesting Facts about Java
- Four editions of Java
- Standard Edition SE
- Enterprise Edition EE:
- large scale and distributed system
- fault tolerant distributed multi-tiered software
- Micro Edition ME:
- mobile devices
- Java Card:
- smart card
2 Types
2.1 Variables
1 | package com.ryanhe; // package statement |
2.2 Primitive Types
- Primitive for storing simple values
- Reference for storing complex objects
Type | Bytes | Range |
---|---|---|
byte | 1 | [-128,127] |
short | 2 | [-32K,32K] |
int | 4 | [-2B,2B] |
long | 8 | |
float | 4 | |
double | 8 | |
char | 2 | A,B,C…(UNICODE) |
boolean | 1 | true/false |
1 | package com.ryanhe; // package statement |
2.3 Reference Types
sout + Tab
can easily call out System.out.println();
1 | package com.ryanhe; // package statement |
2.4 Primitive VS. Reference
Primitive
1 | package com.ryanhe; // package statement |
Reference
1 | package com.ryanhe; // package statement |
point1 and point2 stores the address, so the 2 variables share the same value.
2.5 Strings
1 | package com.ryanhe; // package statement |
2.6 Escape Sequences
\"
\\
\n
\t
1 | package com.ryanhe; // package statement |
2.7 Arrays
1 | package com.ryanhe; // package statement |
2.8 Multi-dimensional Arrays
1 | package com.ryanhe; // package statement |
2.9 Constants
1 | package com.ryanhe; // package statement |
2.10 Arithmetic Expressions
1 | package com.ryanhe; // package statement |
2.11 Order of Operations
1 | package com.ryanhe; // package statement |
2.12 Casting
Implicit Casting
1 | package com.ryanhe; // package statement |
- create an anonymous variable
- copy the value of x to this memory space
- add the two numbers together
Explicit Casting
1 | package com.ryanhe; // package statement |
Explicit casting only happens between compatible variables.
We cannot cast a string to a number.
String to numbers
1 | package com.ryanhe; // package statement |
2.13 The Math Class
1 | package com.ryanhe; // package statement |
2.14 Formatting Numbers
Factory Method
getCurrencyInstance()
Rename variables
- refactor -> rename
shift
+F6
Method Chaining
1 | NumberFormat.getPercentInstance().format(0.1) |
1 | package com.ryanhe; // package statement |
2.15 Reading Input
1 | package com.ryanhe; // package statement |
2.16 Project: Mortgage Calculator
Mortgage Calculation Formula
Premise: the same mortgage for each month
Principal $P$
Monthly interest rate $r$
Period(months) $n$
The formula: $M=P\frac{r(1+r)^n}{(1+r)^n-1}$
Proof:
Remaining Mortgage
The first month: $P(1+r)-M$
The second month: $(P(1+r)-M)(1+r)-M=P(1+r)^2-M(1+1+r)$
The third month: $P(1+r)^2-M(1+1+r)](1+r)-M=P(1+r)^3-M(1+(1+r)+(1+r)^2)$
$\cdots$
The n-th month: $P(1+r)^n-M(1+(1+r)+\cdots+(1+r)^{n-1})=0$
My Answer
1 | package com.ryanhe; |
Solution
1 | final byte MONTHS_IN_YEAR = 12; |
The usage of the final variables is to avoid Magic Number.
Magic Number
In wikipedia:
- Unique values with unexplained meaning or multiple occurrences which could (preferably) be replaced with named constants
- A constant numerical or text value used to identify a file format or protocol; for files, see List of file signatures
- Distinctive unique values that are unlikely to be mistaken for other meanings (e.g., Globally Unique Identifiers)
Here the magic number is the first meaning.
A number without name is hard for others to understand or correct your code.
So it should be replaced by constants.
3 Control Flow
3.1 Comparison operators
Boolean Expression
x == y
x != y
x <= y
3.2 Logical Operators
1 | package com.ryanhe; |
3.3 If Statements
1 | package com.ryanhe; |
3.4 Simplifying If Statements
1 | package com.ryanhe; |
3.5 The Ternary Operator
1 | package com.ryanhe; |
3.6 Switch Statements
1 | package com.ryanhe; |
3.7 Exercise : FizzBuzz
My Answer
1 | package com.ryanhe; |
Solution
Use one if statement -> Avoid nested structure
3.8 For Loops
1 | package com.ryanhe; |
3.9 While Loops
1 | package com.ryanhe; |
3.10 Do..While Loops
1 | package com.ryanhe; |
3.11 Break and Continue
1 | package com.ryanhe; |
3.12 For-Each Loop
The disadvantage of For-each loop: It cannot iterate from the end to the beginning.
3.13 Improve the Mortgage Calculator
My Answer
1 | package com.ryanhe; |
Solution
year is no more than 30, so we can use
byte year
if there is a
break
in the if statement, we can delete the uselesselse
.
4 Clean Coding
4.1 Creating Methods
1 | package com.ryanhe; |
4.2 Refactoring
Refactoring
Changing the structure of the code without changing its behavior.
- Repetitive patterns on the code
- Lines that are highly related
4.3 Extracting Methods
The calculateMortgage
1 | public static double calculateMortgage( |
4.4 Refactoring Repetitive Patterns
1 | package com.ryanhe; |
4.5 Payment Schedule
Remainig Loan Balance Formula
Premise: the same mortgage for each month
Principal $P$
Monthly interest rate $r$
Period(months) $n$
Number of payments made $c$
The formula: $B=P\frac{(1+r)^n-(1+r)^c}{(1+r)^n-1}$
Refactoring
Main Menu -> Refactor -> Extract -> Method
Solution
1 | package com.ryanhe; |
4.6 Summary
Keep your methods short
- method: 5-10 lines, no more than 20 lines.
Extract repetitive patterns
Extract highly related statements
5 Debugging and Deploying Applications
5.1 Types of Errors
- Compile-time Errors
- grammar
- syntax
- Run-time Errors
- Debugger
5.2 Common Syntax Errors
don’t forget to specify the type
semicolon
parenthesis
double quotes of String
misspell (case sensitive)
do not use the reserve key words
misuse
=
and==
5.3 Debugging Java Applications
break point: ctrl
+F8
dubug: shift
+F9
add watch
5.4 Packaging Java Applications
console or command line appilcation
JAR file (Java archieve)
File -> Program Structure -> Artifacts -> +
-> JAR -> from modules with dependencies
Build -> Build Artifacts
Module is another level of abstraction above package
In command line:
1 | java -jar <jar file name> |