Java Coffee Break Newsletter Volume 3, Issue 5 http://www.javacoffeebreak.com/ ISSN 1442-3790 ================================================================= In this issue * Featured Java Websites * Article : Is Java driving you loopy? * Q&A : How do I prevent caching of HTTP requests? * Q&A : How do I synchronize access to a collection? * Q&A : How do I convert from a Collection to an array? ================================================================= /* * Curious about class loaders? Confused by composition? * Threatened by thread safety or befuddled by finalizers? * Check out Design Techniques articles and discussion * topics for an in-depth treatment of Java design issues. * --> http://www.artima.com/designtechniques */ Featured Java Websites Here are a selection of websites that may be of interest to readers. JAVA IN THE BROWSER? NO - JAVA IS THE BROWSER! You've probably heard of Java running in a web browser--but imagine a web browser written entirely in Java! That's the vision behind the Jazilla Open Source Project: to produce a freely distributable web browser written completely in Java. Jazilla is a reference to the Mozilla project, an open source project based on Netscape's source code. Developers can download the source code, modify it, and contribute changes. Dreamed of writing your own version of Netscape or Internet Explorer? Now's your chance! http://jazilla.sourceforge.net/ DICK BALDWIN'S JAVA PROGRAMMING TUTORIALS Dick Baldwin's tutorials on Java are a great way to learn more about specific Java topics, whether you're a beginner, intermediate, or at an advanced level (they're grouped into three streams). Whether it's as simple as I/O and threads, or as complex as XML and CORBA, these free tutorials are a great substitute (or even a supplement) for a book or Java course. Even better, they can be downloaded for offline reading, such as during lab classes or while programming. http://home.att.net/~baldwin.r.g/scoop/index.htm SUN SECURITY GUIDELINES FOR JAVA DEVELOPERS Sun has recently released an excellent set of code guidelines, aimed at making Java systems more secure. It's all good common sense advice, written in fairly simple terms but for a technical audience. There are great tips for watching which methods and variables are made public, returning the contents of an array or collection, and much, much more. Every programmer should review these guidelines, as the information contained within is simple to apply and useful. http://java.sun.com/security/seccodeguide.html VISUAL J++ TECHNICAL FAQ If you've looking for technical information on Microsoft's Visual J++ development tool, go straight to the source with this technical FAQ from Microsoft. There's information on Visual J++ capabilities and functionalities, how it integrated with other Visual Studio products and components, as well as how it compares to other tools like Borland JBuilder. There's also links to further information from the Microsoft Visual J++ website, and some technical articles. http://msdn.microsoft.com/visualj/technical/techfaq.asp ================================================================= Book Review - Author : Publisher : ISBN : 0672315483 Experience: Beginner - Intermediate For more information about this title, or to order it, visit http://www.davidreilly.com/goto.cgi?isbn=0672315483 ================================================================= Book Review - Author : Publisher : ISBN : 0471345342 Experience: Beginner-Intermediate For more information about this title, or to order it, visit http://www.davidreilly.com/goto.cgi?isbn= ================================================================= Article : Is Java driving you loopy? If Java is your first programming language, then loops (a form of iteration) can be a confusing topic. In this article, I'll show you the different types of loops that Java supports, and when to use them. -- David Reilly There are three basic building blocks of programming :- * sequence * selection * iteration Most programmers will be familiar with sequence. A sequence of programming statements are executed one after the other. For example, the following two lines can be executed sequentially System.out.println ("hello"); System.out.println ("goodbye"); Selection is also fairly simple. By using if / switch statements, you can control the execution flow of code. Most programmers are already familiar with the concept behind if statements - it is virtually impossible to write any application without using some form of selection. The final concept, iteration, is the focus of this article. This one is a little more tricky, as there are quite a few different times of iteration statements in Java. The basic concept behind iteration, is that a sequence of statements is repeated until a certain condition is met. When this condition is met, the iteration terminates, and the loop is over. 'for' loops The simplest type of loop uses the for statement, to iterate through a sequence of statements. Usually, a for loop will use a counter, with a precise starting point and a precise ending point. // for loop, from 1 to 5 for (int i = 1; i <= 5; i++) { System.out.println ("count : " + i); } There are several components to a for loop for ( init   ;  condition ; statement ) A check to see if the condition equates to true is made at the end of the for loop. When the condition fails to be met, the loop will terminate. In our previous example, the loop terminates when our counter (i) is not less than or equal to a value of five.It is also worth noting that each of the components of a for loop is entirely optional. For example, our loop could be rewritten as the following: - // This may be more useful, as the variable // i is created outside the scope of the // loop. int i = 1; // for loop, from i to 5 for (; i <= 5; i++) { System.out.println ("count : " + i); } 'while' loops A while loop differs from the for loop, in that it only contains a condition, and that the condition is tested at the beginning of the loop. This means that if the condition evaluates to false, it will not be executed at all. We call this a pre-tested loop, because the test is made before executing the sequence of statements contained within. int i = 1; while (i <= 5) { System.out.println ("count : " + i); i++; } 'do...while' loops A variation on the while loop is the post-tested version. Two keywords are used for this loop, the do and the while keywords. int i = 1; do { System.out.println ("count : " + i); i++; } while (i <= 5) There is no difference between a while, and a do...while loop other than pre-testing and post-testing. Terminating loops abruptly Sometimes it is necessary to stop a loop before its terminating condition is reached. For example, a loop that searched through an array for a particular entry should not continue once that entry is found - to do so would only waste CPU time and make for a slower program. Other times, you may want to skip ahead to the next iteration of the loop, rather than performing additional processing. Java provides two keywords for this purpose : break and continue.   break The break keyword is used to terminate a loop early. Consider the following example, which searches through an array for a particular value. // Check to see if "yes" string is stored boolean foundYes = false; for (int i = 0; i < array.length; i++) { if (array[i].equals("yes")) { foundYes = true; break; } } continue Unlike the break keyword, continue does not terminate a loop. Rather, it skips to the next iteration of the loop, and stops executing any further statements in this iteration. This allows us to bypass the rest of the statements in the current sequence, without stopping the next iteration through the loop. for (int i = 0; i < array.length; i++) { if (array[i] == null) // skip this one, goto next loop continue; else { // do something with array[i] ....... } } While this example was unnecessary, since we had an if statement to separate program flow, there are some complex algorithms where continue and break are extremely useful. Summary Loop don't need to be difficult, providing you keep in minds these simple concepts: - * loops are for repetition of statements * some loops are pre-tested (for, while), others are post-tested (do..while) * when you have a clearly defined start and finish, a for loop is preferable * when you have a more complex termination condition, while loops are preferable ================================================================= Q&A: How do I prevent caching of HTTP requests? By default, caching will be enabled. You must use a URLConnection, rather than the URL.openStream() method, and explicitly specify that you do not want to cache the requests. This is achieved by calling the URLConnection.setUseCaches(boolean) method with a value of false. // Create a URLConnection object URLConnection connection = myURL.openConnection(); // Disable caching connection.setUseCaches(false); // Connect to remote machine connection.connect(); ================================================================= Q&A: How do I synchronize access to a collection? If you need a collection to be accessible to multiple threads, you must be careful to prevent concurrent access. None of the collection methods are synchronized, but there is a solution. The java.util.Collections class contains static methods which accept a Collection, List, Map, Set, SortedMap or SortedSet, and return synchronized versions. When creating your collection, you should immediately create a synchronized version, and use it instead of the unsynchronized collection. Collection type| Appropriate synchronization method | Collection | Collections.synchronizedCollection (Collection c) List | Collections.synchronizedList (List l) Set | Collections.synchronizedSet (Set s) Map | Collections.synchronizedMap (Map m) SortedSet | Collections.synchronizedSortedSet (SortedSet ss) SortedMap | Collections.synchronizedSortedMap (SortedMap sm) For example, to created a synchronized ArrayList, you'd do the following: - ArrayList arrayList = new ArrayList(); List list = Collections.synchronizedList (arrayList); // Use list instead of arrayList list.add ("some data"); ================================================================= Q&A : How do I convert from a Collection to an array? The hard way would be to find the length of a collection, create an array of that size, and manually traverse through every element then assign it to the array. Fortunately, there's a much easier solution! Defined as a method in the java.util.Collection interface, is the toArray() method. This returns an array of objects, which contain the contents of a collection. Whether you're dealing with a Set, List, or Map, any Collection will support this method. For example, a sorted set is easily converted using the following code: - // Create a new sorted set SortedSet ss = new TreeSet(); // do something with ss Object[] array = ss.toArray(); ================================================================= The Java Coffee Break Newsletter is only sent out to email subscribers who have requested it, and to readers of the comp.lang.java.programmer and comp.lang.java.help newsgroups. If you'd like to receive our newsletter, and get the latest Java news, tips and articles from our site, then get your FREE subscription & back issues from http://www.javacoffeebreak.com/newsletter/ If you are an email subscriber and no longer wish to receive the JCB Newsletter, please unsubscribe by emailing javacoffeebreak-unsubscribe@listbot.com