Java Tutorial
- Java - Home
- Java - Overview
- Java - History
- Java - Features
- Java vs C++
- Java Virtual Machine (JVM)
- Java - JDK vs JRE vs JVM
- Java - Hello World Program
- Java - Environment Setup
- Java - Basic Syntax
- Java - Variable Types
- Java - Data Types
- Java - Type Casting
- Java - Unicode System
- Java - Basic Operators
- Java - Comments
Java Control Statements
- Java - Loop Control
- Java - Decision Making
- Java - If-else
- Java - Switch
- Java - For Loops
- Java - For-Each Loops
- Java - While Loops
- Java - do-while Loops
- Java - Break
- Java - Continue
Object Oriented Programming
- Java - OOPs Concepts
- Java - Object & Classes
- Java - Class Attributes
- Java - Class Methods
- Java - Methods
- Java - Variables Scope
- Java - Constructors
- Java - Access Modifiers
- Java - Inheritance
- Java - Aggregation
- Java - Polymorphism
- Java - Overriding
- Java - Method Overloading
- Java - Dynamic Binding
- Java - Static Binding
- Java - Instance Initializer Block
- Java - Abstraction
- Java - Encapsulation
- Java - Interfaces
- Java - Packages
- Java - Inner Classes
- Java - Static Class
- Java - Anonymous Class
- Java - Singleton Class
- Java - Wrapper Classes
- Java - Enums
- Java - Enum Constructor
- Java - Enum Strings
Java Built-in Classes
Java File Handling
- Java - Files
- Java - Create a File
- Java - Write to File
- Java - Read Files
- Java - Delete Files
- Java - Directories
- Java - I/O Streams
Java Error & Exceptions
- Java - Exceptions
- Java - try-catch Block
- Java - try-with-resources
- Java - Multi-catch Block
- Java - Nested try Block
- Java - Finally Block
- Java - throw Exception
- Java - Exception Propagation
- Java - Built-in Exceptions
- Java - Custom Exception
Java Multithreading
- Java - Multithreading
- Java - Thread Life Cycle
- Java - Creating a Thread
- Java - Starting a Thread
- Java - Joining Threads
- Java - Naming Thread
- Java - Thread Scheduler
- Java - Thread Pools
- Java - Main Thread
- Java - Thread Priority
- Java - Daemon Threads
- Java - Thread Group
- Java - Shutdown Hook
Java Synchronization
- Java - Synchronization
- Java - Block Synchronization
- Java - Static Synchronization
- Java - Inter-thread Communication
- Java - Thread Deadlock
- Java - Interrupting a Thread
- Java - Thread Control
- Java - Reentrant Monitor
Java Networking
- Java - Networking
- Java - Socket Programming
- Java - URL Processing
- Java - URL Class
- Java - URLConnection Class
- Java - HttpURLConnection Class
- Java - Socket Class
- Java - Generics
Java Collections
Java Interfaces
- Java - List Interface
- Java - Queue Interface
- Java - Map Interface
- Java - SortedMap Interface
- Java - Set Interface
- Java - SortedSet Interface
Java Data Structures
Java Collections Algorithms
Advanced Java
- Java - Command-Line Arguments
- Java - Lambda Expressions
- Java - Sending Email
- Java - Applet Basics
- Java - Javadoc Comments
- Java - Autoboxing and Unboxing
- Java - File Mismatch Method
- Java - REPL (JShell)
- Java - Multi-Release Jar Files
- Java - Private Interface Methods
- Java - Inner Class Diamond Operator
- Java - Multiresolution Image API
- Java - Collection Factory Methods
- Java - Module System
- Java - Nashorn JavaScript
- Java - Optional Class
- Java - Method References
- Java - Functional Interfaces
- Java - Default Methods
- Java - Base64 Encode Decode
- Java - Switch Expressions
- Java - Teeing Collectors
- Java - Microbenchmark
- Java - Text Blocks
- Java - Dynamic CDS archive
- Java - Z Garbage Collector (ZGC)
- Java - Null Pointer Exception
- Java - Packaging Tools
- Java - Sealed Classes
- Java - Record Classes
- Java - Hidden Classes
- Java - Pattern Matching
- Java - Compact Number Formatting
- Java - Garbage Collection
- Java - JIT Compiler
Java Miscellaneous
- Java - Recursion
- Java - Regular Expressions
- Java - Serialization
- Java - Strings
- Java - Process API Improvements
- Java - Stream API Improvements
- Java - Enhanced @Deprecated Annotation
- Java - CompletableFuture API Improvements
- Java - Streams
- Java - Datetime Api
- Java 8 - New Features
- Java 9 - New Features
- Java 10 - New Features
- Java 11 - New Features
- Java 12 - New Features
- Java 13 - New Features
- Java 14 - New Features
- Java 15 - New Features
- Java 16 - New Features
Java APIs & Frameworks
Java Class References
- Java - Scanner Class
- Java - Arrays Class
- Java - Strings
- Java - Date & Time
- Java - ArrayList
- Java - Vector Class
- Java - Stack Class
- Java - PriorityQueue
- Java - LinkedList
- Java - ArrayDeque
- Java - HashMap
- Java - LinkedHashMap
- Java - WeakHashMap
- Java - EnumMap
- Java - TreeMap
- Java - The IdentityHashMap Class
- Java - HashSet
- Java - EnumSet
- Java - LinkedHashSet
- Java - TreeSet
- Java - BitSet Class
- Java - Dictionary
- Java - Hashtable
- Java - Properties
- Java - Collection Interface
- Java - Array Methods
Java Useful Resources
Java - Nashorn JavaScript Engine
Nashorn JavaScript Engine
Nashorn is a very powerful and performant Javascript Engine in Java. It was introduced in Java 8 to replace the existing javascript engine, Rhino. Nashorn engine is 2 to 10 times faster in performance than it earlier counterpart. It can directly compile the javascript code to the bytcode in memory. It utilizes the dyanamics features introduced in Java 7 to boost performance.
Using Nashorn engine, we can execute JavaScript code in command line tools. We can embed a javascript code in Java file and call the javascript methods in java code base. We can call java methods in javascript as well using jjs.
Execute JavaScript via Command Line Tools
For Nashorn engine, JAVA 8 introduces a new command line tool, jjs, to execute javascript codes at console. jjs is a versatile tool, it can interpret a javascript file as well as javascript code snippet. We can use jjs to even call java methods in a javascript code.
Example
Interpreting js File
Let's first try to create and save the file sample.js in c:\> JAVA folder. This sample.js file is having a single javascript statement to print "Hello World" on the console using print() method.
sample.js
print('Hello World!');
Open console and use the following command. Here jjs will read the sample.js file, interpret the javascript code snippet and execute the code.
C:\JAVA>jjs sample.js
It will produce the following output:
Hello World!
Let's update the sample.js to have a javascript function to be called.
sample.js
function sayMessage(){ print('Hello World!'); } sayMessage();
Open console and use the following command.
C:\JAVA>jjs sample.js
It will produce the following output:
Hello World!
We can evaluate or execute a javascript code snippet using jjs directly as well.
Execute JavaScript Directly in Command Prompt
Open the console and type jjs and press enter button. jjs tool will open an interactive session. Once jjs session is open, we can execute a javascript code. Once done, type quit() and press enter button to exit the jjs interactive session and to return back to the command prompt.
Example
C:\JAVA>jjs jjs> print("Hello, World!") Hello, World! jjs> quit() >> C:\JAVA>
Passing Arguments to jjs
jjs uses a special construct arguments to store the command line arguments passed. See the example below:
Open the console and use the following command.
Example
C:\JAVA> jjs -- a b c jjs> print('letters: ' +arguments) letters: a,b,c jjs> quit() >> C:\JAVA>
Calling JavaScript from Java
Java has a ScriptEngineManager class since Java 6, which can be used to load the javascript engine as ScriptEngine instance. Once engine is loaded in the java code, we can call eval() method to evaluate a JavaScript code in Java. We can even use Java variable(s) in javascript code snippet.
Example
Create the following Java program using any editor of your choice in, say, C:\> JAVA.
Java8Tester.java
import javax.script.ScriptEngineManager; import javax.script.ScriptEngine; import javax.script.ScriptException; public class Java8Tester { public static void main(String args[]) { // create the script engine manager ScriptEngineManager scriptEngineManager = new ScriptEngineManager(); // load the Nashorn javascript engine ScriptEngine nashorn = scriptEngineManager.getEngineByName("nashorn"); String name = "Mahesh"; Integer result = null; try { // call the javascript function, pass a java variable nashorn.eval("print('" + name + "')"); // call the javascript function and get the result back in java result = (Integer) nashorn.eval("10 + 2"); } catch(ScriptException e) { System.out.println("Error executing script: "+ e.getMessage()); } System.out.println(result.toString()); } }
Verify the Result
Compile the class using javac compiler as follows −
C:\JAVA>javac Java8Tester.java
Now run the Java8Tester as follows −
C:\JAVA>java Java8Tester
It should produce the following result −
Mahesh 12
Calling Java from JavaScript
Using jjs tool, we can even call Java code in a Javascript code snippet. In following example, we've created a BigDecimal type first by using Java.type ('java.math.BigDecimal'). Once BigDecimal class is loaded, we can use its method within JavaScript code as shown below:
Example
Create and save sample.js in c:\> JAVA folder.
sample.js
// import BigDecimal java class var BigDecimal = Java.type('java.math.BigDecimal'); function calculate(amount, percentage) { // use the BigDecimal class instances to showcase BigDecimal calculations var result = new BigDecimal(amount).multiply(new BigDecimal(percentage)).divide( new BigDecimal("100"), 2, BigDecimal.ROUND_HALF_EVEN); return result.toPlainString(); } var result = calculate(568000000000000000023,13.9); print(result);
Open the console and use the following command.
C:\JAVA>jjs sample.js
It should produce the following output −
78952000000000000003.20