How do you learn Java? 

After you have some foundational knowledge, the best thing to do is just jump in with Java projects for beginners. Java is a complex language, but you can hit the ground running very fast. The more you do, the more you’ll know.

Let’s take a look at some of the best Java projects for beginners. Add these projects to your Github, and you’ll have a Java programming portfolio in the making.

1. Develop your own currency converter

This is one of the best Java project ideas to start with, because it’s pretty simple. A currency converter just needs three inputs: the amount, the original currency, and the currency you’re trying to convert to. From there, everything is in the back-end. (You’ll have to write the conversion rates on your own.)

Java Programming Masterclass covering Java 11 & Java 17

Last Updated February 2022

Bestseller
  • 401 lectures
  • All Levels
4.6 (164,055)

Learn Java In This Course And Become a Computer Programmer. Obtain valuable Core Java Skills And Java Certification | By Tim Buchalka, Tim Buchalka’s Learn Programming Academy

Explore Course

Challenge yourself

package currencyConverter;

import java.util.ArrayList;

import java.util.HashMap;

public class Currency {

private String name;

private String shortName;

private HashMap<String, Double> exchangeValues = new HashMap<String, Double>();

// “Currency” Constructor

public Currency(String nameValue, String shortNameValue) {

this.name = nameValue;

this.shortName = shortNameValue;

}

// Getter for name

public String getName() {

return this.name;

}

// Setter for name

public void setName(String name) {

this.name = name;

}

// Getter for shortName

public String getShortName() {

return this.shortName;

}

// Setter for shortName

public void setShortName(String shortName) {

this.shortName = shortName;

}

// Getter for exchangeValues

public HashMap<String, Double> getExchangeValues() {

return this.exchangeValues;

}

// Setter for exchangeValues

public void setExchangeValues(String key, Double value) {

this.exchangeValues.put(key, value);

}

// Set default values for a currency

public void defaultValues() {

String currency = this.name;

switch (currency) {

case “US Dollar”:

this.exchangeValues.put(“USD”, 1.00);

this.exchangeValues.put(“EUR”, 0.93);

this.exchangeValues.put(“GBP”, 0.66);

this.exchangeValues.put(“CHF”, 1.01);

this.exchangeValues.put(“CNY”, 6.36);

this.exchangeValues.put(“JPY”, 123.54);

break;

case “Euro”:

this.exchangeValues.put(“USD”, 1.073);

this.exchangeValues.put(“EUR”, 1.00);

this.exchangeValues.put(“GBP”, 0.71);

this.exchangeValues.put(“CHF”, 1.08);

this.exchangeValues.put(“CNY”, 6.83);

this.exchangeValues.put(“JPY”, 132.57);

break;

case “British Pound”:

this.exchangeValues.put(“USD”, 1.51);

this.exchangeValues.put(“EUR”, 1.41);

this.exchangeValues.put(“GBP”, 1.00);

this.exchangeValues.put(“CHF”, 1.52);

this.exchangeValues.put(“CNY”, 9.60);

this.exchangeValues.put(“JPY”, 186.41);

break;

case “Swiss Franc”:

this.exchangeValues.put(“USD”, 0.99);

this.exchangeValues.put(“EUR”, 0.93);

this.exchangeValues.put(“GBP”, 0.66);

this.exchangeValues.put(“CHF”, 1.00);

this.exchangeValues.put(“CNY”, 6.33);

this.exchangeValues.put(“JPY”, 122.84);

break;

case “Chinese Yuan Renminbi”:

this.exchangeValues.put(“USD”, 0.16);

this.exchangeValues.put(“EUR”, 0.15);

this.exchangeValues.put(“GBP”, 0.11);

this.exchangeValues.put(“CHF”, 0.16);

this.exchangeValues.put(“CNY”, 1.00);

this.exchangeValues.put(“JPY”, 19.41);

break;

case “Japanese Yen”:

this.exchangeValues.put(“USD”, 0.008);

this.exchangeValues.put(“EUR”, 0.007);

this.exchangeValues.put(“GBP”, 0.005);

this.exchangeValues.put(“CHF”, 0.008);

this.exchangeValues.put(“CNY”, 0.051);

this.exchangeValues.put(“JPY”, 1.000);

break;

}

}

// Initialize currencies

public static ArrayList<Currency> init() {

ArrayList<Currency> currencies = new ArrayList<Currency>();

currencies.add( new Currency(“US Dollar”, “USD”) );

currencies.add( new Currency(“Euro”, “EUR”) );

currencies.add( new Currency(“British Pound”, “GBP”) );

currencies.add( new Currency(“Swiss Franc”, “CHF”) );

currencies.add( new Currency(“Chinese Yuan Renminbi”, “CNY”) );

currencies.add( new Currency(“Japanese Yen”, “JPY”) );

for (Integer i =0; i < currencies.size(); i++) {

currencies.get(i).defaultValues();

}

return currencies;

}

// Convert a currency to another

public static Double convert(Double amount, Double exchangeValue) {

Double price;

price = amount * exchangeValue;

price = Math.round(price * 100d) / 100d;

return price;

}

}

2. Try out a number guessing game

Games are a fun way to learn java. While you might not be able to create an adventure game out of whole cloth, you can get started with a number guessing game. This game generates a random number and lets the user select a guess. If you want to get more advanced, let the game give the user hints (“my number is more” or “my number is less”). You can also give the user limited time or limited guesses. 

Challenge yourself

/*Programmer:  Christopher Guzman

Program Purpose:  <Number Guessing Game2>

Project:  IT106 Lab 6 Exercise 2

Date:  November 28, 2012*/

//Imports//

import java.util.Scanner;

import java.util.Random;

public class guessingGame2

{

static int numRandom()//custom function numRandom()

{

Random generator=new Random();

int numRandom=generator.nextInt(100)+1;

return numRandom;

}

public static void main(String[] str)

{

//Variable Declaration//

int numRandom;

int numGuess1;

int numGuess2;

int numGuess3;

String display1=” !!!You guessed it right!!!”;

String display2=” !!!Sorry, that is not correct!!!”;

String display3=”     The correct number is “;

String greeting1=”             !!!Welcome to the Guessing Game!!!”;

String greeting2=”  !!!Where you get 3 chances to guess a number from 1 to 100 and see if you’re right!!!”;

String prompt1=” Would you like to play?”;

String choice1=” 1. Yes”;

String choice2=” 2. No”;

String prompt2=” Please enter a number 1 to 100:  “;

String second=” Please enter your second quess:  “;

String last=” Please enter your final guess:  “;

String prompt3=” Would you like to play again?”;

String goodbye1=”     !!!Goodbye!!!”;

String goodbye2=”     !!!  Thanks for playing!!!”;

int reply=0;

//Scanner object//

Scanner keyboard=new Scanner(System.in);

//Main Program//

System.out.println(greeting1);

System.out.println(“”);

System.out.println(greeting2);

System.out.println(“”);

System.out.println(prompt1);System.out.println(choice1);System.out.println(choice2);

reply = keyboard.nextInt();

//Begin while loop//

while (reply==1)

{

numRandom=numRandom();//calling for a random number.// 

System.out.print(prompt2);

numGuess1=keyboard.nextInt();

System.out.println(“”);System.out.print(second);

numGuess2=keyboard.nextInt();

System.out.println(“”);System.out.print(last);

numGuess3=keyboard.nextInt();

if (numGuess1==numRandom||numGuess2==numRandom||numGuess3==numRandom)              //if loop1//

{

System.out.println(“”);

System.out.println(display1);

System.out.println(“”);

}

else

{

System.out.println(“”);

System.out.println(display2);

System.out.println(“”);

System.out.println(display3+numRandom+”.”);

System.out.println(“”);

}

System.out.println(prompt3);

System.out.println(choice1);

System.out.println(choice2);

reply=keyboard.nextInt();

if (reply==2)

{

System.out.println(goodbye2);

}

}

while (reply==2)

for(;reply>=2;reply–)

{

System.out.println(goodbye1);

}

}

}

3. Build a “breakout” game

A “breakout” brick breaker game requires a little mathematics, which is what makes it great for practice projects. You will need to send a ball from the paddle up to the bricks. You will need to destroy every brick that gets hit, which involves something called “collision detection.” This is one of the quintessential Java programming tasks, and you can find a lot of code snippets to help you build it out.

Challenge yourself

Github: Breakout (catstavi)

Everyone can use a calculator from time to time!

4. Make a simple calculator

A calculator lets you explore the functions of Java mathematics, such as exponents. Java developers work with mathematics quite a lot. You can create a simple calculator GUI that lets users type in or click on numbers and then presents their results. This also offers you the opportunity to experiment with developing a clean user interface.

Challenge yourself

/**

 * @name        Simple Java Calculator

 * @package     ph.calculator

 * @file        Main.java

 * @author      SORIA Pierre-Henry

 * @email       [email protected]

 * @link        http://github.com/pH-7

 * @copyright   Copyright Pierre-Henry SORIA, All Rights Reserved.

 * @license     Apache (http://www.apache.org/licenses/LICENSE-2.0)

 */

package simplejavacalculator;

import static java.lang.Double.NaN;

import static java.lang.Math.log;

import static java.lang.Math.log10;

import static java.lang.Math.pow;

public class Calculator {

    public enum BiOperatorModes {

        normal, add, minus, multiply, divide , xpowerofy 

    }

    public enum MonoOperatorModes {

        square, squareRoot, oneDividedBy, cos, sin, tan ,log , rate, abs

    }

    private Double num1, num2;

    private BiOperatorModes mode = BiOperatorModes.normal;

    private Double calculateBiImpl() {

        if (mode == BiOperatorModes.normal) {

            return num2;

        }

        if (mode == BiOperatorModes.add) {

            if (num2 != 0) {

                return num1 + num2;

            }

            return num1;

        }

        if (mode == BiOperatorModes.minus) {

            return num1 – num2;

        }

        if (mode == BiOperatorModes.multiply) {

            return num1 * num2;

        }

        if (mode == BiOperatorModes.divide) {

            return num1 / num2;

        }

        if (mode == BiOperatorModes.xpowerofy) {

            return pow(num1,num2);

        }

        // never reach

        throw new Error();

    }

    public Double calculateBi(BiOperatorModes newMode, Double num) {

        if (mode == BiOperatorModes.normal) {

            num2 = 0.0;

            num1 = num;

            mode = newMode;

            return NaN;

        } else {

            num2 = num;

            num1 = calculateBiImpl();

            mode = newMode;

            return num1;

        }

    }

    public Double calculateEqual(Double num) {

        return calculateBi(BiOperatorModes.normal, num);

    }

    public Double reset() {

        num2 = 0.0;

        num1 = 0.0;

        mode = BiOperatorModes.normal;

        return NaN;

    }

    public Double calculateMono(MonoOperatorModes newMode, Double num) {

        if (newMode == MonoOperatorModes.square) {

            return num * num;

        }

        if (newMode == MonoOperatorModes.squareRoot) {

            return Math.sqrt(num);

        }

        if (newMode == MonoOperatorModes.oneDividedBy) {

            return 1 / num;

        }

        if (newMode == MonoOperatorModes.cos) {

            return Math.cos(Math.toRadians(num));

        }

        if (newMode == MonoOperatorModes.sin) {

            return Math.sin(Math.toRadians(num));

        }

        if (newMode == MonoOperatorModes.tan) {

            if (num == 0 || num % 180 == 0) {

                return 0.0;

            }

            if (num % 90 == 0 && num % 180 != 0) {

                return NaN;

            }

            return Math.tan(Math.toRadians(num));

        }

        if (newMode == MonoOperatorModes.log) {

            return log10(num);

        }

        if (newMode == MonoOperatorModes.rate) {

           return num / 100;

        }

        if (newMode == MonoOperatorModes.abs){

            return Math.abs(num);

        }

        // never reach

        throw new Error();

    }

}

5. Create a temperature converter

A temperature converter is another of the most basic projects for beginners. It’s very similar to a currency converter, but it’s even a little easier; you don’t have to look up all those currency conversions. A temperature converter will help you brush up on your GUI Java skills. You could have it display different icons for different weather. (20° F might be a winter image, for instance.)

Challenge yourself

Github: temperature-converter

6. Develop the “Snake” game

Everyone with an old Nokia phone remembers the “Snake” game, and that makes it another great project for beginners. In the Snake game, you’ll have to detect whether the snake collides with itself. And the snake will need to get longer and longer. You can find the basics of this game everywhere, because it’s open source. The snake will keep getting faster and faster until the user loses!

Challenge yourself

Github: java-snake-game (janbodnar)

7. Create a checkbook balancing program

It might not be a full-fledged banking application, but it is useful! A checkbook balancing program is one of the best project ideas for beginners because it requires a little transactional mathematics and can be extended significantly. Enter in your deposits and your payments and see how much your ending balance is. 

Challenge yourself

Github: checkbook (christiancho)

8. Build a “Pong” game

Pong is similar to Break Out, but there’s a difference: Usually there are two players. You can create a practice project that has either an automated second player or that allows another player to control the second paddle. As far as practice projects go, this is a fun one because it involves another person.

Challenge yourself

Github: Pong (mihneadb)

9. Design a “Flappy Bird” game

You probably remember the Flappy Bird game! And it’s actually one of the best project ideas for beginners because it’s so simple. You can create it in any object-oriented programming language. You begin with the bird, and the bird goes up when you press a key. Meanwhile, there are items at the bottom (and top) that can collide with the bird. You can even create web apps that mimic this behavior.

Challenge yourself

Github: FlappyBird (grantitus)

10. Make a billing and invoicing system

Like a checkbook, billing and invoicing is critical to everyday life. Develop a system where you can enter in a user ID and client ID and send out a bill or an invoice. Track the invoices within the system and make it possible to check them off when they’ve been paid. Your system will need to be able to support adding clients and invoices.

Challenge yourself

Github: Billing-System-Java- (jjilka)

An ATM can be excellent GUI practice.

11. Make an ATM interface

Here’s a fun GUI project: an ATM interface. Develop the interface of an ATM such that someone would enter their card number and their PIN. Add everything that they would do, such as withdraw money, deposit money, or just check their balance. It may seem strange, but this is everything you need to develop any GUI, whether it’s a video game or an email application.

Challenge yourself

import java.util.*;//Scanner

import java.lang.*;

public class ATM{

    public static void main(String[]args){

        //init Scanner 

        Scanner sc = new Scanner(System.in);

        //init bank

        Bank theBank = new Bank(“State Bank Of India”);

        //add user ,whichalso creates a savings account

        User aUser = theBank.addUser(“Aarsh”,”Dhokai”,”1111″);

        //add a checking account for our user 

        Account newAccount = new Account(“Checking”,aUser,theBank);

        aUser.addAccount(newAccount);

        theBank.addAccount(newAccount);

        User curUser;

        while (true){

            //stay in the login prompt until successful login

            curUser = ATM.mainMenuPrompt(theBank,sc);

            //stay in main menu until user quits

            ATM.printUserMenu(curUser,sc);

        }

    }

    public static User mainMenuPrompt(Bank theBank,Scanner sc){

        //init

        String userID;

        String pin;

        User authUser;

        //prompt the user for user id and pincombo until a correct one is reached

        do{

            System.out.println(“\n\nWelcome to “+theBank.getName()+”\n\n”);

            System.out.print(“Enter User ID : “);

            userID = sc.nextLine();

            System.out.println();

            System.out.print(“Enter Pin : “);

            pin = sc.nextLine();

            //try to get the user object corresponding to th ID and pin Combo 

            authUser = theBank.userLogin(userID,pin);

            if(authUser == null){

                System.out.println(“incorrect User ID/Pin, Please try again”);

            }

        }while(authUser==null);//continue login until successful login

        return authUser;

    }

    public static void printUserMenu(User theUser,Scanner sc){

        //print a summary of user’s account

        theUser.printAccountSummary();

        //init choice

        int choice;

        //user menu

        do{

            System.out.println(“Welcome “+theUser.getFirstName()+” What would you like to do”);

            System.out.println(“1>Show Transaction History”);

            System.out.println(“2>withdraw”);

            System.out.println(“3>Deposite”);

            System.out.println(“4>Transfer”);

            System.out.println(“5>Quit”);

            System.out.println();

            System.out.println(“Enter Your Choice : “);

            choice = sc.nextInt();

            if(choice<1 || choice>5){

                System.out.println(“Invalid Choice”+” Please choose between 1-5 “);  

            } 

        }while(choice<1 || choice>5);

        //process the choice

        switch(choice){

            case 1:

                ATM.showTransactionHistory(theUser,sc);

                break;

            case 2:

                ATM.withdrawFunds(theUser,sc);

                break;

            case 3:

                ATM.depositeFunds(theUser,sc);

                break;

            case 4:

                ATM.transferFunds(theUser,sc);

                break;

            case 5:

                 //gobble up rest of previous input

                 sc.nextLine();

                 break;

        }

        //redisplay this menu unless user quit

        if(choice != 5){

            ATM.printUserMenu(theUser,sc);

        }

    }

    public static void showTransactionHistory(User theUser,Scanner sc){

        int theAct;

        //get account whose history to look at

        do{

            System.out.printf(“Enter the number (1-%d) of the account\n”+” whose transaction you waant to see : “,theUser.numAccounts());

            theAct = sc.nextInt()-1;

            if(theAct < 0 || theAct >= theUser.numAccounts()){

                System.out.println(“Invalid account. please try again…..”);

            }

        }while(theAct < 0 || theAct >= theUser.numAccounts());

        //Print transaction history

        theUser.printActTransHistory(theAct);

    }

    public static void transferFunds(User theUser,Scanner sc){

        //intits

        int fromAct;

        int toAct;

        double amount;

        double actBal;

        //get the account to transfer from

        do{

            System.out.printf(“Enter the number (1-%d) of the account\n”+”to transfer from:”,theUser.numAccounts());

            fromAct = sc.nextInt()-1;

            if(fromAct < 0 || fromAct >= theUser.numAccounts()){

                System.out.println(“Invalid account. please try again…..”);

            }

        }while(fromAct < 0 || fromAct >= theUser.numAccounts());

        actBal = theUser.getAccountBalance(fromAct);

        //get the account to transfer to 

        do{

            System.out.printf(“Enter the number (1-%d) of the account\n”+”to transfer to:”,theUser.numAccounts());

            toAct = sc.nextInt()-1;

            if(toAct < 0 || toAct >= theUser.numAccounts()){

                System.out.println(“Invalid account. please try again…..”);

            }

        }while(toAct < 0 || toAct >= theUser.numAccounts());

        //get the amount to traansfer

        do{

            System.out.println(“Enter the amount to transfer (max than $”+actBal+”) : $”);

            amount = sc.nextDouble();

            if(amount < 0){

                System.out.println(“Amount must be greater than zero”);

            }else if(amount > actBal){

                System.out.println(“Amount must not be greater than \n”+”balance of $”+actBal);

            }

        }while(amount < 0 || amount>actBal);

        //do the transfer

        theUser.addActTransaction(fromAct,-1*amount,String.format(“Transfer to account “+theUser.getActUUID(toAct)));

        theUser.addActTransaction(toAct,amount,String.format(“Transfer to account “+theUser.getActUUID(fromAct)));

    }

    public static void withdrawFunds(User theUser,Scanner sc){

        int fromAct;

        String memo;

        double amount;

        double actBal;

        //get the account to transfer from

        do{

            System.out.printf(“Enter the number (1-%d) of the account\n”+”Where to withdraw :”,theUser.numAccounts());

            fromAct = sc.nextInt()-1;

            if(fromAct < 0 || fromAct >= theUser.numAccounts()){

                System.out.println(“Invalid account. please try again…..”);

            }

        }while(fromAct < 0 || fromAct >= theUser.numAccounts());

        actBal = theUser.getAccountBalance(fromAct);

        //get the amount to traansfer

        do{

            System.out.println(“Enter the amount to withdraw (max $ “+actBal+”): $”);

            amount = sc.nextDouble();

            if(amount < 0){

                System.out.println(“Amount must be greater than zero”);

            }else if(amount > actBal){

                System.out.println(“Amount must not be greater than \n”+”balance of $”+actBal);

            }

        }while(amount < 0 || amount>actBal);

        //gobble up rest of previous input

        sc.nextLine();

        //get a memo

        System.out.println(“Enter a memo: “);

        memo = sc.nextLine();

        //do withdrawal

        theUser.addActTransaction(fromAct,-1*amount,memo);        

    }

    public static void depositeFunds(User theUser,Scanner sc){

        int toAct;

        String memo;

        double amount;

        double actBal;

        //get the account to transfer from

        do{

            System.out.printf(“Enter the number (1-%d) of the account\n”+”Where to Deposite:”,theUser.numAccounts());

            toAct = sc.nextInt()-1;

            if(toAct < 0 || toAct >= theUser.numAccounts()){

                System.out.println(“Invalid account. please try again…..”);

            }

        }while(toAct < 0 || toAct >= theUser.numAccounts());

        actBal = theUser.getAccountBalance(toAct);

        //get the amount to transfer

        do{

            System.out.print(“Enter the amount to deposite (max than $”+actBal+”) :$”);

            amount = sc.nextDouble();

            if(amount < 0){

                System.out.println(“Amount must be greater than zero”);

            }

        }while(amount < 0 );

        //gobble up rest of previous input

        sc.nextLine();

        //get a memo

        System.out.println(“Enter a memo: “);

        memo = sc.nextLine();

        //do withdrawal

        theUser.addActTransaction(toAct,amount,memo);             

    }

}

12. Create a text-based adventure game

A text-based adventure game is an opportunity to dig into the console version of Java without having to get into a GUI at all. But you’ll still need to track quite a lot, like the state of the game, the player’s inventory, and the actions the player can take (and has taken). Developing a text-based adventure game can be a little difficult, but it’s mostly time-consuming. And at the end, you’ll have a full game!

Challenge yourself

Github: Jadventure (Progether)

13. Develop a “memory” game

Memory games are an interesting experiment in saving state. You will randomize the position of tiles (building a GUI for it) and then let the player turn over those tiles. The goal is for the player to be able to match all the tiles. As the tiles are matched, they are destroyed. Everyone knows how to play a memory game, so it’ll be a fun one for your friends to test.

Challenge Yourself

Github: MemoryGame (CodingGent)

14. Create a digital clock

When you’re first starting out with GUI management, you really want to start simple. A digital clock is perfect for that because it’s easy to create but it’s a little harder to make sophisticated. Create a digital clock that doesn’t just tell the time but changes as time progresses. You’ll just need to use Java’s time-based functions.

Challenge yourself

package GUITools;

import java.awt.*;

import javax.swing.*;

import java.text.SimpleDateFormat;

import java.util.*;

class DigitalClock{

public static final int TWELVE_HOUR = 12;

public static final int TWENTY_FOUR_HOUR = 24;

private int format = 24;

private boolean displaySeconds = true;

private boolean displaySecondTick = false;

public DigitalClock() {}

// get current time

public String timeNow() {

StringBuilder time = new StringBuilder();

String format = “”;

Calendar now = Calendar.getInstance();

int hrs = now.get(Calendar.HOUR_OF_DAY);

int min = now.get(Calendar.MINUTE);

int sec = now.get(Calendar.SECOND);

if(this.getFormat() == 12){

if(hrs > 12){

hrs = hrs – 12;

format = ” p.m.”;

}else{

format = ” a.m.”;

}

time.append(hrs + “:” + zero(min));

}else{

time.append(zero(hrs) + “:” + zero(min));

}

if(this.displaySeconds){

time.append(“:” + zero(sec));

}

if(((sec % 2) !=0) && this.displaySecondTick){

return time.append(format).toString().replace(“:”, ” “);

}else{

return time.append(format).toString();

}

}

public Long timeNowUnixtime(){

return ((new Date()).getTime()/1000);

}

public String zero(int num) {

String number = (num < 10) ? (“0” + num) : (“” + num);

return number; // Add leading zero if needed

}

@Override

public String toString() {

return timeNow();

}

public void disableSeconds(){

this.displaySeconds = false;

}

public void disableSecondTick(){

this.displaySecondTick = false;

}

public void enableSecondTick(){

this.displaySecondTick = true;

}

public void enableSeconds(){

this.displaySeconds = true;

}

public int getFormat() {

return format;

}

public void setFormat(int format) {

this.format = format;

}

}

15. Make a “quiz” game

A quiz game can give the user a sequence of questions, potentially each harder than the last. The user has to select the right answer, generally from a multiple choice array. The quiz game then assigns points for the ones the user has gotten correct. A quiz game can be about anything at all — and it can be fun to see the eventual results.

Challenge yourself

Github: java-quiz (mikbergs)

16. Develop a reservation system

Let’s develop a reservation system. You can make it anything you want, like an airline reservation system. You will need to be able to book passengers on specific flights. You will also need to add specific flights. As the “booking agent,” you should be able to search for flights to put passengers on, and you should receive an  alert when the flight is “full.”

Challenge yourself

Github: airlines-reservation-system

17. Create an email client

A full email application might be a little more advanced, but a general email client actually isn’t. It’s very easy to send and receive emails as long as you have access to an email server. Make it possible to type in an email address, subject, and body, and send that along from your email. This is the first step you’ll need for any type of email integration.

Challenge yourself

Github: java-email-client (tech-geek29)

18. Read an RSS feed

RSS feeds are a quick way to get the news. But how do you manage them? Create a system that will pull up a given RSS feed and read it for you. You will need to create a system that can read the RSS format and translate it into something that’s human-readable. This conversion process (and the import process) is valuable to learn.

Challenge yourself

Github: rssreader (w3stling)

It’s time to sit down and watch a movie.

19. Make a movie recommendation system

What do you want to watch next? It’s easy — let’s turn to Java! A movie recommendation system will store information about movies and recommend a movie to you based on the type of movie that you like. You can ask it for a comedy, a horror, or anything else that you program in, and the system will randomize an answer based on your preferences.

Challenge yourself

Github: Movie-Recommendation-System (NishantChaudary1)

20. Create a simple chat application

At the beginning of the web, chat applications were there — and they’re still one of the most popular apps today. Create a simple chat application, through which you can communicate with another user in real-time. This will test your ability to develop Java net code and web apps. Your application should let at least two people talk to each other.

Challenge yourself

Github: java-chat-app

21. Make an inventory management system

It’s not just for business. Have you ever wondered what ingredients you have for dinner? Or what tea you have available for breakfast? An inventory management system can help you track books, movies, DVDs, and more. It’s a simple project, too: You just need to create a list of items and categorize them.

Challenge yourself

Github: Easy-Inventory (achyutdev)

Finding more Java projects for beginners

Need more inspiration? You can take a look at some Java code examples — or just think about what you want to do. Java is one of the most robust, flexible languages available — if there’s something you can think of, Java can probably do it!

And if you need to brush up on Java and learn more about what you can do with it, you can take a class, go through a bootcamp, or just walk yourself through a few lessons. One of the principle advantages of learning Java is that it’s such an extraordinarily well-documented language — with many tutorials, videos, and code snippets available.

Page Last Updated: March 2022

Top courses in Java

Java Programming Masterclass covering Java 11 & Java 17
Tim Buchalka, Tim Buchalka's Learn Programming Academy
4.6 (164,056)
Bestseller
Java for Absolute Beginners
Nick H
4.6 (5,058)
Java Programming for Complete Beginners
in28Minutes Official
4.5 (25,817)
Complete Core Java In Simple Way
DURGASOFT NAGOOR BABU
4.5 (501)
Develop Minecraft Plugins (Java)
Stephen King
4.7 (2,903)
Bestseller
What's New in Java 9 - Modules and More!
Tim Buchalka's Learn Programming Academy, Dr. Frank Mitropoulos
4.6 (721)
JAVA Immersive Learning Course
Matthew Fried
4.9 (58)

More Java Courses

Java students also learn

Empower your team. Lead the industry.

Get a subscription to a library of online courses and digital learning tools for your organization with Udemy for Business.

Request a demo