SlideShare uma empresa Scribd logo
1 de 45
JAVA BASIC TRAINING
II. The Essentials of Effective Java
Creating and
Destroying Objects
Good Ways to Define
          Class
• Class Modifier
   • Should it be final
• Default Constructor
   • Compiler generates one if not defined
   • But, always define it explicitly
• Always invoke super() explicitly
• Visibility
   • Class
   • Constructor
• Singleton
“withXxx” Pattern


• Consider a class with many fields
• Initialize with setters
• “withXxx” pattern
Avoid Creating
  Unnecessary Objects


• String str = new String(“hello”);
• Integer i = new Integer(10);
• Boolean b = new Boolean(true);
Avoid Creating
  Unnecessary Objects


• String str = new String(“hello”);
• Integer i = new Integer(10);
• Boolean b = new Boolean(true);

          do not waste time and memory
Memory Leak
• Garbage Collection
  • Mark-Sweep-Compact, as an example
• Memory Leak in Java means unintentionally
  retained
• Nulling out references when really necessary
  • It should be the exceptional rather than the
     normal

  • The best way is let the variable fall out of
     scope
NEVER Use Finalizer
Exercises
• Refine Resource/Designer/Tester
 • name, age, id, gender, unit as fields
• Static class ResourceBuilder
 • Which can build a kind of resource
• Manager as a Singleton
• Create memory leak
Methods Common to
    All Objects
equals()
• Suppose x, y, z are all non-null references
• Reflexive
  • x.equals(x) must return true
• Symmetric
  • x.equals(y) must return true if and only if
      y.equals(x)returns true
• Transitive
  • if x.equals(y) returns true
  • and y.equals(z) returns true
  • then x.equals(z) must return true
• Consistent
  • x.equals(y) must consistently return the same result
hashCode()

• Equal objects must have equal hash
  codes

• If equals() is overridden,
  hashCode() must be overridden

• Failed to do so, there will be trouble
  working with hash-based collections
toString()
• Default toString returns something like
  “Designer@163b91”

• A good toString() implementation
  • Makes the class pleasant to use
  • Should return all interesting information
     contained in the object

  • Specifies the format if necessary and stick to it
  • Provides programmatic access to the returned
     string if necessary
Exercises
• Add equals() and hashCode() to
  Designer and Tester

 • Consider about how to write a “correct”
    equals() and “perfect” hashCode()

• Add toString() to Designer and
  Tester

 • A parse() method in Resource to
    parse a Designer or Tester
Classes and
 Interfaces
How to Define Java Bean
• What is Java Bean?
  • Data structure
  • Object representative
• The ingredients
  • Fields
  • Setters and Getters
  • Optional equals()/hashCode(), and
    toString()
Prefer Interface to
         Abstract Class
• No multiple inheritance in Java
• Pros
  • Easily retrofitted to implement a new interface
  • Ideal for defining mixins: Comparable for example
  • Allow construction of nonhierarchical type framework: someone
       can be both a singer and songwriter
• Cons
  • Not off-the-shelf to use
  • Once released and widely implemented, almost impossible to change
• Skeletal implementation combining interface and abstract class
  • Map/AbstractMap
  • Set/AbstractSet
Use Interfaces Only to
     Define Types


• Constant interface pattern
  • Nothing but only constants defined
• Use noninstantiable class instead
Use Interfaces Only to
     Define Types

                                           IT
                                     ER DO
• Constant interface pattern   NEV

  • Nothing but only constants defined
• Use noninstantiable class instead
Use Interfaces Only to
     Define Types

                                           IT
                                     ER DO
• Constant interface pattern   NEV

  • Nothing but only constants defined
• Use noninstantiable class instead
Prefer Class Hierarchies
   to Tagged Classes
• What is tagged class?
  • A class with certain field to indicate
    the actual type

• Tagged class are verbose, error-prone,
  and inefficient

• Unfortunately, tagged class is not OO
Favor Static Member
Classes over Non-static
• The class defined in another class
• Non-static member class can
  • Obtain reference to the enclosing instance using the qualified
       this construct
• Static member class can
  • Be instantiated in isolation from an instance of its enclosing
       class
• Make it a static member class
  • Whenever it does not require access to an enclosing instance
  • When it should be instantiated from outside of the enclosing
       class
   • Get rid of time and space costs to store reference to its
       enclosing instance
Exercises

• Try static and non-static member
  class

 • Define the class
 • Instantiate it from outside the
    enclosing class
 • Obtains reference of the enclosing
    instance
Generics
Generics
• Don’t use raw types in new code
• Favor generic types
 • List<String>, instead of List
• Favor generic method
 • List<T> hello(T word), instead
    of List<Object> hello(Object
    word)
Exercises


• SuppressWarnings annotation for
  unchecked access

• Write a generic method
Methods
Methods


• Return empty arrays or collections,
  instead of null

• Write javadoc comments for all
  exposed API elements
Exercises

• Write a method returning null
  representing nothing
• Write a method returning empty
  collection representing nothing
• Check the client code
General
Programming
General Programming
• Minimize the scope of local variables
• Mark variable as final whenever possible
• Prefer for-each loop
• Know and use the libraries
• String concatenation, StringBuilder
  and StringBuffer

• Refer to object by interface
Exceptions
Exception Hierarchy
                                Throwable


                    Exception                       Error


     RuntimeException           ...    VirtualMachineError   ...

NullPointerException                  OutOfMemoryError




              ...                                   ...
Exception Hierarchy
                                Throwable


                    Exception                       Error


     RuntimeException           ...    VirtualMachineError   ...

NullPointerException                  OutOfMemoryError




              ...                                   ...
     Unchecked
Exception Hierarchy
                                Throwable


                    Exception                       Error


     RuntimeException           ...    VirtualMachineError   ...

NullPointerException       Checked    OutOfMemoryError




              ...                                   ...
     Unchecked
Checked and Unchecked

• Checked
 • Required to catch
 • Can reasonably be expected to recover
• Unchecked
 • Not required to catch
 • Generally, not recoverable
Avoid Unnecessary of
   Checked Exception
• Checked exception is great
  • Forcing programmer to deal with exception
  • Enhancing reliability
• Overusing it will make API less pleasant to use
• If contract can be made between API and client, no
  need to use checked exception
  • For example, wrong format of argument
  • A method provided to check exceptional
     condition
Favor Standard
                  Exceptions
                                    Exception                     Occasion for Use
                              IllegalArgumentException null value is not good to go
• Before go creating your
  own exception type, favor   IllegalStatementException
                                                                instance state is not OK for
                                                                method invocation
  standard exception
                                NullPointerException            null value is not prohibited
• Java platform libraries
  provide a basic set of      IndexOutOfBoundsException         input parameter is out of range

  unchecked exceptions                                          concurrent modification of an object
                              ConcurrentModificationException
                                                                has been detected where it is prohibited


                              UnsupportedOperationException object does not support method
Use Exception Only for
Exceptional Conditions
 try {
     int i = 0;
     while (true) {
         range[i++].climb();
     }
 } catch (ArrayIndexOutOfBoundsException e) {
     ...
 }


• Exception should only be used for exceptional conditions
• Well designed API must not force its clients to use
   exception for ordinary control flow
Chaining Exceptions
try {
    ...
} catch (AException e) {
    throw new BException(“more description”,   e);
}


• Preserve exception stack trace
• Complete information when exception
  happens

• A bad example is FDSStandardException
Chaining Exceptions
try {
    ...
} catch (AException e) {

}
    throw new BException(“more description”,
                                               e
                                               );




• Preserve exception stack trace
• Complete information when exception
  happens

• A bad example is FDSStandardException
How to Define Own
        Exception
• Extend from Exception or RuntimeException
• Provide serialVersionUID
• Override all constructors
  • Default
  • With detail message only
  • With detail message and cause
  • With cause only
• Add you own fields if necessary, for example error
  code
Other Best Practice


• Document all exceptions thrown by each
  method

• Always set detail message
• Don’t catch and ignore exception, at least
  write down a comment
Exercises

• Define own checked and unchecked
  exceptions
• Write methods throwing the above
  exceptions
• Write client code to invoke the above
  methods
Homework



• Refactor the AddressBook project
  according to what we’ve learned in
  this course

Mais conteúdo relacionado

Mais procurados

Exceptions in Java
Exceptions in JavaExceptions in Java
Exceptions in JavaVadym Lotar
 
Javascript classes and scoping
Javascript classes and scopingJavascript classes and scoping
Javascript classes and scopingPatrick Sheridan
 
Java Pitfalls and Good-to-Knows
Java Pitfalls and Good-to-KnowsJava Pitfalls and Good-to-Knows
Java Pitfalls and Good-to-KnowsMiquel Martin
 
Exception Handling in JAVA
Exception Handling in JAVAException Handling in JAVA
Exception Handling in JAVASURIT DATTA
 
Exceptions overview
Exceptions overviewExceptions overview
Exceptions overviewBharath K
 
Java Exception Handling
Java Exception HandlingJava Exception Handling
Java Exception HandlingDeeptiJava
 
Exception handling
Exception handlingException handling
Exception handlingRavi Sharda
 

Mais procurados (13)

Exceptions in Java
Exceptions in JavaExceptions in Java
Exceptions in Java
 
Javascript classes and scoping
Javascript classes and scopingJavascript classes and scoping
Javascript classes and scoping
 
Ruby basics
Ruby basicsRuby basics
Ruby basics
 
Java Pitfalls and Good-to-Knows
Java Pitfalls and Good-to-KnowsJava Pitfalls and Good-to-Knows
Java Pitfalls and Good-to-Knows
 
Java exception handling
Java exception handlingJava exception handling
Java exception handling
 
Exception Handling in JAVA
Exception Handling in JAVAException Handling in JAVA
Exception Handling in JAVA
 
Java
JavaJava
Java
 
Exceptions overview
Exceptions overviewExceptions overview
Exceptions overview
 
Java exception handling
Java exception handlingJava exception handling
Java exception handling
 
Built in exceptions
Built in exceptions Built in exceptions
Built in exceptions
 
Java Exception Handling
Java Exception HandlingJava Exception Handling
Java Exception Handling
 
Exception handling
Exception handlingException handling
Exception handling
 
Exception hierarchy
Exception hierarchyException hierarchy
Exception hierarchy
 

Semelhante a 2 the essentials of effective java

Semelhante a 2 the essentials of effective java (20)

Exceptions.pptx
Exceptions.pptxExceptions.pptx
Exceptions.pptx
 
Exception handling in .net
Exception handling in .netException handling in .net
Exception handling in .net
 
Jvm2
Jvm2Jvm2
Jvm2
 
Exception handling in java
Exception handling in javaException handling in java
Exception handling in java
 
ACP - Week - 9.pptx
ACP - Week - 9.pptxACP - Week - 9.pptx
ACP - Week - 9.pptx
 
Training material exceptions v1
Training material   exceptions v1Training material   exceptions v1
Training material exceptions v1
 
Exception handling in ASP .NET
Exception handling in ASP .NETException handling in ASP .NET
Exception handling in ASP .NET
 
Java chapter 6
Java chapter 6Java chapter 6
Java chapter 6
 
Exception
ExceptionException
Exception
 
Exception
ExceptionException
Exception
 
Exception
ExceptionException
Exception
 
Exception
ExceptionException
Exception
 
Exception
ExceptionException
Exception
 
Exception
ExceptionException
Exception
 
Exception
ExceptionException
Exception
 
Exception
ExceptionException
Exception
 
A36519192_21789_4_2018_Exception Handling.ppt
A36519192_21789_4_2018_Exception Handling.pptA36519192_21789_4_2018_Exception Handling.ppt
A36519192_21789_4_2018_Exception Handling.ppt
 
L14 exception handling
L14 exception handlingL14 exception handling
L14 exception handling
 
Exception handling
Exception handlingException handling
Exception handling
 
Developer testing 201: When to Mock and When to Integrate
Developer testing 201: When to Mock and When to IntegrateDeveloper testing 201: When to Mock and When to Integrate
Developer testing 201: When to Mock and When to Integrate
 

Último

unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxBkGupta21
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESmohitsingh558521
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rick Flair
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
What is Artificial Intelligence?????????
What is Artificial Intelligence?????????What is Artificial Intelligence?????????
What is Artificial Intelligence?????????blackmambaettijean
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 

Último (20)

unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptx
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
What is Artificial Intelligence?????????
What is Artificial Intelligence?????????What is Artificial Intelligence?????????
What is Artificial Intelligence?????????
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 

2 the essentials of effective java

  • 1. JAVA BASIC TRAINING II. The Essentials of Effective Java
  • 3. Good Ways to Define Class • Class Modifier • Should it be final • Default Constructor • Compiler generates one if not defined • But, always define it explicitly • Always invoke super() explicitly • Visibility • Class • Constructor • Singleton
  • 4. “withXxx” Pattern • Consider a class with many fields • Initialize with setters • “withXxx” pattern
  • 5. Avoid Creating Unnecessary Objects • String str = new String(“hello”); • Integer i = new Integer(10); • Boolean b = new Boolean(true);
  • 6. Avoid Creating Unnecessary Objects • String str = new String(“hello”); • Integer i = new Integer(10); • Boolean b = new Boolean(true); do not waste time and memory
  • 7. Memory Leak • Garbage Collection • Mark-Sweep-Compact, as an example • Memory Leak in Java means unintentionally retained • Nulling out references when really necessary • It should be the exceptional rather than the normal • The best way is let the variable fall out of scope
  • 9. Exercises • Refine Resource/Designer/Tester • name, age, id, gender, unit as fields • Static class ResourceBuilder • Which can build a kind of resource • Manager as a Singleton • Create memory leak
  • 10. Methods Common to All Objects
  • 11. equals() • Suppose x, y, z are all non-null references • Reflexive • x.equals(x) must return true • Symmetric • x.equals(y) must return true if and only if y.equals(x)returns true • Transitive • if x.equals(y) returns true • and y.equals(z) returns true • then x.equals(z) must return true • Consistent • x.equals(y) must consistently return the same result
  • 12. hashCode() • Equal objects must have equal hash codes • If equals() is overridden, hashCode() must be overridden • Failed to do so, there will be trouble working with hash-based collections
  • 13. toString() • Default toString returns something like “Designer@163b91” • A good toString() implementation • Makes the class pleasant to use • Should return all interesting information contained in the object • Specifies the format if necessary and stick to it • Provides programmatic access to the returned string if necessary
  • 14. Exercises • Add equals() and hashCode() to Designer and Tester • Consider about how to write a “correct” equals() and “perfect” hashCode() • Add toString() to Designer and Tester • A parse() method in Resource to parse a Designer or Tester
  • 16. How to Define Java Bean • What is Java Bean? • Data structure • Object representative • The ingredients • Fields • Setters and Getters • Optional equals()/hashCode(), and toString()
  • 17. Prefer Interface to Abstract Class • No multiple inheritance in Java • Pros • Easily retrofitted to implement a new interface • Ideal for defining mixins: Comparable for example • Allow construction of nonhierarchical type framework: someone can be both a singer and songwriter • Cons • Not off-the-shelf to use • Once released and widely implemented, almost impossible to change • Skeletal implementation combining interface and abstract class • Map/AbstractMap • Set/AbstractSet
  • 18. Use Interfaces Only to Define Types • Constant interface pattern • Nothing but only constants defined • Use noninstantiable class instead
  • 19. Use Interfaces Only to Define Types IT ER DO • Constant interface pattern NEV • Nothing but only constants defined • Use noninstantiable class instead
  • 20. Use Interfaces Only to Define Types IT ER DO • Constant interface pattern NEV • Nothing but only constants defined • Use noninstantiable class instead
  • 21. Prefer Class Hierarchies to Tagged Classes • What is tagged class? • A class with certain field to indicate the actual type • Tagged class are verbose, error-prone, and inefficient • Unfortunately, tagged class is not OO
  • 22. Favor Static Member Classes over Non-static • The class defined in another class • Non-static member class can • Obtain reference to the enclosing instance using the qualified this construct • Static member class can • Be instantiated in isolation from an instance of its enclosing class • Make it a static member class • Whenever it does not require access to an enclosing instance • When it should be instantiated from outside of the enclosing class • Get rid of time and space costs to store reference to its enclosing instance
  • 23. Exercises • Try static and non-static member class • Define the class • Instantiate it from outside the enclosing class • Obtains reference of the enclosing instance
  • 25. Generics • Don’t use raw types in new code • Favor generic types • List<String>, instead of List • Favor generic method • List<T> hello(T word), instead of List<Object> hello(Object word)
  • 26. Exercises • SuppressWarnings annotation for unchecked access • Write a generic method
  • 28. Methods • Return empty arrays or collections, instead of null • Write javadoc comments for all exposed API elements
  • 29. Exercises • Write a method returning null representing nothing • Write a method returning empty collection representing nothing • Check the client code
  • 31. General Programming • Minimize the scope of local variables • Mark variable as final whenever possible • Prefer for-each loop • Know and use the libraries • String concatenation, StringBuilder and StringBuffer • Refer to object by interface
  • 33. Exception Hierarchy Throwable Exception Error RuntimeException ... VirtualMachineError ... NullPointerException OutOfMemoryError ... ...
  • 34. Exception Hierarchy Throwable Exception Error RuntimeException ... VirtualMachineError ... NullPointerException OutOfMemoryError ... ... Unchecked
  • 35. Exception Hierarchy Throwable Exception Error RuntimeException ... VirtualMachineError ... NullPointerException Checked OutOfMemoryError ... ... Unchecked
  • 36. Checked and Unchecked • Checked • Required to catch • Can reasonably be expected to recover • Unchecked • Not required to catch • Generally, not recoverable
  • 37. Avoid Unnecessary of Checked Exception • Checked exception is great • Forcing programmer to deal with exception • Enhancing reliability • Overusing it will make API less pleasant to use • If contract can be made between API and client, no need to use checked exception • For example, wrong format of argument • A method provided to check exceptional condition
  • 38. Favor Standard Exceptions Exception Occasion for Use IllegalArgumentException null value is not good to go • Before go creating your own exception type, favor IllegalStatementException instance state is not OK for method invocation standard exception NullPointerException null value is not prohibited • Java platform libraries provide a basic set of IndexOutOfBoundsException input parameter is out of range unchecked exceptions concurrent modification of an object ConcurrentModificationException has been detected where it is prohibited UnsupportedOperationException object does not support method
  • 39. Use Exception Only for Exceptional Conditions try { int i = 0; while (true) { range[i++].climb(); } } catch (ArrayIndexOutOfBoundsException e) { ... } • Exception should only be used for exceptional conditions • Well designed API must not force its clients to use exception for ordinary control flow
  • 40. Chaining Exceptions try { ... } catch (AException e) { throw new BException(“more description”, e); } • Preserve exception stack trace • Complete information when exception happens • A bad example is FDSStandardException
  • 41. Chaining Exceptions try { ... } catch (AException e) { } throw new BException(“more description”, e ); • Preserve exception stack trace • Complete information when exception happens • A bad example is FDSStandardException
  • 42. How to Define Own Exception • Extend from Exception or RuntimeException • Provide serialVersionUID • Override all constructors • Default • With detail message only • With detail message and cause • With cause only • Add you own fields if necessary, for example error code
  • 43. Other Best Practice • Document all exceptions thrown by each method • Always set detail message • Don’t catch and ignore exception, at least write down a comment
  • 44. Exercises • Define own checked and unchecked exceptions • Write methods throwing the above exceptions • Write client code to invoke the above methods
  • 45. Homework • Refactor the AddressBook project according to what we’ve learned in this course

Notas do Editor

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n