TweetFollow Us on Twitter

Java Break
Volume Number:12
Issue Number:5
Column Tag:Getting Started

Java Break

By Dave Mark

Note: Source code files accompanying article are located on MacTech CD-ROM or source code disks.

Over the next few months, we’re going to take a break from PowerPlant and play around with the Java programming language. Why spend time on Java? Java is extremely popular. Java is a cool language. Many people think Java is a better language than both C and C++. Java offers an elegant mechanism for developing software that will run on a Mac, Windows machine, or a Unix box, all without recompiling.

If you are even a little interested in the World Wide Web, you should definitely learn Java. While you’ll use HTML (or an HTML-generating program) to create your web content, you can greatly enhance your Web pages by calling up Java applets from within your HTML.

Java Is Not C++

You will frequently see Java compared to C++. Though Java is very similar to C++, there are many major differences. For starters, Java doesn’t support pointers, is designed to support multi-threading, and does its own garbage collection and dynamic memory management. To add a user interface to a C++ program, you’ll take advantage of a Toolbox designed for a specific platform (in our case, we use the Mac Toolbox). To add an interface to a Java applet, you’ll take advantage of a Java-specific, platform-independent interface library called the AWT (advanced windowing toolkit) that ships with your development environment.

Java is, however, very similar to C++. As we go through our Java examples, you’ll find very few clues that this isn’t straight C++ code. Of course, I’ll do my best to point out the differences.

Before you read on, you might want to take some time to get a bit of background on the Java language. The March issue of MacTech Magazine had an excellent article by Richard Cardona called Writing Java 102 that is definitely worth a read. Of course, there have been a number of other Java articles, and there is also a steadily increasing deluge of Java books hitting the market. Check ’em out, pick one you like, dig in and learn the basics.

Getting Java on Your Machine

Before you can work with Java, you’ll need to get hold of a Java development environment. There are several choices. For starters, you can visit Sun’s Java web site (http://java.sun.com) and download the Macintosh version of the Java Development Kit (JDK). The JDK is free (except, of course, for any internet access fees) and fairly straightforward to use. It consists of all the files you need to do Java development, along with a Java compiler and an applet runner called Applet Viewer. The real problem with the JDK is that it is not a development environment, but rather a collection of tools. To compile a file, you either drop the file onto the compiler or, from inside the compiler, you select Open... from the File menu and select the file you want to compile. To edit your source code, you use SimpleText, BBEdit, or some other plain text editor. To run the compiled .class file, you go back to the Finder and drag the .class file onto the Applet Viewer. All this back-and-forth between tools and the Finder is a real pain. On the other hand, I don’t think Sun really intended the JDK to be the programmer’s choice for Java development.

Another choice for Java development is Roaster, which was released in January by Natural Intelligence. Roaster uses an integrated development environment (like CodeWarrior and SC++), allowing you to edit, compile, and run your applets from within the environment. The January release of Roaster sold for $299.

By the time you read this, Metrowerks will have shipped Discover Java, their professional Java development environment. Discover Java sells for $99, and comes with an electronic copy of Learn Java on the Macintosh by Barry Boone (Addison-Wesley, 1996). The Java development tools also ship on CodeWarrior Gold 9, so if you already subscribe to CW Gold, about all you’ll be missing is the book. Since I’m writing this about three months before Discover Java and CW9 hit the streets, check with Metrowerks (http://www.metrowerks.com, or call (800) 377-5416 or send email to sales@metrowerks.com) to get the latest on pricing and availability.

Finally, Symantec has announced Java support for the Macintosh via a product called Café. According to a press release on their Web site, Café will ship on the SC++ CD and was scheduled to ship in the first quarter of 1996.

Your First Application: Hello

Before we dig in to our first example, a quick word about terminology. Strictly speaking, the term applet applies to a Java class that is derived from the class java.applet.Applet and launched from an HTML page via the <applet> tag. Since none of our first few examples fit this definition, they are not really applets. On the other hand, these little examples aren’t really applications in the true sense of the word, since that implies that they run independent of our Java environment. However, since the term “applet” is so specific, we’ll stick with the term “application” until next month when we build our first true applet.

Our first Java application will display the obligatory “Hello, world!” message:

public class hello
{
 public static void main(String argv[])
 {
 System.out.println("Hello, world!");
 }
}

Create a new file, type in this code, then save the file as hello.java. Just as you’d end your C source code file with the extension .c and your C++ source code file with .cp or .cpp, the extension .java is used to denote a Java source code file.

If you are using the JDK, drag the file hello.java onto the application named Java Compiler (gee, guess what this is). The compiler will convert your source code into Java byte code, intended for a Java interpreter that will turn these byte codes into the instructions specific to the machine it is running on. The interpreter is part of the virtual machine, the layer that lies between the platform-independent Java byte code and your machine.

The compiler writes the Java byte code into a file named xxx.class, where xxx is the name of the class you’ve implemented. In this case, the compiler will create a file called hello.class. Again, if you are using the JDK, drag the file hello.class onto the application named Applet Viewer. As you might expect, the Applet Viewer will start running at the public method named main().

The output of this application is shown in Figure 1. Notice that the window is named stdout. If you’ve ever spent any time in the Unix universe, you know that stdout stands for “standard output”. The method System.out.println() sends its output to the stdout window followed by a carriage return. The method System.out.print() sends its output to the stdout window without generating a carriage return.

Figure 1. The output from the hello.class application

System.out.println() is a lot like printf() or cout in that they all send their output to a console window. Just as you first learned to program using consoles and eventually moved to the Mac Toolbox for your user interface, we’ll start with System.out.println() and eventually move on to the user interface routines in the AWT (advanced windowing toolkit). You’ll use the AWT to implement a user interface you’ll want to appear on a web page.

Don’t worry too much about the structure of our Java source code just yet. The three applications in this month’s column all use the same basic structure: a class wrapper with a single public method called main(). Oh yeah, in Java, a class’ functions are called methods instead of member functions.

Your Second Application: StringTester

Our second application, stringTester, introduces an important Java data type: String. As its name suggests, the String class was implemented to work with strings. Unlike C and Pascal strings, a Java String is an object, complete with variables (the Java term for data members) and methods. Our third applica-tion, stringMethods, will demonstrate some of the String methods. This application, stringTester, will get us started.

Here’s the source...

public class stringTester
{
 public static void main(String argv[])
 {
 String string1, string2 = ", world!";
 
 string1 = "Hello";
 
 System.out.print( string1 );
 System.out.println( string2 );
 System.out.println( string1 + string2 );
 
 string1 += string2;
 System.out.println( string1 );
 
 System.out.println( "Length of this string: " + 
 string1.length() );
 }
}

The first few lines show you two ways to create and initialize a String:

 String string1, string2 = ", world!";
 
 string1 = "Hello";

You can initialize the String when you define it or you can use the assignment operator, as we did in the second line. Nothing unusual here.

The next line prints the first string, “Hello”, without a carriage return. The second line prints the second string, “, world!”, with a carriage return.

 System.out.print( string1 );
 System.out.println( string2 );

This produces this line of output in the stdout window:

Hello, world!

The next line uses the + operator to concatenate string1 and string2, sending the joined string as a parameter to println().

 System.out.println( string1 + string2 );

Here’s the output produced by this code:

Hello, world!

Next, the += operator is used to concatenate string2 onto the end of string1 and the new string1 is send to stdout:

 string1 += string2;
 System.out.println( string1 );

Once again, here is the output:

Hello, world!

Finally, the length() method is called to return the length of the modified string1. Notice that the + operator is used to merge the two strings passed to println() into a single string:

 System.out.println( "Length of this string: " + 
 string1.length() );

Here’s the final line of output:

Length of this string: 13

Your Third Application: StringMethods

Our last application this month demonstrates some of the String methods. As you go through this program, take a moment to go through the documentation that came with your development environment. In particular, look for the file java.lang.String.html. As you’ll see as you learn more about Java, all the Java classes are part of some larger collection of classes. These collections take the form of packages. For example, the String class (along with the rest of the “built-in” Java types) are part of the java.lang package. To use a package, you use a mechanism similar to the #include. This mechanism is the import statement. We’ll learn about the import statement in next month’s column. The one package you automatically have access to is java.lang and so you don’t need to import it to get access to the String class.

The file java.lang.String.html contains a complete description of the variables and methods that make up the String class. Use your Web browser to open this html file and look over the class.

Here’s the stringMethods source code...

public class stringMethods
{
 public static void main(String argv[])
 {
 char myArray[] = {'a', 'b', 'c', 'd', 'e'};
 java.lang.Stringstring = new String( myArray );
 
 System.out.println( "string: " + string );
 System.out.println( "string[2]: "
 + string.charAt( 2 ) );
 
 string = string.concat( string );
 System.out.println( "Doubled string: "
 + string );
 
 System.out.println( "Index of first 'x': "
 + string.indexOf( 'x' ) );
 
 int  index = string.indexOf( 'e' );
 System.out.println( "Index of first 'e': "
 + index );
 
 if ( index >= 0 )
 System.out.println( "Index of second 'e': "
 + string.indexOf( 'e', index+1 ) );
 
 System.out.println( "substring[2] to the end: "
 + string.substring( 2 ) );
 System.out.println( "substring[2] up to string[4]: "
 + string.substring( 2, 4 ) );
 
 string = string.replace( 'c', 'x' );
 System.out.println( "Replace 'c' with 'x': "
 + string );
 
 System.out.println( "Display as upper case: "
 + string.toUpperCase() );
 }
}

The first two lines show you yet another way to create a new String. As you’ll see when you read through java.lang.String.html, there are several versions of the String constructor. Just like C++, Java supports function overloading, allowing you to create multiple versions of the same function, as long as each version has a unique signature (the function name combined with the parameter list).

This line defines an array of chars and initializes the array with the characters a through e:

 char myArray[] = {'a', 'b', 'c', 'd', 'e'};

This line uses new to define the new String object, using the char array to initialize the String to the string “abcde”. Notice that we refer to java.lang.String instead of just String. The two terms are equivalent. Since the java.lang package is automatically included, the java.lang prefix is not needed.

 java.lang.Stringstring = new String( myArray );

The next line prints this string. System is actually java.lang.System. java.lang.System features a variable called out which features methods called print() and println(). We could have referred to java.lang.System.out.println() but, again, the java.lang is assumed.

 System.out.println( "string: " + string );

Here’s the output:

string: abcde

This next println() calls the String method charAt(). charAt() returns the nth character in the String.

 System.out.println( "string[2]: "
 + string.charAt( 2 ) );
 

Here’s the output. Note that Java strings are 0-based, just like C and C++.

string[2]: c

The concat() method appends its parameter to the end of the current object. In this case, we concat() string on the end of string, storing the result in string, then print the newly doubled string.

 string = string.concat( string );
 System.out.println( "Doubled string: "
 + string );

Here’s the output...

Doubled string: abcdeabcde

The method indexOf() searches the string for the specified character, returning either an index into the string or the value -1.

 System.out.println( "Index of first 'x': "
 + string.indexOf( 'x' ) );

Here’s the output. Since the string doesn’t contain an ‘x’, indexOf() returned -1.

Index of first 'x': -1

The next lines of code searches for the first ‘e’ in the String, storing the index in the variable index, then printing the index.

 int  index = string.indexOf( 'e' );
 System.out.println( "Index of first 'e': "
 + index );

Here’s the output:

Index of first 'e': 4

Next, assuming the index was not negative, we use a second version of indexOf() which takes a second parameter. This second parameter tells indexOf() where to start its search in the string, allowing us to search the string for a second ‘e’.

 if ( index >= 0 )
 System.out.println( "Index of second 'e': "
 + string.indexOf( 'e', index+1 ) );

Here’s the output:

Index of second 'e': 9

Next, the substring() method is called. substring() takes an index into the string and returns a string that runs from the index to the end of the string.

 System.out.println( "substring[2] to the end: "
 + string.substring( 2 ) );

Here’s the output:

substring[2] to the end: cdeabcde

Next, we call a second version of substring(). This one takes a second parameter, an index that marks the end of the substring.

 System.out.println( "substring[2] up to string[4]: "
 + string.substring( 2, 4 ) );

Here’s the output:

substring[2] up to string[4]: cd

replace() replaces all occurrences of char 1 with char 2 in the string, then prints the result.

 string = string.replace( 'c', 'x' );
 System.out.println( "Replace 'c' with 'x': "
 + string );

Here’s the result:

Replace 'c' with 'x': abxdeabxde

toUpperCase() replaces all lower case letters in the string with their upper case equivalents.

 System.out.println( "Display as upper case: "
 + string.toUpperCase() );

Here’s the result:

Display as upper case: ABXDEABXDE

Till Next Month...

Next month, we’ll create our first true applet and learn a bit about the advanced windowing toolkit (AWT). Till then, take some time to read through some of the .html files that came with your development environment.

 

Community Search:
MacTech Search:

Software Updates via MacUpdate

Apple Remote Desktop 3.9 - Remotely cont...
Apple Remote Desktop is the best way to manage the Mac computers on your network. Distribute software, provide real-time online help to end users, create detailed software and hardware reports, and... Read more
SoftRAID 5.5.6 - High-quality RAID manag...
SoftRAID allows you to create and manage disk arrays to increase performance and reliability. SoftRAID allows the user to create and manage RAID 4 and 5 volumes, RAID 1+0, and RAID 1 (Mirror) and... Read more
Apple Final Cut Pro X 10.3.2 - Professio...
Apple Final Cut Pro X is a professional video editing solution.Completely redesigned from the ground up, Final Cut Pro adds extraordinary speed, quality, and flexibility to every part of the post-... Read more
Logic Pro X 10.3.1 - Music creation and...
Logic Pro X is the most advanced version of Logic ever. Sophisticated new tools for professional songwriting, editing, and mixing are built around a modern interface that's designed to get creative... Read more
Paragraphs 1.1.4 - Writing tool just for...
Paragraphs is an app just for writers. It was built for one thing and one thing only: writing. It gives you everything you need to create brilliant prose and does away with the rest. Features... Read more
VueScan 9.5.70 - Scanner software with a...
VueScan is a scanning program that works with most high-quality flatbed and film scanners to produce scans that have excellent color fidelity and color balance. VueScan is easy to use, and has... Read more
TextSoap 8.3.2 - Automate tedious text d...
TextSoap can automatically remove unwanted characters, fix up messed up carriage returns, and do pretty much anything else that we can think of to text. Save time and effort. Be more productive. Stop... Read more
ForkLift 3.0 - Powerful file manager: FT...
ForkLift is a powerful file manager and ferociously fast FTP client clothed in a clean and versatile UI that offers the combination of absolute simplicity and raw power expected from a well-executed... Read more
Amazon Chime 4.0.5528 - Amazon-based com...
Amazon Chime is a communications service that transforms online meetings with a secure, easy-to-use application that you can trust. Amazon Chime works seamlessly across your devices so that you can... Read more
Sparkle 2.1.0 - $79.99
Sparkle will change your mind if you thought building websites wasn't for you. Sparkle is the intuitive site builder that lets you create sites for your online portfolio, team or band pages, or... Read more

Fantasy MMORPG MU Origin’s receives a hu...
Developer Webzen are looking to take their highly popular fantasy battler MU Origin to the next level this month, with its most ambitious overhaul yet. The latest update introduces the long sought after Server Arena, new treasure dungeons, and much... | Read more »
RPG Djinn Caster (Games)
RPG Djinn Caster 1.0.0 Device: iOS Universal Category: Games Price: $4.99, Version: 1.0.0 (iTunes) Description: SPECIAL PRICE 38% OFF(USD 7.99 -> USD 4.99)!!!A Fantasy Action RPG of far foreign lands! Summon the Djinns and rise to... | Read more »
Alto's Odyssey gets its first trail...
There's finally video evidence of Alto's Odyssey, the follow up to the 2015 App Store hit, Alto's Adventure. It looks just as soothing and atmospheric as Alto's last outing, but this time players will be journeying to the desert. Whereas Alto's... | Read more »
Last week on Pocket Gamer
What’s going on in the wider world of portable gaming? Each week we ask that question of our sister website Pocket Gamer. The PG team covers iOS gaming, just like 148Apps, but it also strays into the world of Android games and handheld consoles... | Read more »
Pokémon GO Generation 2 evolution guide
At long last, Niantic Labs finally unleashed the Generation 2 Pokémon into the wild. Pokémon GO trainers are scrambling to grab up this new set of 80 Pokémon. There are some special new tricks required to catch all of these new beasties, though.... | Read more »
The best new games we played this week
It feels as though the New Year got off to a creaking start as far as mobile games go, but that's changed over the past few weeks. The last few days alone have seen the debut of a number of wonderful games, so we thought we'd take the time to... | Read more »
Recruit more scallywags and discover new...
Get ready to show off your sea legs all over again in Oceans & Empires’ new grand update, which aims to make the act of rising to the role of seven seas ruler even more fresh and appealing, thanks to a richness of new content on both iOS and... | Read more »
Mage the Ascension: Refuge (Games)
Mage the Ascension: Refuge 1.0 Device: iOS Universal Category: Games Price: $4.99, Version: 1.0 (iTunes) Description: The groundbreaking roleplaying game Mage: The Ascension manifests in our turbulent present with Refuge, an... | Read more »
Vampire: Prelude (Games)
Vampire: Prelude 1.0 Device: iOS Universal Category: Games Price: $4.99, Version: 1.0 (iTunes) Description: The classic roleplaying game Vampire: The Masquerade returns to digital games with a Prelude of things to come. Experience a... | Read more »
Digby Forever Guide: How to dig to the d...
Digby Forever is a sparkling homage to arcade classics, and while you may be tiring of the number of arcade games being thrown at you, this endless digger finds many ways to stand out from the rest of the pack. The game manages to be challenging... | Read more »

Price Scanner via MacPrices.net

QuickerTek Announces 5TB Apple AC AirPort Tim...
QuickerTek Inc. has announced their new 5TB hard drive upgrade for Apple’s AC AirPort Time Capsule. By customer request, this upgrade also features six external antennas and offers the highest... Read more
Apple Certified Refurbished iMacs available f...
Apple has Certified Refurbished 2015 21″ & 27″ iMacs available for up to $350 off MSRP. Apple’s one-year warranty is standard, and shipping is free. The following models are available: - 21″ 3.... Read more
Apple offering Certified Refurbished Series 1...
Apple is now offering Certified Refurbished Series 1 and Series 2 Apple Watches for 14-16% off MSRP, starting at $229. An Apple one-year warranty is included with each watch. Shipping is free: Series... Read more
1.4GHz Mac mini on sale for $449, save $50
B&H Photo has the 1.4GHz Mac mini on sale for $50 off MSRP including free shipping plus NY sales tax only: - 1.4GHz Mac mini: $449 $50 off MSRP Read more
12-inch Retina MacBooks on sale for $200-$250...
Newegg has the 12″ 1.2GHz Space Gray Retina MacBook (sku MLH82LL/A) on sale for $1349.99 including free shipping. Their price is $250 off MSRP, and it’s the lowest price available for this model.... Read more
13-inch 2.0GHz Space Gray MacBook Pro on sale...
Adorama has the non-Touch Bar 13″ 2.0GHz Space Gray MacBook Pro in stock today for $100 off MSRP. Shipping is free, and Adorama charges NY & NJ sales tax only: - 13″ 2.0GHz MacBook Pro Space Gray... Read more
13-inch Touch Bar MacBook Pros on sale for $1...
B&H Photo has select 2016 Apple 13″ Touch Bar MacBook Pros in stock today and up to $100 off MSRP. Shipping is free, and B&H charges NY sales tax only: - 13″ 2.9GHz/512GB Touch Bar MacBook... Read more
KSI-1802R SX Disinfect-able Keyboard With Wav...
KSI has unveiled a new, innovative medical keyboard, the KSI-1802R SX, at HIMSS 2017, running February 19-22 in Orlando, Florida. KSI-1802R SX is the only keyboard that combines dual factor... Read more
15-inch Touch Bar MacBook Pros on sale for up...
Amazon has 15″ Touch Bar MacBook Pros in stock today and on sale for up to $150 off MSRP including free shipping: - 15″ 2.7GHz Touch Bar MacBook Pro Space Gray: $2720.38 $79 off MSRP - 15″ 2.7GHz... Read more
Apple’s Education discount saves up to $300 o...
Purchase a new Mac or iPad using Apple’s Education Store and take up to $300 off MSRP. All teachers, students, and staff of any educational institution qualify for the discount. Shipping is free: -... Read more

Jobs Board

*Apple* Retail - Multiple Positions - Apple,...
Job Description: Sales Specialist - Retail Customer Service and Sales Transform Apple Store visitors into loyal Apple customers. When customers enter the store, Read more
Manager *Apple* Systems Administration - Pu...
Req ID 3315BR Position Title Manager, Apple Systems Administration Job Description The Manager of Apple Systems Administration oversees the administration and Read more
*Apple* Retail - Multiple Positions - Apple,...
Job Description: Sales Specialist - Retail Customer Service and Sales Transform Apple Store visitors into loyal Apple customers. When customers enter the store, Read more
Manager *Apple* Systems Administration - Pu...
Req ID 3315BR Position Title Manager, Apple Systems Administration Job Description The Manager of Apple Systems Administration oversees the administration and Read more
*Apple* Technician - nfrastructure (United S...
Let’s Work Together Apple Technician This position is based in Portland, ME Life at nfrastructure At nfrastructure, we understand that our success results from our Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.