Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.programmer > #21080

Re: "Hello world!" without a public class?

From Kevin McMurtrie <mcmurtrie@pixelmemory.us>
Newsgroups comp.lang.java.programmer
Subject Re: "Hello world!" without a public class?
References <public-20130106091348@ram.dialup.fu-berlin.de> <50e9d27c$0$80180$742ec2ed@news.sonic.net> <50e9dc69$0$284$14726298@news.sunsite.dk>
Date 2013-01-06 15:11 -0800
Message-ID <50ea0485$0$80103$742ec2ed@news.sonic.net> (permalink)
Organization Sonic.Net

Show all headers | View raw


In article <50e9dc69$0$284$14726298@news.sunsite.dk>,
 Arne Vajhøj <arne@vajhoej.dk> wrote:

> On 1/6/2013 2:37 PM, Kevin McMurtrie wrote:
> > In article <public-20130106091348@ram.dialup.fu-berlin.de>,
> >   ram@zedat.fu-berlin.de (Stefan Ram) wrote:
> >
> >> »class HelloWorldApp {
> >>      public static void main(String[] args) {
> >>          System.out.println("Hello World!"); // Display the string.
> >>      }
> >> }
> >> «
> >>
> >> http://docs.oracle.com/javase/tutorial/getStarted/cupojava/win32.html
> >>
> >>    There is no »public« in front of »class« in Oracles Tutorial!
> >>
> >>    What should I teach in my classes?
> >>
> >>      1.) »public class HelloWorldApp« (because this is most common IIRC)
> >>
> >>      2.) »class HelloWorldApp« (because this is in Oracles tutorial)
> >>
> >>      3.) »final class HelloWorldApp« (because this class is not designed
> >>          for inheritance and Bloch says that one should not inherit from
> >>          it in this case and the students can as well get used to this
> >>          right from the start)
> >>
> >>      4.) »public final class HelloWorldApp« (combination of »1.)« and 
> >>      »3.)«)
> >
> > 'final' classes are useful for:
> >
> > 1) Safety.  Not all classes can be subclassed safely.  For example, a
> > subclass of Thread that starts itself from the constructor may be
> > executing the run() method before a subclass' constructor completes.
> > Another case would be data for which the equals() method can not be
> > generalized.  Marking the class as final forces compile-time safety
> > against accidentally subclassing something that isn't ready for it.
> 
> Yes.
> 
> > 2) Security.  Imagine the damage you could do if String was mutable.
> > You wouldn't want a credit card encryptor/decryptor to gain any extra
> > features because a mistake could cost millions of dollars.
> 
> Yes.
> 
> > 3) Performance.  Methods known to have a single implementation can be
> > highly optimized by the JIT.  This optimization must be removed as soon
> > as it's possible for there to be more than one implementation. This is
> > an awful side-effect that's difficult to trace. Classes requiring
> > maximum performance should be guarded from subclassing.
> 
> One can find that claim a gazillion places on the internet from
> people you never heard about.
> 
> And then one can find:
> 
> http://www.ibm.com/developerworks/java/library/j-jtp1029/index.html
> 
> <quote>
> The common perception is that declaring classes or methods final makes 
> it easier for the compiler to inline method calls, but this perception 
> is incorrect (or at the very least, greatly overstated).
> </quote>
> 
> by Brian Goetz.
> 
> Arne

The IBM article addresses a misconception about bytecode compilation.  
Before high performance JITs, like Sun's HotSpot, compilers did make 
extremely unsafe global optimizations based on the 'final' keyword.  
That was nothing but trouble.

Making a class final and declaring instances of the class with that type 
makes sure that optimizations are available.

abstract class Bitmap
{
   abstract int getRGBA(int x, int y);
}


final class RGBA32Bitmap extends Bitmap
{
   int getRGBA(int x, int y) {...}
}

Calling getRGBA() on a reference defined as class Bitmap will have 
varying optimization during runtime depending on whether or not the 
implementation can be guaranteed at a specific time.  Sun's HotSpot may 
add and remove optimizations as condition change.  Calling getRGBA() on 
a reference defined as class RGBA32Bitmap will be highly optimized at 
runtime.

Of course I wouldn't bother with any of this unless it's needed.
-- 
I will not see posts from Google because I must filter them as spam

Back to comp.lang.java.programmer | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

Re: "Hello world!" without a public class? Kevin McMurtrie <mcmurtrie@pixelmemory.us> - 2013-01-06 11:37 -0800
  Re: "Hello world!" without a public class? Arne Vajhøj <arne@vajhoej.dk> - 2013-01-06 15:19 -0500
    Re: "Hello world!" without a public class? Kevin McMurtrie <mcmurtrie@pixelmemory.us> - 2013-01-06 15:11 -0800
      Re: "Hello world!" without a public class? Arne Vajhøj <arne@vajhoej.dk> - 2013-01-06 21:35 -0500

csiph-web