Java Gotchas



Java Gotchas

Java and C++ are similar in several ways, including syntax, primitive types, and operators. But unlike C++, which was layered on top of C, Java has no legacy capabilities to support. Thus Java is a much cleaner and simpler language than C++. Java supports primitive types, so it is not a pure object language, but otherwise Java is thoroughly object-oriented. Throw in Java's network orientation, and it becomes clear why Java is a perfect match for the multi-tiered, multi-server, component-oriented environment of the future.

Yet the simpler design of Java sometimes gets in the way. Certain aspects of the language are stumbling blocks to developers. These are traps in the language itself, regardless of the class libraries used.

This article will concentrate on aspects of the Java language that may be surprising and perplexing to developers coming from C++ or from any language.

These Java "Gotchas" are not suggestions for changes to the language. While these are certainly possible enhancements to Java, many of the aspects are inherent to the basic design of the language. Changing them would do severe damage to Java.

Interfaces Interfaces are essential to the Java language. They provide for multiple inheritance as well as information hiding and code re-use. Interfaces are similar to abstract classes but have important restrictions:

  • All method definitions in an interface are implicitly abstract and have no implementation body. An abstract class can declare both abstract and non-abstract methods. The non-abstract methods are for common code shared by derived classes. Because all methods declared in an interface are abstract, each class that implements an interface must declare bodies for the methods of the interface. There can be no sharing of code between derived classes. Classes implementing an interface must duplicate any common code.

  • Interfaces cannot directly model classes because they do not allow field variables. An interface may declare static final variables, but those are effectively constants, not variables. Abstract classes can declare field variables. Interfaces, on the other hand, can only support variables indirectly. Interfaces emulate field variables using wrapper methods for getting and setting the variables. Classes implementing an interface must include duplicate versions of the variable wrappers.


  • Read full article from Java Gotchas


    No comments:

    Post a Comment

    Labels

    Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

    Popular Posts