Easy to Learn Java: Programming Articles, Examples and Tips

Start with Java in a few days with Java Lessons or Lectures

Home

Code Examples

Java Tools

More Java Tools!

Java Forum

All Java Tips

Books

Submit News
Search the site here...
Search...
 
Search the JavaFAQ.nu
1000 Java Tips ebook

1000 Java Tips - Click here for the high resolution copy!1000 Java Tips - Click here for the high resolution copy!

Java Screensaver, take it here

Free "1000 Java Tips" eBook is here! It is huge collection of big and small Java programming articles and tips. Please take your copy here.

Take your copy of free "Java Technology Screensaver"!.

Easy Learn Java: Programming Articles, Examples and Tips - Page 418


Previous 1060 Stories (530 Pages, 2 Per Page) Next

Commenting out your code?

Go to all tips in Story by Dr. Kabutz

The Java Specialists' Newsletter [Issue 050] - Commenting out your code?

Author: Dr. Heinz M. Kabutz

JDK version:

Category: Language

You can subscribe from our home page: http://www.javaspecialists.co.za (which also hosts all previous issues, available free of charge Smile

Welcome to the 50th edition of The Java(tm) Specialists' Newsletter. Last week I casually mentioned that I was presenting my Design Patterns Course at "The Shuttleworth Foundation". I really thought I was. However, when I arrived at TSF, I discovered that I had gone to the wrong place Sad My booking had been with Thawte Consulting, the company that Mark Shuttleworth sold to Verisign, and TSF has nothing to do with Thawte. I had simply assumed, and assumption is one of the biggest failings of a programmer.

When I finally got there, I was amazed that all my students were there already, waiting for me. (The course was supposed to start at 8:30 and I got there at 8:20). The next day, when I arrived at 8:20 again (after missing my turnoff due to daydreaming), the students were *again* all there, waiting for me. WOW, I thought, these guys are *really* keen! The bubble burst when they told me that somehow they got the message that the course started at 8:00 instead of 8:30!

The course went extremely well, partly due to very bright students and partly because I am getting more comfortable presenting this new course. Last Monday at 2:00am I at long last *clicked* with the GoF Factory Method. If you think you understand the Factory Method (like I did for a few years), my bet is that you actually don't Wink You might understand a different type of pattern commonly known as "Factory Method", but there are very few people who understand the Factory Method according to GoF.

Please let me know if your company would like some Design Patterns training, by simply sending me an email. I will personally contact you within 24 hours and we can take it from there.

Commenting out your code?

Something I dislike even more than useless comments is code that is commented out. When I work with code, instead of commenting it out, I delete it. That way I don't have to remember why I commented out broken code, and it makes my code much easier to maintain. It's like telling the truth: you don't have to remember what you said. However, this newsletter is not a rant about commented out code, it is about how even commented out code can cause compiler failures, and how commented out code can end up as part of your class.

I want to thank Clark Updike from http://www.jhuapl.edu for the ideas that sparked this newsletter. He picked it up while studying for the Sun Certified Java Programmer (SCJP) Examination, which I did not author, by the way. I know the guys at Sun can be quite evil with the SCJP, but I don't think they would go this far. The SCJP seems to be getting more difficult to keep pace with the immense number of Java developers arriving on the scene. When I wrote it, you basically had to show up to get 91%.

I promised you last week that I would show you some code that could not compile, even though the problem code was commented out. Let's first look at the original program:

public class A1 {
  Character aChar = new Character('u000d');
}

Try compile it, and you will get an error, such as:

A1.java:2: illegal line end in character literal
  Character aChar = new Character('u000d');
                                  ^
1 error

Imagine sitting with this code, and not getting it to compile. What would you do? You would probably comment out the offending line to try get it to compile:

public class A2 {
  // Character aChar = new Character('u000d');
}

You compile it, and what do you get: 2 errors instead of the 1 that you had without the comment!

A2.java:3: unclosed character literal
}
^
A2.java:3:  expected
}
  ^
2 errors

But we can get even more confusing, have a look at class A3:

public class A3 {
  // Character aChar = new Character('u000d{System.out.println("Hello");}
}

Amazingly, it compiles, but does it do anything? Let's have a look at A3Test.java:

public class A3Test {
  public static void main(String[] args) {
    new A3();
  }
}

The test compiles, and when we run it, the output is:

Hello

Say what? I'm sure that you know what happens. The unicode character 'u000d' gets converted to a newline character as part of the "preparation for compile". At some point, before the class A2 actually gets compiled, it looks like this:

public class A2 {
  // Character aChar = new Character('
');
}

Obviously that does not compile! Similarly, at some point, A3 looks like this:

public class A3 {
  // Character aChar = new Character('
{System.out.println("Hello");}
}

I wish I could say: There, you should not comment out code! However, I can only say that you will get strange effects if you use 'u000a' or 'u000d' in your code.

Until the next newsletter ...

Heinz


Copyright 2000-2004 Maximum Solutions, South Africa

Reprint Rights. Copyright subsists in all the material included in this email, but you may freely share the entire email with anyone you feel may be interested, and you may reprint excerpts both online and offline provided that you acknowledge the source as follows: This material from The Java(tm) Specialists' Newsletter by Maximum Solutions (South Africa). Please contact Maximum Solutions for more information.

Java and Sun are trademarks or registered trademarks of Sun Microsystems, Inc. in the United States and other countries. Maximum Solutions is independent of Sun Microsystems, Inc.


comments? | Printer Friendly Page  Send to a Friend | Score: 0
Posted by jalex on Saturday, November 19, 2005 (00:00:00) (2105 reads)

Q: I still miss global variables. What can I do instead?

Go to all tips in Java IAQ by Peter Norvig

Q: I still miss global variables. What can I do instead?

Answer: That depends on what you want to do. In each case, you need to decide two things: how many copies of this so-called global variable do I need? And where would be a convenient place to put it? Here are some common solutions:

If you really want only one copy per each time a user invokes Java by starting up a Java virtual machine, then you probably want a static instance variable. For example, you have a MainWindow class in your application, and you want to count the number of windows that the user has opened, and initiate the "Really quit?" dialog when the user has closed the last one. For that, you want:
// One variable per class (per JVM)
public Class MainWindow {
  static int numWindows = 0;
  ...
  // when opening: MainWindow.numWindows++;  
  // when closing: MainWindow.numWindows--;
}
In many cases, you really want a class instance variable. For example, suppose you wrote a web browser and wanted to have the history list as a global variable. In Java, it would make more sense to have the history list be an instance variable in the Browser class. Then a user could run two copies of the browser at once, in the same JVM, without having them step on each other.
// One variable per instance
public class Browser {
  HistoryList history = new HistoryList();
  ...
  // Make entries in this.history
}
Now suppose that you have completed the design and most of the implementation of your browser, and you discover that, deep down in the details of, say, the Cookie class, inside the Http class, you want to display an error message. But you don't know where to display the message. You could easily add an instance variable to the Browser class to hold the display stream or frame, but you haven't passed the current instance of the browser down into the methods in the Cookie class. You don't want to change the signatures of many methods to pass the browser along. You can't use a static variable, because there might be multiple browsers running. However, if you can guarantee that there will be only one browser running per thread (even if each browser may have multiple threads) then there is a good solution: store a table of thread-to-browser mappings as a static variable in the Browser class, and look up the right browser (and hence display) to use via the current thread:
// One "variable" per thread
public class Browser {
  static Hashtable browsers = new Hashtable();
  public Browser() { // Constructor
    browsers.put(Thread.currentThread(), this);
  }
  ...
  public void reportError(String message) {
    Thread t = Thread.currentThread();
    ((Browser)Browser.browsers.get(t))
      .show(message)
  }
}
Finally, suppose you want the value of a global variable to persist between invocations of the JVM, or to be shared among multiple JVMs in a network of machines. Then you probably should use a database which you access through JDBC, or you should serialize data and write it to a file.


This tip is reprinted on JavaFAQ.nu by by courtesy of Peter Norvig I am thankful for his important contributions to my site - 21 Infrequently Answered Java Questions. Alexandre Patchine



comments? | Printer Friendly Page  Send to a Friend | Score: 0
Posted by jalex on Wednesday, November 16, 2005 (00:00:00) (2995 reads)

Previous 1060 Stories (530 Pages, 2 Per Page) Next

530| 529| 528| 527| 526| 525| 524| 523| 522| 521| 520| 519| 518| 517| 516| 515| 514| 513| 512| 511| 510| 509| 508| 507| 506| 505| 504| 503| 502| 501| 500| 499| 498| 497| 496| 495| 494| 493| 492| 491| 490| 489| 488| 487| 486| 485| 484| 483| 482| 481| 480| 479| 478| 477| 476| 475| 474| 473| 472| 471| 470| 469| 468| 467| 466| 465| 464| 463| 462| 461| 460| 459| 458| 457| 456| 455| 454| 453| 452| 451| 450| 449| 448| 447| 446| 445| 444| 443| 442| 441| 440| 439| 438| 437| 436| 435| 434| 433| 432| 431| 430| 429| 428| 427| 426| 425| 424| 423| 422| 421| 420| 419|
418
| 417| 416| 415| 414| 413| 412| 411| 410| 409| 408| 407| 406| 405| 404| 403| 402| 401| 400| 399| 398| 397| 396| 395| 394| 393| 392| 391| 390| 389| 388| 387| 386| 385| 384| 383| 382| 381| 380| 379| 378| 377| 376| 375| 374| 373| 372| 371| 370| 369| 368| 367| 366| 365| 364| 363| 362| 361| 360| 359| 358| 357| 356| 355| 354| 353| 352| 351| 350| 349| 348| 347| 346| 345| 344| 343| 342| 341| 340| 339| 338| 337| 336| 335| 334| 333| 332| 331| 330| 329| 328| 327| 326| 325| 324| 323| 322| 321| 320| 319| 318| 317| 316| 315| 314| 313| 312| 311| 310| 309| 308| 307| 306| 305| 304| 303| 302| 301| 300| 299| 298| 297| 296| 295| 294| 293| 292| 291| 290| 289| 288| 287| 286| 285| 284| 283| 282| 281| 280| 279| 278| 277| 276| 275| 274| 273| 272| 271| 270| 269| 268| 267| 266| 265| 264| 263| 262| 261| 260| 259| 258| 257| 256| 255| 254| 253| 252| 251| 250| 249| 248| 247| 246| 245| 244| 243| 242| 241| 240| 239| 238| 237| 236| 235| 234| 233| 232| 231| 230| 229| 228| 227| 226| 225| 224| 223| 222| 221| 220| 219| 218| 217| 216| 215| 214| 213| 212| 211| 210| 209| 208| 207| 206| 205| 204| 203| 202| 201| 200| 199| 198| 197| 196| 195| 194| 193| 192| 191| 190| 189| 188| 187| 186| 185| 184| 183| 182| 181| 180| 179| 178| 177| 176| 175| 174| 173| 172| 171| 170| 169| 168| 167| 166| 165| 164| 163| 162| 161| 160| 159| 158| 157| 156| 155| 154| 153| 152| 151| 150| 149| 148| 147| 146| 145| 144| 143| 142| 141| 140| 139| 138| 137| 136| 135| 134| 133| 132| 131| 130| 129| 128| 127| 126| 125| 124| 123| 122| 121| 120| 119| 118| 117| 116| 115| 114| 113| 112| 111| 110| 109| 108| 107| 106| 105| 104| 103| 102| 101| 100| 99| 98| 97| 96| 95| 94| 93| 92| 91| 90| 89| 88| 87| 86| 85| 84| 83| 82| 81| 80| 79| 78| 77| 76| 75| 74| 73| 72| 71| 70| 69| 68| 67| 66| 65| 64| 63| 62| 61| 60| 59| 58| 57| 56| 55| 54| 53| 52| 51| 50| 49| 48| 47| 46| 45| 44| 43| 42| 41| 40| 39| 38| 37| 36| 35| 34| 33| 32| 31| 30| 29| 28| 27| 26| 25| 24| 23| 22| 21| 20| 19| 18| 17| 16| 15| 14| 13| 12| 11| 10| 9| 8| 7| 6| 5| 4| 3| 2| 1|


Home Code Examples Java Forum All Java Tips Books Submit News, Code... Search... Offshore Software Tech Doodling

RSS feed Java FAQ RSS feed Java FAQ News     

    RSS feed Java Forums RSS feed Java Forums

All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest 1999-2006 by Java FAQs Daily Tips.

Interactive software released under GNU GPL, Code Credits, Privacy Policy