Transcript for:
Java Programming Lecture by Mosh

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 java.com 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 indeed.com 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