Java Application Development – A Brief Discussion
Which is the most widely talked, used and taught programming language on this planet? The answer obviously is Java. What is Java? Java is a very widely used programming language expressly designed by the Sun Microsystem which is now owned by Oracle. Known a high -level language as it can be easily read and written by humans, it enables the programmers to write instructions in English rather than using numeric codes. As it was designed much later than C and C++, it incorporates many of the strong features of these previous languages yet addresses some of their drawbacks. Java can used to run different types of applications. Standalone applications: The standalone application is similar to the C or C ++ program. It run on our computers. Applet: An applets is a java application that can be run on a client machine by a Java compatible Web browser like Internet Explorer and can be transported over the internet. It can also be automatically installed and run as a part of the Web document. 
Web applications: web applications run on more than one computer and communicate through a network or server. In short they are by nature distributed applications. These are used for online retail, online banking, web mail and more

Distributed: it means that the data is spread out over many computers in a single network. These apps are broken into two separate programs, the server and the client
Here are some of the tips that a top level Java application developer has to focus on. Design and test for parallelism. Most frameworks these days are used to build application with some (and often a lot) of parallel processing activity. Frameworks intended to be used in web applications, especially, need careful thought around how multithreaded access will affect them. Some general principles I follow are: Avoid locks when possible. When not possible, use explicit locking objects rather than .NET lock (...) statements. Use Reader/Writer locks for shared objects that are read more frequently than written.
Design functionality into in layers. For large frameworks, this helps to not only keep functionality decoupled but also allows users to more readily use just the portion of your framework they actually need.
Avoid using object or object [] in the public interface ... this is a leading cause of bugs and maintainability problems. You can almost always find an interface or use generics in place of this. In those exceptional cases you can’t exactly document what you expect to be passed in or out ... and assert for it.
Prefer aggregation to inheritance. Inheritance is a useful and powerful concept, framework author’s often over use or misuse it. One should think carefully about whether inheritance is truly the right tools to solve a design problem.
Avoid type casts and runtime type checks when possible. These are generally a design-smell in my experience. Lots of casting indicates you are not taking advantage of interfaces, generics, or generic constraints effectively. This can lead to bugs and confusion on the part of developers as to how to use your framework.
Allow callers to inject functionality using strategies when possible. Inheritance is overkill for certain kinds of specialization. With the level of support functions get as citizens in the .NET ecology, you should look to use them (in the form of lambdas or delegates) to allow consumers to specialize the functionality you provide
With the high increasing speed of IT-technologies importance, rises the importance of Java and Java application development.
Source: Java Application Development - A Brief Discussion