0% found this document useful (0 votes)
6 views89 pages

Java Tutorial For Beginners (English) (DownloadYoutubeSubtitles - Com)

Java Tutorial for Beginners [English] [DownloadYoutubeSubtitles.com]

Uploaded by

zhangye1208100
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
6 views89 pages

Java Tutorial For Beginners (English) (DownloadYoutubeSubtitles - Com)

Java Tutorial for Beginners [English] [DownloadYoutubeSubtitles.com]

Uploaded by

zhangye1208100
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd

Hi!

My name is Mosh and I'm gonna be your


instructor in this Java course. In this

course, you're gonna learn everything you


need to get started programming in Java.

We'll start off by installing all the


necessary tools to build Java

applications then you're gonna learn


about the basics of Java you'll learn

how Java code gets executed you'll learn


how to build simple algorithms and

throughout this course I'm gonna share


with you lots of tips and shortcuts from

my years of experience I'll teach you


how to write good code like a

professional developer so we'll end up


watching this course you will have a

solid foundation in Java and be ready to


learn about advanced Java features I've

designed this course for anyone who


wants to learn Java if you're a beginner

don't worry I'll make Java super simple


and hold your hands through this entire

course you're not too old or too young


you'll write your first Java program in

minutes
my name is mosh I'm a software engineer

with two decades of experience and I've


taught over 3 million people how to code

and how to become professional software


engineers I have a coding school at code

with mass comm where you can find plenty


of courses that help you take her coding

skills to the next level I hope you'll


stick around and learn this beautiful

and powerful programming language and


now award from this video sponsor as

someone who runs an online business I


cannot stress enough the importance of

staying safe online which is why I was


so excited when dashlane reached out to
me if you don't know - Lane is the
password manager and VPN recommended by

Apple and Google and it's a fantastic


safeguard for keeping your information

secure it's completely free to use for


your first device so head over to - Ling

comm / marché - give it a go if you want


to upgrade to the premium to get VPN or

dark web monitoring you can use the


promo code mosh to get 10% off sign up

for - 9 today and keep yourself safe


online now back to the course

in this java tutorial we're going to


download and install the necessary tools

to build java applications so open up


your browser and search for jdk download

jdk is short for Java development kit


and it's basically a software

development environment for building


Java applications it has a compiler it

has a bunch of code that we can reuse it


has a Java Runtime environment at a

bunch of other stuff so over here you


can see this page on Oracle com Java se

which is short for Java standard edition


click on this now over here click on

this icon now on this page we can see


Java development kit for various

platforms like Linux Mac OS and Windows


here I'm on a Mac so I'm gonna download

this dmg file over here now before we do


this first we need to accept the license

agreement all right now let's download


the dmg let me open this we're gonna say

this package let's double click this and


here we see this installation wizard

it's super easy just click continue and


install you have to enter your

computer's password and then alright


done beautiful so we can move this to

trash now the next piece of software we


need is a code editor there are so many

cool editors for building Java


applications the popular ones are

NetBeans Eclipse and IntelliJ in this


Java course I'm gonna use IntelliJ but

if you have a favorite editor feel free


to use that to take this course that's

perfectly fine so let's search for


IntelliJ download all right you can see

download IntelliJ IDEA click on this


link over here download the community

edition which is absolutely free and


it's more than enough for this course so

download all right now let's drag and


drop this onto the Applications folder

beautiful alright we've installed all


the necessary tools to build Java

applications so next we're gonna look at


the anatomy of a Java program

in this java tutorial we're gonna look


at the anatomy of java programs the

smallest building block in java programs


are functions

if function is a block of code that


performs a task as a metaphor think of

the buttons on the remote control of


your TV each button performs a task

functions in programming languages are


exactly the same for example we can have

a function for sending emails to people


we can have a function for converting

someone's weight in pounds to kilograms


we can have a function for validating

users input and so on now let's see how


we can code a function in Java we start

by specifying the return type of that


function some functions return a value
like a number at day time and so on
other functions don't return anything so

the return type of this functions is


void void is a reserved keyword in Java

and that's why I've coded that in blue


here now after the return type we have

the name of our function so here we


should give our function a proper

descriptive name like send email this


name clearly identifies the purpose of

this function okay now after the name we


have a pair of parentheses and inside

these parentheses we add the parameters


for this function we use these

parameters to pass values to our


function for example our send email

function should have parameters like who


is the receiver what is the subject of

this email what is the content of this


email and so on now in this tutorial

we're not gonna worry about parameters


we'll look at them in the future

now after the parentheses we had a pair


of curly braces and inside these braces

we write the actual Java code now one


thing I want you to pay attention to

here is that in Java we put the left


brace on the same line where we define

our function in other programming


languages like C sharp it's more

conventional to put the left brace on a


new line but we don't do that in Java so

we put the left brace on the same line


where we define our function now every

Java program should have at least one


function and that function is called

main so main is the entry point to our


programs whenever we execute a Java

program the main function gets called


and the code inside this
function gets executed okay now these
functions don't exist on their own they

should always belong to a class so a


class is a container for one or more

related functions basically we use these


classes to organize our code just like

how products are organized in a


supermarket in a supermarket we have

various sections like vegetables fruits


cleaning products and so on each section

contains related products by the same


token a class in java contains related

functions now every Java program should


have at least one class that contains

the main function can you guess the name


of that class its main so this is how we

define a class in Java we start with a


class keyword then we give our class a

proper descriptive name and then we add


a pair of curly braces now the functions

that we define in between these curly


braces belong to this class and more

accurately we refer to them as methods


so a method is a function that is part

of a class in some programming languages


like Python we can have a function that

exists outside of a class so we call it


a function but when a function belongs

to a class we refer to it as a method of


that class okay now in Java all these

classes and methods should have an


access modifier an access modifier is a

special keyword that determines if other


classes and methods in this program can

access these classes and methods we have


various access modifiers like public

private and so on now most of the time


we use the public access modifier so we

put that in front of our class and


Method declarations so this is the basic

structure of a Java program at a minimum


we have a main class and inside this

main class we have the main method now


you might be curious why we have a

capital m in the name of this class


because in Java we use different

conventions for naming our classes and


our methods to name our classes we use

the Pascal naming convention and that


basically means the first letter of

every word should be uppercase in


contrast to name our methods we use the

camel naming convention and that means


the first letter of every word should be

operate
case except the first wart so that is

why we have a capital m in the name of


this class alright now that you

understand the anatomy of a Java program


let's create a new Java project and see

all these building blocks in action in


this Java tutorial you're gonna learn

how to write and execute your first Java


program so let's open IntelliJ IDEA here

on the home screen let's create a new


project alright on the left side select

java and make sure project sdk is not


black so earlier we downloaded jdk or

Java development kit version 12 that is


why JDK version 12 is selected here if

you don't see that make sure to select


it from this drop-down list alright now

let's click on next on this page select


create project from template so we're

gonna create a command line application


which is an application that we can run

from the command line it doesn't have a


graphical user interface or a GUI
now I know command line application is
not as exciting as an application with a

graphical user interface like a mobile


app or a desktop app but trust me

building an application with a graphical


user interface is very complicated so

for now we're just gonna build command


line applications to learn Java properly

once you learn Java properly then you


can learn about building desktop or

mobile applications with Java all right


now let's click on next on this page we

have to give our project a name let's


call it hello world now over here you

can see the location of this project so


it's inside the idea projects folder now

right below that you can see the base


package which is set to comm that code

with Marsh on my machine and your


mission is probably gonna be comm dot

package what is this well here we talked


about classes and methods I told you

that a class is a container for related


methods so we use classes to organize

our code by the same token we have a


concept called package and we use a

package to group related classes so as


our applications grow we're gonna end up

with hundreds or even thousands of


classes so we should properly organize

this class
us into packages now by convention the

base package for a Java project is the


domain name of your company in Reverse

so my website is code with mass comm


that is why I'm gonna set the base

package for this project to come that


code with Marsh now it doesn't mean that

you should have an actual domain


registered on an Internet this is just a
way to create a namespace for our
classes so now every class that we

create in this project will belong to


this package we're gonna talk about

packages in more detail in the future so


for now just type a base package for

your project it can become that your


name or whatever it doesn't really

matter all right now let's go forward


alright here's our first Java project

now this code editor might look a little


bit intimidating at first but trust me

it's really easy and you're gonna learn


about it throughout this course on the

left side we have the project panel


where we can see all the folders and

files in a project for example on the


top we have the hello word project

inside this project we have the source


folder where we have the source code of

a project now in this folder we have


another folder that is calm that code

with Marsh that is the name of our base


package and in this package we have this

class main so you can see this main file


opened on the right side here now look

at the name of this file its main the


Java so all Java files should have the

Java extension okay now let's collapse


the project panel by clicking on this

icon that is better so see what we have


here on top of this file we have the

package statement and this is used to


specify what package this class belongs

to so the main class that we have here


belongs to this package now this package

statement is terminated by semicolon so


in Java wherever we have a statement we

should terminate that statement with a


semicolon this is exactly like c-sharp

or C++ now below this package statement


we have our main class exactly like what

you saw in the previous tutorial so we


have public class main with a pair of

curly braces inside this class we have


our main method so it's a public method

which may
it's accessible from other parts of this

program it's static we haven't talked


about static metals yet we'll talk about

them in the future for now just remember


that the main method in your program

should always be static the return top


of this method is void which means this

method is not gonna return a value and


here in parentheses we have one

parameter for this function we can use


these parameters to pass values to our

program again we'll look at this in the


future now right after this parameters

as you can see the left brace and this


is where we write the code in this

method now by default we have this line


prefix with two slashes this indicates a

comment we use these comments to explain


our code to other people so these

comments don't get executed now let's


remove this comment and write a bit of

code to print something on the terminal


so here we're gonna use the system class

in Java so capital S system here in this


tooltip you can see the system class is

defined in this package Java dot Lang or


language also look at this icon on the

left side this indicates a class now


inside this class we have various

members we can use the dot operator to


see the members defined in the system
class now the member that we're gonna
access is out look at the icon of this

member it's F which is short for field


you're gonna talk about fields in the

future when we talk about classes and


object-oriented programming now what is

interesting here is the type of this


field and you can see that on the right

side that is print string so print


string is another class that is defined

in Java so once again we use the dot


operator to look at the methods or

members defined in the print stream


class the method we're gonna use is

print Ln which is short for line look at


the icon for this method so M indicates

a method now you press ENTER and


IntelliJ automatically adds these

parentheses as well as a semicolon so


now with the code on line six we're

calling or executing the print line


method earlier I told you that inside

this parenthesis we can pass values to


our methods here we want to print the

hello word
on the terminal so let's type double

quotes and inside these quotes right


hello world so hello word is textual

data in Java whenever we deal with


textual data we should always surround

them with double quotes now we say we


have his string so a string is a

sequence of characters all right so


we're done with our first program now to

execute this we can click on this icon


on the toolbar look at the shortcut on

Mac it's ctrl + R I always prefer to use


shortcuts because they're faster so ctrl

+ R now IntelliJ is building our


application and we can see the result in
this little terminal window so here's
our hello work message so that was our

first Java program next I'm going to


explain how Java code gets executed

under the hood


hey Marsh here I just wanted to let you

know that you really don't have to


memorize anything in this course I've

put together a comprehensive cheat sheet


with summary notes that you can download

below this video so I've done my best to


create the best possible Java course and

I would really appreciate it if you


support me by liking and sharing this

video on the social networks that you


use often also be sure to subscribe and

enable the notifications so next time I


upload a video you'll get notified thank

you so much and let's continue watching

all right now let's see what exactly


happens under the hood the moment we run

a Java program in IntelliJ


there are basically two steps involved

here compilation and execution in the


compilation step IntelliJ uses the Java

compiler to compile our code into a


different format called Java bytecode

this Java compiler comes with the Java


development kit that we downloaded at

the beginning of the course let me show


you so here we can right click on this

main the Java and in this context menu


we have an item called open in terminal

it's down below unfortunately it's not


visible in my recording window it's

called open in terminal on Mac and


probably open in command prompt on

Windows so let's open that we get this


terminal window or command prompt on
windows here we're currently inside of
this folder code with Maj that is where

we have our main the Java file now we


can invoke the Java compiler like this

Java C and pass the name or Java file as


an argument so main the Java if you're

on Mac or Linux make sure to spell this


with a capital M because these operating

systems are case-sensitive so enter now


let's look at the content of this folder

on Mac or Linux we can type LS on


windows we type dir so let's take a look

in this folder now we have a new file


main class this is the bytecode

representation of this Java file now let


me use IntelliJ to run our Java program

this class file gets stored somewhere


else let me show you so back to the

project panel here in our project we


have this source folder where we

our source code and we have this out


folder where we have the result of the

compilation so inside this folder we


have production inside this we have

hello world the same name as our project


inside hello world we have comm which is

the name of our top level package inside


this package we have a sub package that

is code with Marsh and here we have our


main dat class file so this was the

compilation step now this Java bytecode


that we have in this file is platform

independent and that means it can run on


Windows Mac Linux or any operating

systems that has a Java runtime


environment if you go to [Link] slash

download we can download java or more


accurately java runtime environment for

various operating systems this Java


Runtime environment has a software

component called Java Virtual Machine or


JVM this JVM takes our Java bytecode and

translates it to the native code for the


underlying operating system so if you're

on Windows machine this Java Virtual


Machine converts or Java bytecode into

the native code that windows can


understand this architecture is the

reason why Java applications are


portable or platform independent we can

write a Java program on a Windows


machine and execute it on Linux Mac or

any other operating systems that have a


Java runtime environment

c-sharp and python also have the same


architecture that's why they are

platform independent as well now let me


show you how to invoke this java virtual

machine to run a Java program so back to


this terminal window let me expand this

currently we are inside of this folder


code with Marsh and in this folder we

have this class file now let's go one


level up so CD dot dot and one more time

so now we are inside the source folder


we can invoke Java Virtual Machine like

this they type Java and then we type the


full pass to our main class file what do

I mean by that well earlier we defined


this package comm that code with Marsh

and this class the main class is part of


this package so the full path

this class is calm dot code with Marsh


dot main make sure to use a capital M

here because this is case sensitive now


when we press ENTER Java will look at

this folder calm inside this folder it


will look at this other folder code with
Marsh and then it will find main that
class in that folder it will load the

bytecode and convert it to the native


code for the operating system we are

using so take a look so it executed our


program hello world beautiful let me run

a program using IntelliJ all these steps


are hidden from us we don't see the

compilation or execution steps

so you have seen Java in action now let


me tell you five interesting facts about

Java Java was developed by James Gosling


in 1995 at Sun Microsystems which was

later acquired by Oracle in 2010 it was


originally called oke after an oak tree

that stood outside Gosling's office


later it was renamed to green and was

finally renamed to Java inspired by Java


coffee that's why its logo looks like

this we have four editions of Java for


building different kinds of applications

we have Java standard edition this is


the core Java platform which is what

we're using in this course it contains


all of the libraries that every Java

developer must learn


we have Java Enterprise Edition which is

used for building very large-scale and


distributed systems it's built on top of

java standard edition and provides


additional libraries for building fault

tolerant distributed multi-tiered


software we have java micro Edition

which is a subset of Java standard


edition designed for mobile devices so

it has libraries specific to mobile


devices and finally we have Java card

which is used in smart cards the latest


version of Java is Java standard edition
12 which was released just a few months
ago in March 2019 Java has close to 9

million developers worldwide currently


about 3 billion mobile phones run Java

as well as 120 million TV sets and every


blu-ray player according to [Link]

the average salary of a Java developer


is just over $100,000 per year in the US

so as we can see Java is everywhere


which means more opportunities for you

to get hired as a professional


programmer now let me give you a quick

overview of how I've structured this


course so you can get the most out of it

this course is the first part of my


complete four-part Java series each part

is about three to four hours long so it


can easily complete it in a day or two

in the first part which is what you're


watching you're gonna learn the

fundamentals of programming with Java in


the next section you'll learn about the

type system in Java you will learn how


to work with various types such as

purrs strings boolean's and arrays by


the end of this section you will build a

mortgage calculator as your first Java


project will be improving this

calculator bit by bit routers course


next you will learn about control flow

statements that are used to build


algorithms we'll be talking about

various types of conditional statements


and loops later in this section we'll

add data validation to our mortgage


calculator to force the user to enter

valid values at this point you'll be


able to build basic algorithms and

that's great
but being a good programmer requires
knowing how to write good code code that
is clean and expressive that's what

separates an outstanding programmer from


an average programmer so in the

following section we'll talk about clean


coding I will show you various

techniques that professional programmers


use to make their code clean and

maintainable and finally in the last


section you will learn how to find and

fix errors in your java programs as well


as how to package them for deployment so

others can use them so the materials in


the first part will give you a solid

foundation on how to start programming


in Java in the second part we'll talk

about object oriented programming which


is a style of programming use in most if

not all Java applications whether you


want to use Java to build web mobile or

desktop applications you need to


understand object-oriented programming

well because otherwise you're going to


constantly hit obstacles in the third

part we're going to talk about core Java


API is or application programming

interfaces you'll learn about many of


the useful classes in the standard Java

library and finally in the last part


we'll be looking at the advanced

features in Java such as streams threads


database programming and so on so I hope

you're gonna join me on this journey and


master Java the most popular programming

language behind millions of apps and


websites

you

intersection we're gonna look at the


fundamentals of programming in Java
you're gonna learn about variables and
constants primitive and reference types

you're gonna learn about casting or type


conversion you will learn how to work

with numbers strings and arrays and how


to read input from the user

once you learn all this I'm gonna give


you a project you're gonna build a

mortgage calculator on your own so make


sure to pay great attention to all the

materials you're gonna learn because


you're gonna use most of them in this

project are you ready now let's jump in


and get started in this tutorial we're

gonna talk about variables in Java we


use variables to temporarily store data

in computer's memory here is an example


imagine in this program you want to

store someone's age in the memory so we


declare a variable like this ant age

equals 30 so int or integer is the type


of this variable so in this variable we

can only store integers which are whole


numbers like 1 2 3 4 numbers that don't

have a decimal point now in Java we have


several different types I'm gonna talk

about them in the next tutorial so first


we specify the type of our variable then

we give it a name or a label this is


also called an identifier because we use

it to identify our variable this equal


sign is called the assignment operator

and 30 is the initial value that we are


assigning to this variable so we say on

line 6 we're initializing this variable


which means we're giving it an initial

value you always have to initialize our


variables before reading them so with

this line we're storing number 30


somewhere in computer's memory and we're

assigning this label to that memory


location now on line 7 instead of

printing hello world we can print the


value of the age variable take a look so

I'm gonna run this program using ctrl +


R there you go now we see 30 on the

terminal beautiful we can also change


the value of our variable so after we

initialize it per house we can change it


to 35 now when we run this program again

we see it 35 beautiful we can also


initialize multiple variables on the

same line but this is something that I


don't recommend because it makes your

code ugly and hard to read here is an


example we can declare another variable

like temperature and set it to 20 so


using a comma we can declare multiple

variables on the same line now even


though this is technically possible it's

not something that I recommend so it's


always better to declare one variable on

each line like this we can also copy the


value of one variable into another here

is an example let me delete these


variables and declare a new variable

called my age we set it to 30 and then


we declare another variable like her age

and we set it to my age so now when we


print her age we're gonna see 30 take a

look
so on line seven recapping the value of

this variable into this other variable


now one thing I want you to pay

attention to here is the convention I


have used for naming our variables as I

told you before this is called the


camelcase notation so we should
capitalize the first letter of every
word except the first word so in this

case the first word my it's all in


lowercase but the second word starts

with a capital letter so this is all


about declaring and initializing

variables in the next tutorial we're


going to talk about various types in

Java in this tutorial we're going to


talk about various types in Java

basically we have two categories of


types we have primitive types for

storing simple values and non primitive


types or reference types for storing

complex objects so in the category of


primitive types we have white which

takes one byte of memory and in one bite


we can store values from 128 to 127 now

the more bytes we have the larger


numbers we can store so next we have

short which takes two bytes and with


this we can store values up to 32,000

next we have integer which we have seen


before integers take four bytes of

memory and allow us to store values up


to two billion then we have long which

takes eight bytes and with this we can


store even larger numbers now all these

types are for storing whole numbers that


don't have a decimal point if you want

to store a number that has a decimal


point you have to use float or double

float takes four bytes double takes


eight bytes so obviously we double we

can store larger numbers next we have


char for storing a single character like

ABC and this chart I've take two bytes


so they support international letters

and finally we have boolean for storing


boolean values which can be true or
false just like yes or no in English now
let's take a look at a few examples

earlier we use an integer for storing


someone's age but as you learned

integers take four bytes and allow us to


store values up to two billion we don't

need four bytes of memory to store


someone's age all we need is one byte

because with one bite we can store


values up to 127 so I'm gonna change

this to byte that is better now let's


look at another example let's say we

want to store the number of times a


YouTube video has been watched so we

define an integer called views count


note that I'm always using meaningful

names for my variables because these


names help us understand what this code

does I've seen some people use variable


names like V or V 1 or n nobody knows

what these variables do so as a best


practice always use meaningful and

descriptive names for your variables so


views count we set this to a large

number like 1 2 3 4 5 6 7 8 9 now in


Java whenever you deal with a large

number like this you can use an


underscore to separate every three

digits just like how we use a comma in


our documents to make our numbers more

readable we can use an underscore in


Java so with integers we can store

values up to two billion but let's say


the number of times this video has been

watched is three billion so I had a


three here now we have a red on the line

that indicates an error


let me hover our mouse over it we see

this tooltip integer number too large so


we need to change the type of this

variable to long however the error is


still there what's going on here the

reason we're getting this error is that


by default Java sees these numbers as

integers so even though we have defined


the type of this variable as long Java

compiler sees this value as an integer


and he thinks this value is too large

for an integer to solve this problem we


need to add an L as a suffix or this

number we can use an uppercase or a


lowercase L but as you can see a

lowercase L kind of looks like a 1 so


it's better to use a capital L so these

are examples of whole numbers now let's


declare a variable for storing a number

with a decimal point so double price we


set this to 1099 obviously the double

variable is too large for storing the


price of a product so we can change this

to float that is better but you have a


compilation error here take a look

incompatible types required float but


found double the reason we're seeing

this error is that by default Java sees


these numbers with a decimal point as

double so even though we set the type of


this variable to float Java sees this

number as a double so just like how we


added a suffix to this number to

represent it as a long we need to add a


suffix here to represent this number as

a float and that suffix is F once again


we can use an upper case or lower case F

so these are examples of numbers now


let's store a character so char we call

it letter and we set it to a note that


we should always surround single
characters with single quotes and
multiple characters or strings with

double quotes
okay so char represents only one

character string represents a series of


characters and finally let's see an

example of a boolean so we define a


boolean variable called is eligible is

this person eligible for loan or not we


said this to true or false these are the

boolean values now note that all these


words coded in orange are reserved

keywords in Java
just like public static void class

package these are all reserved keywords


so we cannot use these reserved keywords

the name our variables classes and


methods in the last tutorial you learned

that we use primitive types to store


simple values like numbers boolean

values or single characters in contrast


use reference types to store complex

objects like data objects or mail


messages these are complex objects now

in Java we have eight primitive types


that you have seen before all the other

types are reference types let me show


you an example so here in this program

first I'm gonna declare a primitive type


let's say white age equals 30 now

declaring and initializing a reference


type is slightly different from

primitive type let me show you


so let's type date now here in this

tooltip box which is called intellisense


we can see various classes that have

date in their name so IntelliJ is


helping us complete our code by

suggesting these class names now here we


have a date class in this package Java
the util so this package contains a lot
of utility classes that are useful in a

lot of programs you also have a date


class in a different package Java SQL or

sequel which is used for programming


databases so this is the benefit of

packages we can have the same class but


in different packages they don't

conflict so packages create a namespace


for our classes okay now in this case if

we select the first date class and press


enter or tab IntelliJ automatically adds

this line for us import Java that you


till the date so because currently we

are in this package in order to use a


class from a different package we need

to import it so here we're importing the


date class in this package will talk

about packages in more detail in the


future so back to our date variable

let's give this variable a name collect


now now we set this here we need to use

the new operator to allocate memory for


this variable and this is one of the

differences between the primitive and


reference types when declaring primitive

types we don't need to allocate memory


memory is allocated and released by Java

Runtime environment but when dealing


with reference types we should always

allocate memory now we don't have to


release this memory Java Runtime

environment will automatically take care


of that so we use the new operator and

then repeat the name of our class in


this case date and then we add

parentheses followed by a semicolon in


this example this variable we have

defined here is an instance of the date


class so this class is defined template

or blueprints for creating new objects


new instances as another example we can

have a class called human and we can


have objects like John Bob Mary and so

on so an object is an instance of a
class now this object or this class

have members that we can access using


the dot operator so we can type now dot

and these are all the members defined in


this class or in this object for example

we have a method called get time and


this returns the time component of this

object this is another difference


between primitive types and reference

types these primitive types don't have


members so if you type age dot we don't

see anything these items you see here


are not members of age their code

snippets which allow us to quickly


generate code for example we can select

for I and this automatically generates


this block of code for us we'll talk

about this in the future so this age


variable is a primitive type it's not an

object it doesn't have any members and


that's why when we use the dot operator

we don't see anything here now let's


delete this line and instead print the

value of this data object so once again


we can type system this is a class so we

can use the dot operator to access its


members here we have out which is a

field and the type of this field is


print string which is another class in

Java so once again we can use a dot


operator and call the print line

function now let me show you a very cool


shortcut instead of typing all this we
can use one of these code snippets so we
type s oh you see and press tab and this

generates this piece of code for us all


right now let's pass our data object

here note that I have not surrounded


this variable with double quotes because

this is a string and if you run this


program we'll see now on the terminal

there you go
we don't want this you want the value of

our data object not a label so let's


remove the quotes I run the program

again so here's the current date I'm on


my machine I've learned a little bit

about the differences between the


primitive and reference types so you

know that we use primitive types for


storing simple values and reference

types for storing complex objects but


there's a very important difference

between these two categories of types in


terms of memory management and that's

what we're going to talk about in this


tutorial

so I'm going to declare a primitive


variable X and set it to 1 and then I'm

going to declare another variable like Y


and set it to X so in this example we

have two different variables x and y and


these two variables are at different

memory locations so they're completely


independent of each other in other words

if I change the value of X Y is not


going to get affected let me show you so

I'm gonna update X to 2 and then print Y


so syu t tab y let's take a look

so run as you can see Y is not affected


because x and y are completely

independent of each other however when


we use a reference time this behavior is
different
let's take a look so I'm gonna delete

all the code here in Java we have a


point class that is defined in this

package Java that awt so we press ENTER


and now we have this import statement on

the top beautiful let's declare a


variable like point 1 and set it to new

point here we can pass the initial


values for x and y so I'm gonna pass 1

and 1 so intelligent automatically adds


these labels x and y now just like

before I'm gonna declare another


variable point 2 and set it to point 1

and this is where things get interesting


when Java Runtime environment executes

line 8 first it's going to allocate some


memory to store this point object let's

see if the address of that memory


location is 100 then it's going to

allocate a separate part of the memory


and it's going to attach this label to

that memory location point 1 in that


memory location it's going to store the

address of our point object so this is


the critical difference between

primitive and reference types when we


declare a primitive variable like a byte

the value that we assigned to that


variable will be stored in that memory

location but when we use a reference


type like this point class our variable

is going to hold the ax


of that point object in memory not the

actual pointer object now look at line 9


here we're copying the value that we

have in this variable into this other


variable so that value as you learn is

not the point object is the address or


the reference to the point object in

memory that is why we refer to these


tiles as reference types because they

don't store the actual values they store


a reference to an object somewhere in

the memory so in this example point one


and point two are referencing the exact

same point object in memory we only have


one point object so these two variables

are not independent of each other


they're referencing the same object and

that means if I update this point object


through either of these variables the

changes will be visible to the other


variable I'm gonna show you so using the

first variable point one we're going to


update the value of x so we use the dot

operator and here we can see the members


of this object X on Y are both fields

which are variables that exist inside of


a class so we said X just like a regular

variable to a different value let's say


two now because point one and point two

are referencing the exact same object if


we print point two we're going to see

the change that we just made


take a look so S or ut tab let's print

point to run the program there you go


so the change was visible so remember

this reference types are copied by the


references whereas primitive types are

copied by their value and these values


are completely independent of each other

in this tutorial we're gonna look at


strings in Java so earlier in the course

we printed the hello world message on a


terminal this hello word that we have

here is a string or more accurately it's


a string literal
that means a string value now let's
extract this from here and store it in a

string variable so cut just before this


line we type string now look this string

class is defined in Java that Lang


package what is interesting is that we

don't have an import statement to import


this package or import this class

because this package is automatically


imported so we can use any classes that

are defined in this package now let's


declare a variable called message and

because this is a reference type we


should instantiate this variable using

the new operator so Neal string and here


in parenthesis we type our message hello

world however here we have this little


warning take a look new string is

redundant because in Java there is a


shorter way to initialize string

variables let me show you so instead of


using the new operator we simply set

this to our string literal now on the


surface this looks like a primitive type

because we are not using the new


operator but this is just a shorthand to

initialize a string variable strings are


reference types in Java but because we

use them often there is a short way to


create them

so now let's pass message to the print


line method and run our program you get

the exact same result as before


beautiful now let's look at a few

interesting things that you can do with


strings we can concatenate or joining a

string with another one using the plus


operator so here we can combine this

with another string with two exclamation


marks and here's the result now because
string is a class it has members that we
can access using the dot operator so we

can type message dot and these are all


the methods or functions do

find in the string class for example we


have this method here ends with and with

this we can check to see if our string


ends with a character or sequence of

characters for example here we can pass


their string to see if our message ends

with two exclamation marks


now instead of printing the message

let's print this expression here so


let's run the program we get true so

this method that we have called here


returns a boolean value which can be

true or false we also have another


method starts with let's take a look now

in this case we get false because our


message doesn't start with two

exclamation marks another useful method


is length so we can call that to get the

length of a string which is the number


of characters so message dot length take

a look
so in this string we have 13 characters

and this is useful in situations where


you want to check the length of the

input by the user for example you might


have a sign-up form with a username

field you can check the length of


someone's username and give them an

error if the username is longer than


let's say 20 characters pretty useful we

also have another method that is index


of and this returns the index of the

first occurrence of the character or the


string that we pass here for example if

you pass H the index of H is 0 so let's


run the program there you go we get 0 if

you pass e we get 1 because the index of


the first II in this message is 1 now

what if you pass a character or a string


that doesn't exist in this message let's

say Skye we get negative 1 so with this


method we can check to see if a string

contains certain characters or words or


sentences and so on another useful

method is replace and with this we can


replace one or more characters with

something else for example we can


replace any exclamation marks with

let's say a store so this replace metal


has two parameters one is target the

other is replacement and here we're


passing two values for these parameters

here's the first value here is the


second value and we have separated these

values using a comma now in programming


terms we refer to this values as

arguments a lot of programmers don't


know the difference between parameters

and arguments parameters are the holes


that we define in our methods arguments

are the actual values that we pass to


these methods so in this case target and

replacement or parameters but


exclamation mark and asterisk are

arguments now let's run this program and


see what happens so our explanation

marks are replaced with stars now what


is important here is that this method

does not modify our original string it


returns a new string so if we print our

original string right after SRU T tab


message you can see the original string

is not changed because in Java strings


are immutable
we cannot mutate them we cannot change
them so any methods that modify a string

will always return a new string object


okay we also have another useful method

to lowercase
let's take a look

so to lowercase converts all characters


to lowercase and once again you can see

that the original string is not affected


because this method returns a new string

okay we also have two uppercase and


another useful method is trim trim and

with this we can get rid of extra white


spaces that can be at the beginning or

the end of a string sometimes our users


type unnecessary spaces in form fields

so using the trim method we can get rid


of these white spaces let me show you so

I'm gonna add a couple of spaces before


and after our message now when we trim

it these white spaces are gonna get


removed take a look so here's the

original string you can see two white


spaces at the beginning and here's our

string after trimming so these are some


useful methods in the string class but

this glass has more methods than we


don't have time to cover in this lecture

but as we go through the course you're


gonna learn more about the string class

and other useful classes in Java third


times will include special characters in

our strings like a tab or a new line or


a backslash or double quotes so in this

tutorial I'm gonna show you how to


include these special characters in your

strings so here we have the string hello


Marsh let's say we want to surround

Marsh with double quotes now here's the


problem if we add a double quote here
Java compiler thinks this is the
termination of our string so it doesn't

stand what we have after that's why we


have a compilation error the fixes

problem we need to prefix this double


code with a backslash

so using this backslash we have escaped


the double quote now one more time let's

add backslash double code here now let's


run the program and see what we get so

we get hello Marsh in double quote


beautiful so double quote is one of

those special characters that you need


to be aware of another special character

is backslash let's say we want to store


the pass to a directory on a Windows

machine so that will look like this C


Drive

backslash windows backslash whatever now


if you want to store this in a string we

need to escape each backslash let me


show you so C Drive backslash now we

have a problem
Java compiler thinks we're escaping the

double code here so it thinks our string


is not terminated with another double

code but that's not what we want you


want to add a backslash here so we need

to prefix our backslash with another


backslash now we type windows one more

time something let's run the program so


even though we have two backslashes in

our code we actually see one backslash


in a terminal window in other escape

sequences backslash N and we use that to


add a new line to our strings so let's

change this to backslash N and run the


program to see what happens now our

string is broken down onto multiple


lines by the first line we have C Drive

then we have Windows so wherever we had


a backslash n Java will insert a new

line we can also add a tab in our


strings

so if you add backslash T here there


will be a tab which means C Drive and

windows let's take a look so C Drive


here we have a tab and then windows now

in Java we have a few more escape


sequences but quite honestly they're

hardly used so remember these four


escape sequences that we cover in this

tutorial

in this tutorial we're going to talk


about arrays in Java we use arrays to

store a list of items like a list of


numbers or a list of people or a list of

messages let me show you so here we have


an integer variable you want to convert

this to an integer array so right after


int we add square brackets now we have a

compilation error because we're storing


a single number in this array so to fix

this we need to remove one because


arrays are reference types we need to

use the new operator here then we repeat


the type one more time enter a and here

in square brackets we specify the size


or the length of this array how many

items do we want to include in this


array let's say five also we should

change the name of this variable from


number two numbers because we're dealing

with a list of items so always pay


attention to the name of your variables

now you can access individual items in


this array using an index so we type

numbers square brackets to reference the


first element or first item we use zero

now we can set this to a value like 1


similarly we can set the second item to

2 now what if we use an invalid index


let's say 10 this array doesn't have 10

items so let's see what happens numbers


of 10 we said this to 3 when we run this

program we get an exception exceptions


are Javas way to report errors so in

this case an exception was raised and


our program crashed we'll talk about

exceptions in detail later in the course


so now let's remove the last line and

treinta sorry
so sou t tab numbers let's see what we

get
we get this weird string in sort of the

items in our array here's the reason


by default when we print an array Java

returns the string which is calculated


based on the address of this object in

memory so if you have another array and


we print that we're gonna see something

different because each object is gonna


be in a different memory space okay now

how can we see the actual items in this


array well we have a class in Java

called arrays let me show you


arrays so this class is defined in Java

that util package let's press ENTER now


this is important on the top beautiful

so we can use the dot operator to access


the members of this class here we have a

method called two string now as you see


it this method is implemented multiple

times so in the first implementation


this method gets a float array in the

second implementation it takes an


integer array and so on so for all
primitive types as well as reference
types this method is implemented

multiple times this is what we call


method overloading now we can call this

method and pass our integer array and


this will return the string

representation of this array so we can


cut this from here and pass it to our

print method like this now let's run the


program one more time and here's our

array beautiful so the first two items


are initialized the others are set to 0

by default because here we're dealing


with an integer array if you had a

boolean array all items why default get


initialized to false if you have a

string array all items get initialized


to an empty string

okay now this syntax for creating and


initializing an array is a little bit

tedious and it's an older syntax there


is a newer way to initialize an array if

we know the items ahead of time like in


this case so I'm going to remove these

two lines I'm also gonna remove the new


operator here we use curly braces and

inside these braces we add all the items


in this array let's say 2 3 5 1 & 4 now

we have 5 items so the length of this


array is gonna be 5 we can read that

using the lengths


so if we type numbers dot look here we

have is filled look at the icon it's an


F so this is a field which is like a

variable in a class and the type of this


field is an integer so this returns the

number of items in this array let's get


that and printed using our print method

like this take a look so we get five now


in Java arrays have a fixed size so once
we create them we cannot add or remove
additional items to them they have a

fixed length if you want to be able to


add or remove additional items from an

array you should use one of the


collection classes that we'll talk about

later in the course for now all I want


you to remember is that arrays have a

fixed length now currently our array is


not sorted these numbers are in some

kind of random order we can easily sort


this array using the sort method of the

arrays class let me show you so I'm


gonna remove this line and call arrays

dot sort once again you can see this


method is overloaded because it's

implemented with different parameter


types so we call this method and pass

our numbers array


now when we run this program we can see

our array is sorted beautiful

so yeah I've learned that we use arrays


to store a list of objects in Java we

can also create multi-dimensional arrays


for example we can create a

two-dimensional array to store a matrix


or we can create a three-dimensional

array to store data for cube these are


useful in scientific computations let me

show you so here we have a single


dimensional array to convert this to a

two-dimensional array we need to add


another pair of square brackets now we

have a compilation error because we need


to repeat these brackets on the other

side so let's say we want to create a 2


by 3 matrix so 2 rows and 3 columns we

add in other brackets here and change


these lengths to 2 and 3 so now we have
2 rows and 3 columns now to access
individual items in this array we need

to supply two indexes first the index of


the row so we can go to the first row

and then the first column and initialize


that to 1 now let us print this so and

so you t-tap once again we use our


arrays class dot to string and pass this

object
take a look once again we get this weird

string because here we're dealing with a


multi-dimensional array to solve this

problem we need to use another method in


this class called deep to string use

this for printing multi-dimensional


arrays take a look now we have this

matrix which has two rows and in each


row we have three columns we can also

create a three dimensional array all we


have to do is to add another pair of

brackets and specify the length of that


dimension pretty easy now what about the

curly brace syntax let me show you so


let's revert this back to a two

dimensional array we're gonna get rid of


the new operator and use curly braces

now let's say in this matrix we're gonna


have two rows and three columns so each

row is an array itself because it's a


list of items right

so we add another array here let's say 1


2 3 then comma now we add the second row

which is another array in this row we're


gonna have 3 numbers 4 5 & 6

now let's remove this line we don't need


it anymore and print this array so

here's the end result you have learned a


lot about variables ya learned that when

declaring them we need to initialize


them and we can always change their

value later on throughout the lifetime


of our programs however there are times

that we don't want the value of a


variable to change for example let's

declare a variable called pi and set it


to 3.14 now here we need to add an F to

represent this as a float because by


default Java compiler sees this number

as a decimal okay now you know that we


use pi to calculate the area of a circle

what if before we calculate the area of


a circle I come here and type pi equals

1 then all our calculations are gonna


get messed up we don't want this to

happen that's when we use constants so


if we type final here Java compiler will

treat this as a constant so once we


initialize this we cannot change its

value later on you can see here we have


a compilation error and it says cannot

assign a value to final variable pi so


pi is a final variable or a constant now

by convention we use all capital letters


to name constants so this should be PI

beautiful now I tell you a little side


story in one of my early courses that I

created years ago that was c-sharp


basics for beginners there I used the

same example to teach the concept of


constants but I pronounce this word as P

instead of Pi and believe it or not to


this day people make fun of me for

saying P instead of Pi but that's how we


learned this back in Iran we pronounce

it as P and I think Greek people also


say P but anyway I just thought to share

this video to change the mood now you're


done with constants next we're gonna
talk about arithmetic
expressions

in this tutorial we're going to talk


about arithmetic expressions in Java so

in Java we have the same arithmetic


operators that we have in math we have

addition subtraction multiplication


division and modulus which is the

remainder of a division let's look at a


few examples so I'm gonna declare an

integer called result and here we can


type 10 plus 3 now when we print result

it's gonna be 13 pretty straightforward


there you go so this is addition we also

have subtraction multiplication division


is an interesting one let's take a look

so here the result is a whole number


because in Java the division of two

whole numbers is a whole number if you


want to get a floating-point number here

you need to convert these numbers to a


float or a double let me show you

so we prefix this number with


parentheses and in parentheses we type

double now we are casting or converting


this number to a double similarly we

should do that here and now we have a


compilation error because on the left

side we declared an integer but here the


result of this expression is a double

and by the way an expression is a piece


of code that produces a value so what we

have here is an expression because it


produces a value so to fix this problem

we need to change this to double now


when we run this program we get this

floating point number beautiful so these


are the arithmetic operators and these

numbers that we have here are called


operands we also have increment and
decrement operators let me show you so
I'm gonna declare a new variable int X

we set it to 1 now if you want to


increase the value of x by 1 we use the

increment operator now let's print this


on a terminal so we get 2 there you go

we can apply this operator as a postfix


or as a prefix and we get the same

result
take a look too however if we use this

on the right side of an assignment


operator we get different results let me

show you so I'm gonna declare another


variable Y we set it to X plus plus in

this case because we have applied the


increment operator as a postfix first

the value of x will get copied to Y so Y


would be 1 and then X will be

incremented by 1 so if you print x and y


x is gonna be 2 and Y is gonna be 1 take

a look so X is 2 and Y is 1 beautiful


however if you apply this as a prefix

first X will be incremented by 1 so it


will be 2 and then it will be copied to

Y so in this case both


X&Y will be to take a look so we get two

and two now what if you want to


increment X by more than one let's say

by two well there are two ways to do


this let's remove Y we don't really need

it anymore we can write x equals x plus


2 so first we add 2 to X the result will

be three and then three will be copied


into X the other way is to use the

Augmented or compound assignment


operator so we can write X plus equals

two what we have on line eight is


exactly identical to what we have on

line seven well as you can see it's


shorter so this is a better way to write

the same code now this is one of the


Augmented assignment operators we have

the Augmented assignment operator for


other arithmetic operators so we can

type X minus equals 2 and this would


reduce the value of x by 2 we also have

multiply and divide so these are the


Augmented or compound assignment

operators right now I've got a question


for you here we have declared this

variable X it goes to 10 plus 3 times 2


what do you think is the result of this

expression the result is 16 let's run


this program and find out so run there

you go we got 16 but why well this is a


very basic math concept that

unfortunately a lot of people don't know


in math the multiplication and division

operators have a higher priority so they


get applied first in this example this

expression 3 times 2 is evaluated first


the result is 6 and then 6 is added to

10 that's why we get 16 now if you want


to change the order of these operators

you can always use parentheses for


example if you want this expression to

be evaluated first we wrap it in


parentheses so like this now Java

compiler will first evaluate this


expression the result will be 13 and

then 13 is multiplied by 2 so we get 26


take a look

there you go so be aware of the order of


these operations parentheses always have

the highest priority then we have


multiplication and division and finally

we have addition and subtraction in this


tutorial we're going to talk about
casting and type conversion so I'm gonna
declare a short variable call X and set

it to 1 and then I'm gonna declare an


integer called Y and set it to X plus 2

in this example we're adding a short to


an integer what do you think the result

is gonna be well let's take a look


so sou t let's print Y we get 3 that is

what you were expecting but let me


explain what happens under the hood for

this expression to get executed because


we're dealing with two different types

of values one is a short the other is an


integer one of these values should be

converted to the other type so they are


equal now I got a question for you how

many bytes do we have in a short


variable we have 2 bytes how many bytes

do we have in an integer 4 bytes so any


values that we store in a short variable

can also be stored in an integer


variable right so when this piece of

code is gonna get executed this is


what's gonna happen first Java looks at

the value in this variable it's 1 right


it's going to allocate another variable

an anonymous variable somewhere in


memory we don't know where that is we

don't know the name of that variable it


doesn't have a name it's anonymous that

variable is gonna be an integer then


Java is gonna copy the value of x into

that memory space and then it will add


these two numbers together this is what

we call implicit casting let me type it


here implicit casting that means

automatic casting or automatic


conversion we don't have to worry about

it whenever we have a value and that


value can be converted to a data type
that is bigger casting or conversion
happens implicitly or automatically so

byte can be automatically converted to


short and this can be converted to int

and long okay


now what about floating-point numbers

let's look at an example I'm gonna


change this to a double one point one

now here we have a compilation error


because on the right side of the

assignment operator we have a


floating-point number a double on the

left side we have an integer so we need


to change this to double now when we

execute this code we're gonna get 3.1


let's verify this there you go now let's

see how casting happens here in this


case we're dealing with a double and an

integer an integer is less precise than


a double because in a double we can have

digits after the decimal point so in


this example Java is going to

automatically cast this integer to a


double so that will be two point zero

and then two point zero will be added to


one point one okay so back to this chain

here we're gonna have float and then


double so as a general rule of thumb

implicit casting happens whenever you're


not gonna lose data there is no chance

for data loss now what if you want Y to


be an integer so in this example we

don't care about the digits after the


decimal point you want to see three on

the terminal how should we do this this


is where we should explicitly cast the

result so we should cast X to an integer


like this parentheses int this is

explicit casting we convert X to an


integer so the result would be one

without a decimal point one will be


added to 2 and Y would be three take a

look there you go so this is all about


implicit and explicit casting now this

explicit casting can only happen between


compatible types so all these types are

compatible because they're all numbers


but we cannot cast a string to a number

in other words if X was a string like


this let's say 1

we cannot cast eggs to an integer


because they are not compatible so how

do we do this
well for all these primitive types you

have learned you have wrapper classes so


in Java we have a class which is a

reference type called integer this class


is defined in Java the Lang package and

in this class we have a method called


parse int so this method takes a string

and returns an integer so integer is the


wrapper class for the int primitive type

we also have short and in this class we


have parse short so it takes a string

and returns a short similarly we have


float and double and obviously the name

of these metas are different so here we


have parse float so back to this example

let's say we get X as a string and we


want to convert it to an integer this is

how we do it
integer dot parse int we pass X here and

then add it to take a look so we get 3


you might be curious why this matters

why should we parse or convert a string


to a number to add it to something else

well pretty much in most frameworks for


building user interfaces whether you're
building a desktop or a mobile
application or web application we always

receive input from the user as a string


so if you have a form with a bunch of

text boxes or drop-down lists almost


always we get values as a strings so

that's why we need to convert these


strings to their numeric representation

ok now what if X is a floating-point


number here what will happen when we try

to parse this as an integer


let's take a look once again we get an

exception which is how Java reports


errors to our programs we're going to

talk about exceptions in detail in the


future

so if the user enters one point one we


cannot use this method instead we should

use float or double let's say double


because that's easier double parse

double so we parse this number as a


double add two to it and then store the

result
in a double and then we will get 3.1

beautiful next we're gonna look at the


math class for performing mathematical

operations in this tutorial we're going


to look at the math class for performing

mathematical operations so in Java we


have this math class that is defined in

Java that Lang package so it's always


there we don't need to explicitly import

it now this class has a number of useful


methods the first method I'm gonna show

you is the round method and with this we


can round a floating-point number to a

whole number so as you can see this


method is overloaded which means it's

implemented twice in the first


implementation it takes a float and
returns an int and a second
implementation it takes a double and

returns a log so let's pass 1.1 as a


float to this method and store the

result in an integer like this now we


print the result and we get one

beautiful another useful method is seal


or sealing which returns the smallest

integer that is greater than or equal to


this number so the ceiling of 1.1 is 2

now here we have a compilation error


because this method returns a double but

we're storing the result in an integer


so here we need to explicitly cast this

to an integer and now you can see the


ceiling of this number is 2 we have

another useful method that is floor so


the floor of a number is the largest

integer that is smaller or equal to this


number in this case it's gonna be 1

let's take a look there you go another


useful method is max which returns the

greater of two values and once again


this method is overloaded so in the

first implementation we get two integers


we have other implementations for longs

floats and doubles so let's pass two


integers here one and two this will

return the greater number which is 2


there you go similar to this we have min

is pretty straightforward in
the useful method is random for

generating a random value between 0 and


1 once again we get a compilation error

because this method returns a double so


let's change that to double now every

time we run this program we get a


different number and this number is a

floating-point number between 0 to 1 now


what if you want a number between 0 to

let's say 100 instead of 0 to 1 well we


simply multiply this by 100 take a look

so every time we run this we get a


different number between 0 to 100 now if

we don't want these digits after the


decimal point we can either round this

number or cast it to an integer let me


show you so we can call math that round

and pass the result of this expression


so I'm gonna cut this add parenthesis to

call the round method and then paste


that expression now let's run this code

so every time we get a double we still


have the fraction here so we can change

the type to an INT now we have a


compilation error because the round

method returns a long but here we have


declared an integer this is one of those

cases where implicit casting cannot


happen because we have a value that is

represented in 8 bytes of memory and you


want to store that in a variable that

has only 4 bytes of memory so implicit


casting doesn't work but we can use

explicit casting because we know the


result of this expression is a number

between 0 to 100 so we can definitely


store it in an integer so let's add int

here now let's run this again there you


go now what if we don't use the round

method here let's see what happens so


I'm gonna remove the call to the round

method and simply I apply this casting


over here let's see what we get now

every time we run this program we get 0


do you know why because here we're

applying this casting to the result of


this method call not this entire
expression as you saw earlier every time
we call the random method it generates a

number between 0
to one so when we cast that number to an

integer we'll lose the fraction we


always get zero and zero times 100 is

zero to solve this problem we need to


wrap this entire expression in

parenthesis so we add parentheses around


this and now let me run this we get an

integer between 0 and 100 quite often


when we worked with numbers we need to

format them as currency values for


example we might have a number like this

imagine this is the price of a product


to display this to the user you want to

add a dollar sign here and separate


every three digits with a comma or if

you might have a number like 0.1 and we


want to represent this as a percentage

value so instead of 0.1 you want to


display 10% so in this tutorial I'm

gonna show you how to format numbers in


Java we have this class number format

that is defined in Java the text package


in this package we have a lot of classes

for handling text dates numbers and so


on so let's press ENTER here it's

important on the top beautiful now I


want to declare a variable so let's give

this variable a name currency now we


need to instantiate this new number

format however we get a compilation


error here let's take a look number

format is abstract it cannot be


instantiated so in Java we have this

concept of abstract classes so some


classes are abstract and they're

basically like a half-baked cake we


cannot use the new operator to create an
instance of them we're going to talk
about abstract classes and why they

exist later in the course for now


remember that we cannot create an

instance of the number format class


because it's abstract so there is

another way let me show you this class


has a bunch of methods that start with

get so we have get currency instance and


when we call this method this will

create an instance of the number format


class and return it so instead of using

the new operator we're gonna use this


method here this is what we call a

factory method because it's like a


factory it creates new are

jects now look at the return type of


this method it's a number format object

okay so we call this method now we get


the return value and store it in a

variable of type number format called


currency okay let me say improperly zoom

out so you can see all the code there


you go so on the right side of the

assignment operator we're calling the


get currency instance method we get the

result which is a number from an object


and store it in this variable okay now

I'm gonna zoom in so you can see clear a


name

alright that's better now this object


has a method for formatting values once

again you can see this method is


overloaded we have multiple

implementations we can give it a long or


a double or whatever so I'm gonna call

this method and pass a value like one


two three four five six seven point

eight nine one so we have three digits


after decimal and a few other digits

here now this method will return a


string representation of this number

formatted as a currency so let's get


that and store it in a string variable

like result and then we're gonna print


result on a terminal see what we get

so we get this dollar sign every three


digits are separated using a comma and

we only have two digits after the


decimal point so this class is very

handy in formatting numbers as


currencies we have another method for

formatting a number as a percent and


that is get percent instance right now

it returns an instance of the number


format class specialized for formatting

numbers as a percent so we need to


rename this variable from currency to

percent now we don't want to manually


change this because there are multiple

references to this variable this other


reference was not updated so let me show

you the proper way to rename objects in


intellij if you right click here you can

see this refactor menu and here we have


rename now look at this shortcut on the

right side unfortunately it's not


visible in my recording window but on

Mac is Shift + F
I always use shortcuts because they're

faster so let's press shift and f6 now


we get this red box and below this we

can see a few suggestions for a better


name we can choose one of these or pick

our own name I'm gonna change this to


percent and note that as I'm typing this

the other reference gets updated


automatically so this is very helpful
now let's press Enter
okay we're done with renaming now let's

pass a different value here so let's say


we have a number like 0.1 we want to

format this as a percent let's run the


program there you go you get 10%

beautiful now let me show you a cool


technique in this program we don't

really need this percent object because


we have used it in a single place it

would make sense to have this as a


separate variable if you have multiple

references to it so what can we do here


we can completely get rid of this object

so let's delete this piece of code we're


basically calling this method of the

number format class as you know this


method returns a number format object so

right after calling this method and


before the semicolon we can use the dot

operator to access the methods or


members of the number format object so

here we call the format method straight


away and pass our value this is what we

call method chaining we're chaining


multiple methods together so here's one

method and here's another method now


this returns a string so we can store it

in this result variable let me cut this


expression from here and put it over

here now we have double semicolons I'm


going to delete one of them

all right beautiful in this tutorial I'm


gonna show you how to read input from

the user in Java we have this scanner


class that is defined in Java did util

package let's import this and create a


scanner object so new scanner now here

inside this parenthesis we need to


specify where we're gonna read data from
we're gonna read it from the terminal
window are we gonna read it from a file

or what to work with the terminal window


we type system dot in this is one of the

fields in the system class a fill as I


told you before is like a variable that

we define in a class so we have system


that in we also have system that out

which we used to print something on the


terminal right now let's use system that

in and terminate this statement with a


semicolon now this object has a bunch of

methods for reading data and all these


methods start with next so we have next

byte for reading a byte we have next


line for reading a line we have next

boolean for ending a boolean and so on


so let's call the next byte method and

see what we get


this returns a byte value so we can

store it in a byte variable let's say


someone's age and then we print it on a

terminal saying you are plus h so here


we're concatenating a string with a byte

and in this scenario we're gonna have


implicit casting or implicit type

conversion so Java will automatically


convert this byte variable here tray

string so they can be added together


okay now let's run this program and see

what happens so here in the terminal


window we can type 20 enter and it says

your 20 beautiful but this is pretty


boring let's add a label here and ask

the user to type something for example


before reading data we're gonna call the

print line method and say age : now


let's run the program so we get this

label here however whatever we type will


appear on the next line this is because

the print line method adds a new


line after this label the Soviets issue

recall the print method now let's run


the program one more time we get this

popup box because our program hasn't


finished execution so we need to tell

IntelliJ that you want to stop and rerun


this program all right now whatever we

type appears right in front of this


label beautiful ENTER we are 20 now what

if we type a floating-point number like


20 point 1 we get an exception because

this method can only parse white values


if you want to get a floating-point

number we need to call next float or


next double what if you want to read our

string we don't have next string we have


next and next line let's look at the

differences so first I'm going to call


the next method here we have a

compilation issue because this method


returns a string I'm gonna change this

to a string let me collapse this that's


better

we should also rename this variable so


what was the shortcut Shift + f6 now

let's train just a name enter beautiful


and one last time we should also update

the label name run the program so I'm


gonna type my name here Marsh it says

your Amash pretty under for one more


time this time I'm gonna type my

full-name maha Madani but we don't get


the last name here's the reason these

wars that we have here these are called


tokens every time we call the next

method it reads one token so here we


have a space we have two tokens and we
need to call the next method two times
to get the full name the first time we

call it it returns Marsh the second time


we call it it returns Hamid ani then we

need to combine this suit together this


is not ideal so that's when we use the

next line method with this method we get


the in turn line that the user enters no

matter how many spaces or tabs are there


take a look so Marsh

comma Donny and we get the full name now


what if I type a few spaces before my

name let's see what happens


so those spaces also appear here and

this looks a little bit odd this is


where we use the trim method remember we

trim we can get rid of all these white


spaces before or after a string so this

next line method returns a string that


we are storing in this variable right

now just before storing the result in


this variable here we can use the dot

operator to access the members of this


string object so we call the trim method

and then store the result in this


variable once again we're chaining

multiple methods here let's run the


program so a few spaces Maharani and you

get this beautiful output

right now it's time for a project I want


you to use what you have learned in a

section and build a mortgage calculator


like this so when you run this program

we get a few questions the first


question is the principal or the amount

of loan we want to get let's say


$100,000 the second question is the

annual interest rate let's say three


point nine two percent and the third
question is period in years let's say
you want to get a loan for thirty years

so this program calculates our monthly


payments and displays it as a currency

this is a great exercise for you to


practice all the materials you learn in

this section now before you get started


I want to give you a few hints here is a

formula for calculating the mortgage or


the monthly payments I found this page

on wikiHow comm is called calculate


mortgage payments so let's see how this

works mortgage equals P or principal or


the amount we're gonna loan multiplied

by R which is our monthly interest rate


this is very important so this number

that we get here is our annual interest


rate we need to divide this by 12 also

take into account that this number is


represented as a percent to calculate

the actual interest rate you need to


divide this number by 100 so in this

example the interest rate is zero point


zero three nine two so whatever the user

enters divided by 100 and then divided


by twelve to get to the monthly interest

rate now we have this monthly interest


rate we need to multiply this by this

expression here we need to add 1 to this


interest rate and raise it to the power

of n where n is the number of payments


so we need to multiply this number by 12

or 12 months to calculate the number of


payments now to raise this number to the

power of n you need to use the power


method of the math class so this math

class has this power or power method


that takes two arguments or two values a

and B so go ahead and spend ten to


fifteen minutes on this exercise when
you're done come back see my solution

all right let's see what I've done here


and by the way don't worry if your coat

is different from mine


we all think and coat differently so

it's perfectly fine if your code is


different

just look at my coat see what I've done


here and see if there are ways you can

improve your coat


that's what matters okay so here in our

main method first I've declared two


final variables or constants

the first one is months in year which


I've set to 12 and the second one is

percent which I've set to 100 the reason


I declared this constant is that I

didn't want to have magic numbers in


this code so over here where we

calculate the monthly interest we get


the annual interest divided by percent

and then months in here this code is


very self-explanatory someone else

reading this code we'll have no problem


understanding what's going on here in

contrast if you had a magic number here


like divided by 12 and then for whatever

someone else reading this code would


wonder what is this for doing here what

is 12 it's quite obvious to you that 12


is the number of months in a year but

trust me sometimes other people cannot


see this straight away so as a best

practice avoid magic numbers in your


code always use constants or final

variables to describe them


so let's revert this back all right so

after declaring this constant I've


created this scanner object here we ask
the first question
principle and we read the answer as an

integer
I thought integer is a good datatype for

storing the principle because short is


not enough with short we can store a

maximum of $32,000 that's not enough


what if someone wants to find us

$1,000,000 so int is good and it allows


us to store a value up to two billion

next we ask the second question annual


interest rate we read this as a float

here I could use double but the interest


rate is a small number so float is

sufficient for that we don't really need


double so we get the annual interest and

then based on that we calculate the


monthly interest also see how I have

named my variables all variables have a


proper meaningful names there are no

magic words here like MI as it short for


monthly interest

or m1 or m2 do not use magic names for


your variables always use meaningful and

descriptive names alright next we get


the period we read this as a byte

because the maximum number we want to


support is 30 so one byte is sufficient

to store the number 30 or anything


smaller now based on the number of years

we calculate the number of payments note


the camel notation here I've capitalized

the first letter of every word except


the first word so we get the Earth's and

x months in here
again the code is very self-explanatory

once we collect all this data then we


calculate the mortgage so we get a

principal multiplied by this expression


and then divide it by this other

expression let's have a quick look here


now this looks a little bit complicated

so if you're not download my source code


look below this video I'm attached it

for you to download and finally after we


calculate the mortgage we use the number

format class to format this value as a


currency so we get a result store it in

this string mortgage format it and print


it over here now here we can also avoid

declaring this variable and simply add


this expression over here but it decided

to do this to increase the readability


of this code otherwise this line would

be so long but that's just my personal


preference you don't have to follow this

alright so this was my implementation of


the mortgage calculator

however this program has a number of


problems the first problem is input

validation so if we run this and enter a


non numeric value like XYZ our program

crashes or as another example if we


enter a negative value here our program

is not gonna behave properly so that's


where conditional statements come to the

rescue in the next section we're going


to talk about conditional statements you

will learn how to use these statements


to validate the values entered by the

user so that brings us to the end of


this section I hope you learn a lot and

thank you for watching

so in this section you'll learn all


about variables and constants you learn

about primitive and reference types you


learn that primitive types store simple

values but reference types hold


references to complex objects that's why

we call them reference types you also


learn about casting and type conversion

you learn about two types of casting


implicit and explicit you learn how to

work with numbers strings and arrays and


finally you learned how to read input

from the terminal I hope you learned a


lot I've been enjoying the course so far

in the next section we're going to look


at conditional statements for

controlling the flow of our programs so


I'll see you in the next section

hey Marcia I just want to make a quick


announcement this course you've been

watching is actually the beginning of my


complete Java series in this course we

only talk about the basics but in my


complete series we go way beyond that so

if you're serious about Java if you're


looking for a job as a Java developer I

highly encourage you to enroll in my


complete Java series it's exactly the

same structure the same quality but it


has way more content plus you will get a

certificate of completion that you can


add to your resume so if you're

interested I put the link down below you


can get the course with a discount and

if you're not happy for any reasons you


can ask for a refund within the first 30

days so I hope to see you in the course


in this section we're going to look at

control flow or controlling the flow of


execution of our programs you're gonna

start off by talking about comparison


operators for comparing values then I'm

gonna talk about logical operators like


the logical and logical or and logical
not we use these operators for
implementing real world rules and then

we're gonna talk about three different


types of control flow statements we're

going to talk about conditional


statements for making decisions in our

programs then we're going to talk about


loops for executing code repeatedly and

finally we're going to revisit our


mortgage calculator and add error

handling to it
so if a user enters an invalid value we

keep asking them to try again all right


now let's jump in and get started we're

gonna start this section by talking


about comparison operators we use these

operators to compare primitive values


for example our x on y equal or not so

I'm gonna declare two integers x and y


now let's compare this to see if they're

equal or not
so first I'm gonna add this print line

statement now to compare these variables


we type x equals y so here we have two

equal signs and this is the Equality


operator don't confuse this with a

single equal sign that we use for


assignment that is the operator used

over here okay so two equal signs


repairs

the Equality operator now when we run


this program we get true because these

values are equal this expression that we


have here is called a boolean expression

so earlier I told you that an expression


is a piece of code that produces a value

this piece of code produces a boolean


value true or false that's why we refer

to it as a boolean expression we also


have the inequality operator so when we
run this program we're gonna see false
let's take a look we get false because

these two variables are equal so the


expression X is not equal to Y returns

false we also have greater than greater


than or equal to less than and less than

or equal to so if I change Y to 2 this


expression is gonna evaluate to true

because X is less than or equal to Y


take a look there you go

next we're going to talk about logical


operators in the last tutorial you learn

that a boolean expression produces a


boolean value now there are times we

want to combine multiple boolean


expressions let me show you so I'm going

to declare an integer called temperature


and set it to 22 next we declare a

boolean variable is warm now we want to


check to see if temperature is greater

than 20 and less than 30 so we write a


boolean expression like this temperature

greater than 20 here we need to use the


end operator so these two ampersands

represent the logical and operator in


Java

after this we add our second condition


temperature less than 30 now if both

these conditions are true the result of


this boolean expression is going to be

true
otherwise if at least one of these is

false the result would be false let's


take a look so I'm gonna print is warm

on a terminal

the result is true but if you change the


temperature to let's say 12 the result

is gonna be false and this is how this


works Java will evaluate this expression
from left to right first it looks at the
first condition the first condition is

false because temperature is not greater


than 20 so because this expression is

false it doesn't matter what we have


after the and operator Java will ignore

the other expressions because the and


operator will return true if both

conditions are true okay now let's look


at another operator that is the or

operator so I'm going to delete all this


code and start with a new example let's

declare a boolean has high income we set


it to true and another boolean has good

credit we set this to true as well so


let's say we're building an application

for processing loans we want to see if a


new applicant is eligible for a loan or

not
so we declare another boolean is

eligible and by the way look at the


names I have used for these variables

they're very meaningful and descriptive


so here's the rule an applicant is

eligible if they have high income or


good credit if one of these conditions

is true they are eligible so we write


has high income or so these two vertical

bars represent the or operator so if


they have high income or good credit

then they are eligible so with the or


operator if at least one condition is

true the result will be true in this


example when Java evaluates this

expression it starts from the left side


this boolean variable is true so it

doesn't matter what we have after Java


will not evaluate the rest of this

expression it simply returns true


however if this variable was false Java

would continue evaluating this


expression hoping that the next boolean

value or the next boolean expression is


true so this is the or operator and

finally we have the not operator that we


use to reverse a value let me show you

how that works


so

let's declare another boolean variable


has criminal record we set this to false

so here's the rule we want to implement


in order for someone to be eligible for

a loan they should either have high


income or good credit and they should

not have any criminal records so let's


see how we can implement this rule we

have implemented the first part they


should either have high income or good

credit now we want to make sure they


don't have any criminal records so we

need to combine the result of this


expression with this boolean value using

the and operator so first we wrap this


expression in parentheses then we apply

the end operator and here we add has


criminal record now you want to make

sure they don't have criminal record and


this is where we use the not operator so

the not operator will reverse the value


of this boolean variable or expression

in this case this variable is set to


false so when we apply the not operator

to it the result would be true so if the


first condition is true and the second

condition is true then that person is


eligible for a new loan so as you can

see these logical operators are very


useful in implementing real word rules
next we're going to talk about if
statements in this tutorial we're going

to look at if statements in Java if


statements are extremely important

because they allow us to build programs


that can make decisions based on certain

conditions here's an example in this


file we have a bunch of conditions if

temperature is greater than 30 perhaps


you want to display two messages to the

user it's a hot day drink plenty of


water otherwise if it's between 20 and

30 you want to print it's a nice day and


otherwise we want to print it's a cold

day so let's see how we can implement


these rules in a Java program back to

our main file we start by declaring a


variable temperature we set it to 32 now

we use an if statement followed by a


pair of parentheses inside this

parenthesis we type
an expression or a boolean value so

let's say temp is greater than 30 now if


this condition is true the statement

that we had after this if statement will


be executed so let's print it's a hot

day let's run the program we get this


message because temperature is greater

than 30 now what if you want to print


another message like drink plenty of

water here we should add curly braces to


define a code block so if this condition

is true all the code that we have inside


of this block would be executed let's

add another message here drink water


okay so this was our first condition now

let's add a second condition so after


the right brace we type LS if once again

we add our parentheses and inside these


parentheses we type a boolean expression
if 10 is greater than 20 and it's less
than or equal to 30

you want to print a different message


like beautiful day now here I haven't

added the braces because we have a


single statement so braces are only

required if we have multiple statements


now this is a little bit controversial

some people believe we should always add


braces whether we have a single

statement or not other people like


myself believe this creates unnecessary

noise in the code in this tutorial I'm


gonna add the braces first and then

remove them so you can see the


difference so let's add a pair of curly

braces here and finally our last


condition so if none of these two

conditions are true let me print a


different message so here we simply type

LS we don't have any more conditions so


let's add a code block and print cold

day now let me define a few terms here


we have an if statement and this

statement has three clauses or three


sections here's the first Clause here's

the second Clause and here's the third


Clause pay attention to how a formatted

this if statement so first we have the


if Clause the else if

and else clauses are placed after these


right braces so we have some kind of

hierarchy here here we have a parent


followed by two children now let's get

rid of these unnecessary braces and


reformat our code to see the difference

so I'm gonna remove the braces for the


else clause and also one more time here

that's better now we can simplify this


boolean expression basically we don't

need this piece of code here here's the


reason if the first condition is not

true what does it mean that means the


temperature is less than or equal to 30

so this expression here is unnecessary


let's delete this and simplify our code

that's better now look at how this code


is formatted on the top we have if the

else if Clause is a little bit indented


but the else Clause is not indented it's

at the same level as the if Clause and


this looks a little bit ugly the code is

not symmetrical so if you want to get


rid of the curly braces a better way to

format this code is like this so instead


of adding the else if or else classes

after curly braces we add them on a new


line now all these clauses are at the

same level the code is easier to read in


this tutorial I'm gonna show you a very

cool technique for simplifying if


statements so let's start by declaring a

variable called income and set it to


120,000 now here we can use an

underscore in between these three digits


to make our code more readable now let's

say we want to declare a boolean


variable called has high income if the

income is more than $100,000 you want to


set this to true otherwise we want to

set this to false so here we can write


an if statement like this if income is

greater than $100,000 we want to set has


high income to true however we get a

compilation error here


let's take a look declaration not

allowed here
so we cannot declare a variable here we
can only declare variables inside code
blocks like this code block over here so

to declare this variable we need to add


curly braces to define a new code block

now we have a different problem this


variable that we have defined is scoped

to this code block so it's only


available here we cannot access it

outside of this block let me show you so


if we print has high income you can see

we have a compilation error cannot


resolve symbol has high income because

this variable is not available outside


of the block in which it's declared so

to solve this problem we can declare


this variable after setup this block

boolean has high income and then we can


simply set it to true in this block now

we don't need these braces anymore so


let's simplify the code we add an else

clause otherwise we said has high income


to false let's remove this print method

we don't need it anymore so this is one


way to implement this scenario but this

code looks very amateurish a


professional programmer doesn't write

code like this let's improve it step by


step one way to improve this is to give

this boolean variable an initial value


for example we can set it to false

initially and then we implement this


condition so if the income is more than

$100,000 then we set this variable to


true with this we no longer need is else

Clause
so that was one improvement but it's

still not ideal in situations like this


we can completely get rid of this if

statement here let me show you instead


of hard-coding false here we type our
expression income is greater than
$100,000 so here we have a boolean

expression if this boolean expression


evaluates to true this boolean variable

is going to be true otherwise it's going


to be false so this is the simplest the

most elegant and the most professional


way to implement this scenario now one

more improvement before we finish this


tutorial I

personally prefer to wrap this


expression in parentheses even though

technically we don't need parentheses


here but these parentheses make our code

more clear more readable let me show you


so I'm gonna wrap this inside these

parentheses now it's very clear we're


obviously on the right side of this

assignment operator we have a boolean


expression in this tutorial we're gonna

look at the ternary operator in Java so


we're gonna continue with the example

from the last tutorial we had this


income variable imagine this is the

income or customers now depending on


their income

you want to put these customers in


different classes if their income is

more than $100,000 you want to put them


in the first class otherwise we want to

put them in the economy class so here's


one way to implement the scenario we

declare this string variable class name


note that we cannot call this class

because class is a reserved keyword so


class name now we write our first

condition if income is greater than


$100,000 we said class name to first

otherwise we set it to economy


now as you learn in the last tutorial
this code looks very amateurish a

professional programmer doesn't write


code like this so one way to simplify

this is to give this variable an initial


value so we assume they are in the

economy class and then we check this


condition if this condition is true we

put them in the first class so with this


we can get rid of this else clause that

is better now in the last tutorial I


showed you how to simplify this even

further but the technique you learned


there cannot be used here in other words

we cannot add income greater than


$100,000 here because here we have a

boolean expression but on the left side


we have declared a string variable so we

want to set this to a different string


depending on the result of this

expression and this is where we use the


ternary operator so we start with our

condition then we type a question mark


if this condition is true we add this

value here otherwise we add the other


value so this question mark and colon is

the ternary operator in Java it has


three pieces first we have a condition

if this condition is true this value


will be returned and assigned to our

class named variable otherwise this


other value will be returned now we can

completely get rid of this if statement


so put the ternary operator in your tool

box it's very helpful next we're going


to look at switch statements in Java in

this tutorial we're going to look at


switch statements in Java we use three

statements to execute different parts of


code depending on the value of an

expression kind of similar to if


statements let me show you so let's say

we're gonna write a program and check


the role of the current user and then

we're gonna print different messages or


give them different features depending

on their row so let's declare a string


variable called role and here we set

this to admin now to check the role of


the user we can write an if statement

like this if role equals admin then


perhaps

we want to print you are an admin now


you might be wondering why we have this

condition here it's obvious that this


condition is always true because we have

set roll to admin but this is just for


demonstration in a real program we are

not gonna hard code this admin here so


we're gonna read the role of the current

user from somewhere else


we don't know what it is at the time of

writing code okay so here we have one


condition

let's write another condition else if


role equals moderator perhaps we want to

display a different message so you are a


moderator and finally if the role is

none of these values you want to print


you are a guest so this is one way to

implement this scenario using an if


statement we can also implement this

using a switch statement and sometimes


that looks a little bit cleaner let me

show you so we start with a switch


statement then we add parentheses and

inside this parenthesis we add our


variable in this case row next we define
a block of code and in this block we add
one or more case clauses so we have a

case for an admin we add a colon here


now what do we want to do here if the

role is admin you want to print you are


an admin so I'm gonna copy this line

from here and then paste it over here


now after this line we need to add a

break statement to jump out of this


switch block okay then we add another

case Clause so case moderator once again


you got a colon and here we're gonna

print this other message so we paste it


here and then we're gonna break

now optionally we can have a default


clause here so if none of these previous

cases apply the code that we write in


this section will be executed so here we

want to print you are a guest


now here we don't need to use a break

statement because we're at the end of


the switch block so will automatically

jump out of this block in contrast if we


didn't use this break statement here

Java will continue executing these other


lines here so if the role is admin first

it will execute this line and then it


will jump to this case block it will

execute this other line and then after


it executes this break statement it will

jump out of this switch block okay so


this is how we use a switch statement

now compare this with wave statement


some people prefer to use if statements

others prefer to use a switch statement


now one more thing before we finish this

tutorial here we're comparing the value


of role with strings but we could also

use integers other than the long type so


if roll was a byte short or an integer
our cases would look like this case one
case two and so on now here we have a

compilation error because roll is a


string let's change this to an integer

and we can initialize this to one so as


you can see with sweet statements we can

execute different code depending on the


value of an expression

all right now it's time for an exercise


this exercise I'm gonna give you is a

popular interview question so I want you


to write a program that behaves like

this here we should enter a number if


this number is divisible by five we get

this so if you run the program again and


enter ten once again we get fit now if

this number is divisible by 3 we get


buzz if this number is divisible by both

five and three like fifteen or thirty or


whatever we get fizzbuzz and if this

number is not divisible by five or three


like two we get the same number printed

on the terminal so go ahead and spend


five to ten minutes on this exercise

you'll see my solution next

all right to read the number first we


need to use the scanner object so

scanner we import this and instantiate


it and as you know here we need to pass

system that in to read data from the


terminal now we print a message so we're

gonna use the print method instead of


print line here we add a label like

number and then we call scanner the next


int to read a number we store it in this

variable number okay so the first part


is done now we need to check to see if

this number is divisible by five or not


so we can write an if statement like
this if number here we use the modulus
operator which returns the remainder of

a division so we divide this by five and


if the remainder equals zero that means

this number is divisible by 5 so we


print fizz now

otherwise if this number is divisible by


3 we print buzz we need another

condition if this number is divisible by


5 and 3 so here we use the and operator

number divisible by 3 equals 0 in this


case we want to print fizz buzz

otherwise you want to print the same


number like this now this is not the

right solution as I will show you in a


second this program has a book but it's

a very common solution that I see


amongst my students so let's run this

program and see what is wrong here


all right here we enter five we get fizz

utiful what if you enter ten ten is also


divisible by 5 so we get fits so far so

good what about a number that is


divisible by 3 we get buzz good what if

we enter a number that is divisible by


both 5 & 3 like 15 we get physican why

is that here's the reason with this


implementation if we enter 15 this first

condition will evaluate to true so we


get fizz these other else clauses will

be ignored and that is why this line


will not be executed so in situations

like this you should have the most


specific conditions on the top and the

most generic ones on the bottom in this


case we want to move this condition to

the top so if the number is divisible by


5 & 3 we're gonna print fizzbuzz so this

is very specific otherwise if the number


is only divisible by 5 we print fizz

else if it's divisible by 3 we print


buzz and finally if none of his

conditions is true then we print the


same number now let's run the program

one more time so we enter 15 and we get


fizzbuzz beautiful so here's one way to

solve this problem now I've seen some


people argue that we have repeated this

expression twice number is divisible by


5 we have that here on line 12 as well

as line 14 in programming we have this


concept called dry which is short for

don't repeat yourself so some people


argue that here we have repeated this

expression and this is not a good


solution here is another way let me show

you so we're gonna get rid of this


second condition here instead we're

gonna add a code block over here so if


the number is divisible by 5 first we

check to see if the number is also


divisible by 3 if that's the case we

print fizzbuzz
otherwise we print just fizz

like this okay now we no longer need


these two lines because we already

implemented this concept here so first


we check to see if the number is

divisible by five if not we check to see


if it's divisible by three and otherwise

so here is another way to solve this


problem but in my opinion this approach

is kind of amateurish and ugly because


these nested if-else statements are

considered a bad practice now this is


not terribly bad but the more you nest

these L statements the more confusing


your code is going to be to other people
so I personally prefer the previous
solution even though we had a bit of

repetition in the code the more you


program the more you build software the

more you realize that there is no way to


build ideal software programming and

problem solving is all about trade-offs


every solution has certain strengths and

certain weaknesses this solution doesn't


have any repetition or duplication in

the code but it has a nested structure


and these nested structures make our

code hard to read and understand the


previous solution had a bit of

repetition but it had a flat structure


there is no nesting here and this code

is cleaner and easier to read there are


times that we want to repeat one or more

statements for example let's say we have


this hello world message here let's say

we want to print this five times on the


terminal we don't want to repeat this

code like this this looks very ugly


that's where we use loops in Java we

have a few different types of loops the


first one that I'm going to talk about

in this tutorial is for loops so let's


see how we can use a for loop here I'm

going to delete all this code you start


by typing the for keyword followed by

parentheses and inside these parentheses


we need to do three things first we need

to declare a loop or counter variable so


let's declare a variable called I and

initialize it to 0 quit often use


variable names like I J and K for loop

counters next we add a semicolon to


terminate the first statement then we

write a boolean expression that


determines how many times this loop is
gonna get executed so I
than five as long as I is less than five

this loop will be executed once again we


add a semicolon and finally we increment

I by one like this so this is the basic


structure for a for loop now here we can

repeat one or more statements using this


for loop so we can add our hello world

message here like here we have a single


statement so we don't need braces but if

you have multiple statements that we


want to repeat we need to define a code

block here now I'm gonna remove this


because you don't really need them so

let's run this code and see what we get


you get hello world printed five times

on the terminal beautiful now let me


explain how this code gets executed when

Java sees this for loop first it will


execute this statement so here we are

initializing I to zero then Java


evaluates this condition is this

condition true obviously it is because


zero is less than five so the control

moves to line seven this line gets


executed now at the end of this

iteration or at the end of this loop the


control moves here

so I is incremented by one now we are at


the beginning of the second iteration

once again this condition is evaluated


is one less than five obviously it is so

once again the body of this loop gets


executed now fast forward at the end of

the fifth iteration I will become five


five is not less than five so the loop

condition will be false and control


moves outside of this for loop now

here's one thing you need to remember if


you want to execute something five times

you can initialize your loop counter or


loop variable to zero and use the less

than operator here another way is to


initialize this to one and then use the

less than or equal to operator here now


to make this more interesting let's

print I over here so here we add a space


and then concatenate this string with I

take a look so we get hello ward one two


three four five in contrast if we

initialize I to zero and use the less


than operator

we will get hello word zero one two


three four we can also print these

numbers in reverse order so we


initialize I to five and execute this

loop as long as I is greater than zero


but here instead of incrementing I we

decrement it now we get hello world five


four three two one

so this is all about for loops next


we're gonna look at while loops in this

tutorial we're gonna talk about while


loops in Java while loops are very

similar to for loops in terms of their


functionality but they're different in

terms of syntax let me show you so we're


gonna continue with the example from the

last tutorial I'm gonna rewrite this


code using a while loop so first we

declare a loop variable and I initialize


it to zero

next we type while and here in


parentheses we type our loop condition

while I is greater than zero then we're


gonna execute the code inside this block

so I'm gonna copy this from here paste


it in this block and finally we need to
decrement I like this so at the end of
each iteration we decrement I just like

our for loops so as you can see we can


achieve the same thing using a for loop

or a while loop
however the implementation using the for

loop is a little bit lighter and cleaner


so in situations where you know ahead of

time how many times you want to execute


one or more statements it's better to

use a for loop while loops are better in


situations where we don't know exactly

how many times you want to repeat


something for example let's say we're

going to write a program and ask the


user to continuously enter something

until they type quit the moment they


type quit we're gonna terminate the

program in that situation we don't know


how many times the user is going to

enter something so let's write that


program using a while loop

I'm gonna delete everything from here

all right we're gonna start with our


while loop now what is our loop

condition here we don't have a counter


variable in this example instead we want

to check to see if the user entered quit


or not so here we can declare a string

called input and initialize it to an


empty string then we can write a while

loop like this while input does not


equal to quit now this code is not gonna

work because input is a string which is


a reference type and we cannot use

comparison operators between reference


types because these operators will

compare the address or a string objects


not their value so if you have two
strings quit and quit but stored in
different memory locations to have

different addresses so we can use the


inequality operator to compare their

value instead we need to use the equals


method of string objects so we want to

check to see if the input equals quit


now here we need to apply the not

operator so as long as the input does


not equal quit we're gonna continuously

ask the user to enter something so here


we can print a label like input and then

we can use a scanner object to read


something from the terminal so let's

create a scanner object and instantiate


it using system dot in I didn't call

scanner that next this will return a


string so we can store it in this input

variable now with this implementation in


every iteration we're going to create a

new scanner object so if the user enters


10 numbers we're gonna create 10 scanner

objects in memory this is unnecessary


and it's actually a bad practice because

it's going to pollute our memory so it's


better to create the scanner object

outside of a while loop and then simply


use it here also here we are assuming

that the user is typing everything in


lowercase so if they type quit in

uppercase or any combinations of


lowercase and uppercase characters this

logic is not gonna work the way we want


so over here right after reading

something from the terminal we're gonna


call the

to lowercase method of string objects to


convert it to lowercase now to make this

program more interesting let's echo back


whatever the user enters so we simply
print that on the terminal now let's run
this and see what happens

so I'm going to enter if your numbers


like 1 2 & 3 whatever we type gets a

code back but the moment we type quit


our program terminates so while loops

are useful in situations where we don't


know ahead of time how many times we

want to repeat something in Java we have


another type of loop called a do-while

loop it's very similar to a while loop


but it gets executed at least once let

me show you what I mean so I'm gonna


rewrite the same code using a do-while

loop we start with a do keyword then we


create a code block at the end of this

code block we type while followed by our


loop condition so not input dot equals

quit and then we terminate this using a


semicolon now inside the body of this

loop we'll simply copy all these lines


we have here

now compared these two types of loops


with while loops we check the condition

first so if the condition is false the


first time this loop will never get

executed in contrast with do-while loops


we check the condition last so do-while

loops always get executed at least once


even if the condition is false that is

the only difference the reality most of


the time we use while loops do-while

loops are rarely used but there are


certain cases for that so just be aware

of them but most of the time prefer to


use wire loops

we're gonna continue with the example


from the last tutorial this program we

have written has a tiny problem let me


show you so I'm gonna run this enter a

couple numbers these numbers get echo


back beautiful

if we type quit the program terminates


but the word quit also gets echoed back

this is a bit weird so let's look at a


couple ideas for solving this problem

back to our code one way to solve this


problem is to check the input before

printing it so here we can type an if


statement if the input does not equal

quit then we're print it so not equal


input dot equals quit if this condition

is true then we're going to print the


input let's take a look so one to quit

beautiful we solved the problem there is


another way to solve this problem as

well let me show you we can reverse this


condition so if the user types quit you

can immediately jump out of the loop


using the break statement so I'm gonna

remove the nut operator if the user


types quit we're gonna break out of the

loop otherwise we're gonna continue


execution and print this input on a

terminal so when Java sees the break


statement it will ignore everything else

after and it will terminate the loop


let's run the program

once again we enter a couple numbers


followed by quit beautiful so this is

the break statement we also have the


continuous statement that moves control

to the beginning of a loop let me show


you so let's imagine if the user types

pass we don't want to echo that but also


we don't want to terminate the loop you

want to ask the user to try one more


time so after we read the input we can
check to see if input equals pass this
is where we use the continuous statement

when Java sees this it would move


control to the beginning of the loop so

all these other statements are gonna get


ignored and what the user types is not

gonna get printed on the terminal let's


run the program and see this in action

so we type 1 2 pass it doesn't get


echoed back one more time and finally

quit so to recap the break statement


terminates a loop and the continue

statement moves control to the beginning


of a loop now one last thing before

finish this tutorial in this


implementation we don't really need this

loop condition because the moment user


types quit this break statement is gonna

kick in and terminate the loop so we can


simplify this code by using a true as

our loop condition so this is always


true and this loop is gonna get executed

forever until the user types quit this


is a very common technique that you see

amongst professional programmers just


remember if you're using this technique

make sure to have a break statement


otherwise you will end up with an

infinite loop that executes forever it


never terminates and that can be very

dangerous in terms of memory consumption


so if you're using while true make sure

you have a break statement in your loop

the last type of loop we want to look at


is the for each loop in Java we use for

each loops to iterate over arrays or


collections let me show you so I'm going

to start by declaring a string array


called fruit and we initialize this with
three items let's say Apple mango and
orange now let's say we want to iterate

over this array and print each item on a


terminal we can use any of the loops you

learn about earlier like a for loop or a


while loop but we can also use the for

each loop which is a bit easier let me


show you first I'm going to use the for

loop to iterate over this array so we


type for here we declare our loop

variable or loop counter into I we set


it to zero as long as I is less than

fruits that length we're going to


increment I by one after each iteration

and here we simply print fruits of I


let's run the program and see what we

get so we get each item on a new line


beautiful now there is another way to

write the same code using the for each


loop here we type for in parentheses

with declare and loop variable but the


type of this variable should be based on

the type of items in our array so here


we have a string array and that means

every item in this array is a string so


here we should declare a string variable

we call it fruit here we type a colon


and then the name of our array fruits

now in each iteration fruit will hold


the value of one item in this array so

here we don't have to declare a numeric


counter we don't have to write a boolean

expression like this we don't have to


increment our counter it's much easier

to iterate over an array now if we print


fruit we get the exact same result as

before take a look


so the first three items are from our

for loop and here's the result our for


each loop
so this is the for each loop however
this for each loop has a couple of

limitations one limitation is that it's


always forward only so we cannot iterate

over this array from the end to the


beginning in contrast we can easily do

this with a for loop so here we can


initialize I to fruits that length then

we change this operator to greater than


and replace this value with zero so as

long as I is greater than zero we're


going to decrement I the second

limitation of the for each loop is that


here we don't have access to the index

of each item all we have is this loop


variable which holds the value of each

item in this array in contrast in our


for loops we can access both the index

and the actual item so I represents the


index of each item and fruits of I

returns the item at the given index so


if you need the index then you'll have

to use the for loop otherwise it's much


easier to use the for each loop

all right now let's get back to our


mortgage calculator and implement some

basic error handling


so here I've changed this question by

adding this label that identifies the


range of values we can enter so the

minimum amount of loan we can get is


$1,000 and maximum is 1 million dollars

so if I enter 1 here I get this message


enter a number between one thousand and

one million and now we are asked this


question one more time if I keep

entering invalid values I get asked the


same question now let's enter a valid

value like 1 million dollars next we'll


have to enter the annual interest rate

now here we need to enter a value that


is greater than 0 and less than or equal

to 30 so if I enter 0 we get this


message enter a value greater than 0 and

less than or equal to 30


once again we're asked this question one

more time so let's enter a valid value


like 3.9 to here we need to enter a

value between 1 and 30 so if you enter 0


we get an error message and we're asked

the same question so let's enter 30 and


finally we get the result here's our

mortgage or monthly payments so go ahead


and spend five to ten minutes on

extending this mortgage calculator by


adding error-handling to it you'll see

my solution X

all right let me show you how I'm gonna


solve this problem step by step so for

each question we want to validate the


value that the user enters if the value

is invalid you want to keep asking the


same question so this is where we can

use an infinite loop let me show you so


here's our first question principal I'm

gonna wrap these two lines inside an


infinite loop while true

so we're gonna keep asking the same


question until the user enters a valid

value so here after we read the


principle we can write an if statement

like this if principle is greater than


or equal to 1000 and it is less than or

equal to 1 million and here we can use


an underscore to separate these digits

to make our code more readable so if the


user enters a valid value then we can

break out of this infinite loop


otherwise we're gonna print an error

message so enter a value between 1001


million like this ok now if you look on

the right side here you can see this red


bar this indicates an error and here in

this preview window you can see exactly


where we have an error it's down below

on line 30 where we calculate the


mortgage so if you click on this red bar

we jump over here principal is


highlighted in red so here we have a

compilation error cannot resolve symbol


principle here is the reason because

we've wrapped these few lines inside


this while loop and earlier I told you

that whenever you declare a variable


that variable scope to the Block in

which it's defined so this is where we


have declared the principal variable and

it's scoped to this block it's not


available outside of this block that's

why we get this compilation error so to


solve this problem we need to declare

this outside of this while loop we can


do it right here after radicular our

constants so let's say int principle and


we can initialize it to 0 now we remove

the declaration from here and the error


is gone now we need to repeat the same

pattern with other questions so real


quick here's our second question where

we read the annual interest once again


we add an infinite loop

now the moment we read the annual


interests invalidate the data so if

annual interest is greater than or equal


to let's say one and it is less than or

equal to 30 then we're gonna break out


of this infinite loop
now here we should also calculate the
monthly interest so the proper way to do

this is like this if the user enters a


valid value we add a code block here

first we calculate the monthly interest


and then break out of the loop otherwise

we print an error message enter a value


between 1 and 30 okay now if you look to

the right side again we have two


compilation errors monthly interest is

not resolved because we have declared it


inside of this block so let's move the

declaration to the top here we remove


the float keyword and declare monthly

interest over here


that's better and finally for the last

question one more time we're to wrap it


in this infinite loop

this is where we read the number of


years and right after this line we need

to do our data validation so if yours is


greater than or equal to one and it's

less than or equal to 30 here we add a


code block this is where we calculate

the number of payments and then we break


actually I forgot to type an S here

otherwise if the user enters an invalid


value will simply print an error message

enter a value between 1 and 30 now here


once again we have a compilation error

because number of payments cannot be


resolved so we remove the declaration

from here and we'll be to the top right


here number of payments so this is how

we add data validation to this program


the problem is that this code the code

inside the main method is now getting a


little bit too long and this hurt the

maintainability of our program someone


else reading this code they have to look
at all these statements to figure out
what's going on this is where we need to

break this code down into smaller easier


to read and easier to understand chunks

and that's what I'm gonna show you next

so in this section you'll learn how to


control the flow of execution of your

programs we started off by talking about


the comparison operators for comparing

primitive values then we talked about


the logical operators like and or and

not I showed you how we can use these


operators for implementing real word

rules and then we talked about three


types of control flow statements you

learn about conditional statements like


if and switch for making decisions in

our programs then you learn about loops


for executing code repeatedly we looked

at four types of loops for loops while


loops do-while loops and for each loops

and finally we looked at the break and


continue statements for breaking or

jumping to the beginning of a loop I


hope you learned a lot and been enjoying

the course so far

as Martin Fowler said any fool can write


code that a computer can understand good

programmers write code that humans can


understand I can't agree more if you

have seen any of my courses you probably


know that I've put a lot of emphasis on

writing clean code so I have dedicated


this entire section on clean coding

we're going to continue extending our


mortgage calculator and add new features

to it along the way you will see our


code starts to get messy and hard to
maintain so I will show you a few
techniques for changing the structure of

the code and make it clean and beautiful


are you ready let's jump in and get

started

hey guys maj here i want to congratulate


you on your determination for learning I

would really appreciate it if you


support me by liking and sharing this

video also subscribe to my channel and


enable notifications so next time I

upload a video you get notified now if


you want to learn more I would encourage

you to enroll in my ultimate Java series


as I told you earlier this YouTube

tutorial is the first two hours of this


series if you're serious about learning

Java and want to become a professional


job of developer I highly encourage you

to enroll in this series in case you're


interested I put the link down below in

the description box thank you on have a


fantastic day

You might also like