SlideShare a Scribd company logo
Dr Java Workshop – By Satyarth Gaur We will cover the following areas:  - Top 10 mistakes made by Java programmers – How to avoid them    - Core Java- Best Practices – This covers good and bad practices both - How to prepare for Java Interviews and Sun Java Exams
Top Ten Errors Java Programmers Make SATYARTH GAUR [email_address]
Accessing non-static member variables from static methods (such as main) public class StaticDemo { public String my_member_variable = "somedata"; public static void main (String args[]) { // Access a non-static member from static method System.out.println ("This generates a compiler error" + my_member_variable ); } }
Contd.. public class NonStaticDemo { public String my_member_variable = "somedata";   public static void main (String args[]) { NonStaticDemo demo = new NonStaticDemo();   // Access member variable of demo System.out.println ("This WON'T generate an error" + demo.my_member_variable ); } }
Mistyping the name of a method when overriding If you mistype the name, you're no longer overriding a method - you're creating an entirely new method, but with the same parameter and return type.
Comparison assignment (  = rather than == ) Fortunately, even if you don't spot this one by looking at code on the screen, your compiler will. Most commonly, it will report an error message like this : "Can't convert xxx to boolean", where xxx is a Java type that you're assigning instead of comparing.
Comparing two objects ( == instead of .equals) When we use the == operator, we are actually comparing two object references, to see if they point to the same object. We cannot compare, for example, two strings for equality, using the == operator. We must instead use the .equals method, which is a method inherited by all classes from java.lang.Object. Ex. String Comparison String abc = "abc"; String def = "def";   // Bad way if ( (abc + def) == "abcdef" ) { ….. } // Good way if ( (abc + def).equals("abcdef") ) { ..... }
Confusion over passing by value, and passing by reference When you pass a primitive data type, such as a char, int, float, or double, to a function then you are  passing by value . That means that a copy of the data type is duplicated, and passed to the function. That means that a copy of the data type is duplicated, and passed to the function. If the function chooses to modify that value, it will be modifying the copy only.
Contd.. When you pass a Java object, such as an array, a vector, or a string, to a function then you are  passing by reference .So that means that if you pass an object to a function, you are passing a reference to it, not a duplicate. Any changes you make to the object's member variables will be permanent
Writing blank exception handlers public static void main(String args[]) {      try { // Your code goes here..      }      catch (Exception e)      { System.out.println ("Err - " + e );      } }
Forgetting that Java is zero-indexed If you've come from a C/C++ background, you may not find this quite as much a problem as those who have used other languages. In Java, arrays are zero-indexed, meaning that the first element's index is actually 0
Example Contd.. // Create an array of three strings String[] strArray = new String[3];   // First element's index is actually 0 strArray[0] = "First string";   // Second element's index is actually 1 strArray[1] = "Second string";   // Final element's index is actually 2 strArray[2] = "Third and final string";
Preventing concurrent access to shared variables by threads The simplest method is to make your variables private (but you do that already,  right?) and to use synchronized accessor methods. Accessor methods allow access to private member variables, but in a controlled manner. Take the following accessor methods, which provide a safe way to change the value of a counter.
Contd.. public class MyCounter{ private int count = 0; // count starts at zero   public synchronized void setCount(int amount) {  count = amount; } public synchronized int getCount() { return count; }  }
Capitalization errors While there's no silver bullet for detecting this error, you can easily train yourself to make less of them. There's a very simple trick you can learn :-  all methods and member variables in the Java API begin with lowercase letters  all methods and member variables use capitalization where a new word begins e.g - getDoubleValue()
Capitalization errors While there's no silver bullet for detecting this error, you can easily train yourself to make less of them. There's a very simple trick you can learn :-  all methods and member variables in the Java API begin with lowercase letters  all methods and member variables use capitalization where a new word begins e.g - getDoubleValue()
Null pointers When an attempt to access an object is made, and the reference to that object is null, a NullPointerException will be thrown. The cause of null pointers can be varied, but generally it means that either you haven't initialized an object, or you haven't checked the return value of a function.
Java  Best Practices Java Fundamentals & Object-Oriented Programming Dr Java Boot Camp – Satyarth Gaur
Bad Practices
Duplicate Code! Every time you need to make a change in the routine, you need to edit it in several places.  Don’t copy-paste code!
Accessible Fields Fields should always be private except for constants. Accessible fields cause tight coupling. Accessible fields are corruptible. If a field needs to be accessed, use “get” and “set” convention.
Using Magic Numbers Magic numbers are not readable for (int i = 1; i =< 52; i++) { j  =  i + randomInt(53 - i) – 1 swapEntries(i, j) } Replace with constants. final int DECKSIZE = 52; for (int i = 1; i =< DECKSIZE; i++) { j  =  i + randomInt(DECKSIZE + 1 - i) – 1 swapEntries(i, j) }
Temporary Fields If a variable need not be shared across methods, make it local. private int x; int method() { x = 0; // if you forget to initialize, you're dead ...  // do some stuff return x; } int method() { int x = 0; ...  // do some stuff return x; }
Initializing Strings with “new” Don’t: String str = new String(“This is bad.”); Do: String str = “This is good.”;
Using floats and doubles for currency calculations Binary numbers cannot exactly represent decimals. Use BigDecimal for currency calculations. ...using the constructor that takes a String as a parameter.
Returning null Causes NullPointerExceptions. Instead, return… empty objects custom-made “Null Objects”
 
 
Subclassing for Functionality Implementation inheritance is difficult to debug. Ask yourself: “Is this a kind of…?” Alternatives: Prefer interface inheritance. Prefer composition over inheritance.
Empty Catch Block No indication that an exception has occurred!
Using Exceptions Unexceptionally Use exceptions only for exceptional conditions. Bad: try { obj = arr[index]; } catch (ArrayIndexOutOfBoundsException) { // do something } Good: if (index < 0 || index >= arr.size()) { // do something } else { obj = arr[index]; }
Excessive Use of Switches Use of “if” and “switch” statements usually a sign of a breach of the “One Responsibility Rule”. Consider polymorphism instead.
instanceof If you’re using instanceof often, it probably means bad design. Consider adding an overridden method in supertype. instanceof should only be used  as validation prior to casting when you have to used a poorly-written library
Static Methods Static methods are.. ...procedural They break encapsulation - the method should be part of the object that needs it ...not polymorphic You can't have substitution/pluggability. You can't override a static method because the implementation is tied to the class it's defined in. Makes your code rigid, difficult to test.
System.exit Only use in stand-alone applications. For server applications, this might shut down the whole application container!
Good Practices
Validate Your Parameters The first lines of code in a method should check if the parameters are valid: void myMethod(String str, int index, Object[] arr) {  if (str == null) {   throw new IllegalArgumentException(“str cannot be null”); } if (index >= arr.size || index < 0) { throw new IllegalArgumentException(“index exceeds  bounds of array”); }  … }
Create Defensive Copies Create local copies, to prevent corruption. void myMethod (List listParameter) { List listCopy = new ArrayList(listParameter); listCopy.add(somevar); ... }
Modify Strings with StringBuilder String objects are immutable. You may think you’re changing a String, but you’re actually creating a new object. Danger of OutOfMemoryErrors. Poor peformance. StringBuilder is mutable. All changes are to the same object.
Favor Immutability If your objects don’t change… easier to debug. Fields are private and final. No setters, only getters.
Prefer  “final” for Variables Usually, variables / parameters do not need to change. Get into the habit of using  final  by default, and make a variable not final only when necessary.
Declare Variable Just Before Use Easier to read and refactor.
Initialize Variables Whenever Possible Helpful in debugging, makes it clear what initial value is. Makes sure you don’t use the variable before it’s ready for use.
Follow Code Conventions Improves readability For other programmers. For yourself. Readability means…  … less bugs. … easier to debug.
Refer to Objects by Interfaces Maintainability - changes in implementation need only be done at a single point in code Polymorphism – implementation can be set at runtime. // bad: ArrayList list = new ArrayList(); list.add(somevar); // good: List list = new ArrayList(); list.add(somevar);
Consider Using Enums instead of Constants Constants: Not typesafe No namespace You often need to prefix constants to avoid collisions Brittleness When you change the order, you need to change a lot of code. Printed values are uninformative
Close Your I/O Streams If you don’t close, other applications may not be able to use the resource. Close using the “finally” block in a try-catch.
Design Close to Domain Code is easily traceable if it is close to the business it is working for. If possible, name and group your packages according to the use cases. Easy to tell client %completion of feature. If user reports a bug, easier to find where it is.
If You Override equals() Override hashcode() Always make sure that when equals() returns true, the two object have the same hashcode. Otherwise, data structures like Sets and Maps may not work.
Write Self-Documenting Code Comments are important, but… … even without comments your code should be easily readable. Ask yourself: “If I removed my comments, can someone else still understand my code?”
Use Javadoc Liberally Provide as much documentation about your code as possible.
Bubble-Up Exceptions If code is not part of the user interface, it should not handle its own exceptions. It should be bubbled-up to presentation layer… Show a popup? Show an error page? Show a commandline message? Just log to an error log?
Best Sites for Java Examples,Code Samples,Tutorials and Interview Preparation www. roseindia .net www. vaannila .com www. java2s .com www. javaprepare .com  SCJP
Contd.. www. techinterviews .com http://www.jguru.com www.coderanch.com SCJP 5 /6 By Kathy Sierra -- E book http://javapractices.com

More Related Content

What's hot (20)

PPTX
A full Machine learning pipeline in Scikit-learn vs in scala-Spark: pros and ...
Jose Quesada (hiring)
 
PDF
Change Data Feed in Delta
Databricks
 
PDF
Building Robust ETL Pipelines with Apache Spark
Databricks
 
PDF
XGBoost @ Fyber
Daniel Hen
 
PDF
Mysql query optimization
Baohua Cai
 
PPTX
OLAP on the Cloud with Azure Databricks and Azure Synapse
AtScale
 
PDF
Apache Calcite Tutorial - BOSS 21
Stamatis Zampetakis
 
PPSX
Oracle Advanced SQL
Marcin Blaszczyk
 
PDF
Gradient Boosted Regression Trees in scikit-learn
DataRobot
 
PPTX
Spark Sql and DataFrame
Prashant Gupta
 
PDF
LDM Slides: Data Modeling for XML and JSON
DATAVERSITY
 
PDF
Extensible Data Modeling
Karwin Software Solutions LLC
 
PPT
Performance Tuning And Optimization Microsoft SQL Database
Tung Nguyen Thanh
 
PDF
How to Use JSON in MySQL Wrong
Karwin Software Solutions LLC
 
PPTX
SPARQL introduction and training (130+ slides with exercices)
Thomas Francart
 
ODP
OpenGurukul : Database : PostgreSQL
Open Gurukul
 
PDF
Tableau software data visualisation
AS Stitou
 
PDF
Hive Bucketing in Apache Spark with Tejas Patil
Databricks
 
PDF
Spark (Structured) Streaming vs. Kafka Streams
Guido Schmutz
 
PPTX
Presto query optimizer: pursuit of performance
DataWorks Summit
 
A full Machine learning pipeline in Scikit-learn vs in scala-Spark: pros and ...
Jose Quesada (hiring)
 
Change Data Feed in Delta
Databricks
 
Building Robust ETL Pipelines with Apache Spark
Databricks
 
XGBoost @ Fyber
Daniel Hen
 
Mysql query optimization
Baohua Cai
 
OLAP on the Cloud with Azure Databricks and Azure Synapse
AtScale
 
Apache Calcite Tutorial - BOSS 21
Stamatis Zampetakis
 
Oracle Advanced SQL
Marcin Blaszczyk
 
Gradient Boosted Regression Trees in scikit-learn
DataRobot
 
Spark Sql and DataFrame
Prashant Gupta
 
LDM Slides: Data Modeling for XML and JSON
DATAVERSITY
 
Extensible Data Modeling
Karwin Software Solutions LLC
 
Performance Tuning And Optimization Microsoft SQL Database
Tung Nguyen Thanh
 
How to Use JSON in MySQL Wrong
Karwin Software Solutions LLC
 
SPARQL introduction and training (130+ slides with exercices)
Thomas Francart
 
OpenGurukul : Database : PostgreSQL
Open Gurukul
 
Tableau software data visualisation
AS Stitou
 
Hive Bucketing in Apache Spark with Tejas Patil
Databricks
 
Spark (Structured) Streaming vs. Kafka Streams
Guido Schmutz
 
Presto query optimizer: pursuit of performance
DataWorks Summit
 

Viewers also liked (7)

PDF
Java 8 DOs and DON'Ts - javaBin Oslo May 2015
Fredrik Vraalsen
 
PPT
Java findamentals1
Todor Kolev
 
PPT
Unit 1 Java
arnold 7490
 
PPT
Java findamentals2
Todor Kolev
 
PPT
Unit 3 Java
arnold 7490
 
KEY
Object oriented techniques
LearnNowOnline
 
PPTX
Manage Your Mesh
Akana
 
Java 8 DOs and DON'Ts - javaBin Oslo May 2015
Fredrik Vraalsen
 
Java findamentals1
Todor Kolev
 
Unit 1 Java
arnold 7490
 
Java findamentals2
Todor Kolev
 
Unit 3 Java
arnold 7490
 
Object oriented techniques
LearnNowOnline
 
Manage Your Mesh
Akana
 
Ad

Similar to JAVA Tutorial- Do's and Don'ts of Java programming (20)

PDF
Java performance
Rajesuwer P. Singaravelu
 
ODP
Best practices in Java
Mudit Gupta
 
PPTX
Java best practices
Անուշիկ Միրզոյան
 
PPTX
Java Tips, Tricks and Pitfalls
Maksym Chuhaievskyi
 
PPTX
Java best practices
Ray Toal
 
PDF
Java concepts and questions
Farag Zakaria
 
PPT
Practices For Becoming A Better Programmer
Srikanth Shreenivas
 
KEY
Clean code and Code Smells
Mario Sangiorgio
 
PPTX
The programming philosophy of jrql
msg systems ag
 
PPTX
Chap2 class,objects contd
raksharao
 
PPTX
Effective Java Second Edition - Chapter7 - Method
amix41
 
PDF
findbugs Bernhard Merkle
bmerkle
 
PPT
C0 review core java1
tam53pm1
 
PDF
LECTURE 6 DESIGN, DEBUGGING, INTERFACES.pdf
SHASHIKANT346021
 
PPT
Core Java
Bharat17485
 
PDF
Clean code
Alvaro García Loaisa
 
PPT
Core java
kasaragaddaslide
 
PDF
LECTURE 6 DESIGN, DEBasd, INTERFACES.pdf
ShashikantSathe3
 
PPT
Lesson3
Arpan91
 
PPT
Lesson3
Arvind Shah
 
Java performance
Rajesuwer P. Singaravelu
 
Best practices in Java
Mudit Gupta
 
Java best practices
Անուշիկ Միրզոյան
 
Java Tips, Tricks and Pitfalls
Maksym Chuhaievskyi
 
Java best practices
Ray Toal
 
Java concepts and questions
Farag Zakaria
 
Practices For Becoming A Better Programmer
Srikanth Shreenivas
 
Clean code and Code Smells
Mario Sangiorgio
 
The programming philosophy of jrql
msg systems ag
 
Chap2 class,objects contd
raksharao
 
Effective Java Second Edition - Chapter7 - Method
amix41
 
findbugs Bernhard Merkle
bmerkle
 
C0 review core java1
tam53pm1
 
LECTURE 6 DESIGN, DEBUGGING, INTERFACES.pdf
SHASHIKANT346021
 
Core Java
Bharat17485
 
Core java
kasaragaddaslide
 
LECTURE 6 DESIGN, DEBasd, INTERFACES.pdf
ShashikantSathe3
 
Lesson3
Arpan91
 
Lesson3
Arvind Shah
 
Ad

More from Keshav Kumar (8)

PPT
JAVA Tutorial- Do's and Don'ts of Java programming
Keshav Kumar
 
PPTX
Sumit goyal, Promoter, PlanForMe.com
Keshav Kumar
 
PPT
Alok Mittal, Managing Director, Canaan India
Keshav Kumar
 
PPT
Manish Vij, Co-founder, Quasar, Tyroo and Zoomtra
Keshav Kumar
 
PPT
Pawan Gadia, Vice President, Ferns 'N' Petals
Keshav Kumar
 
PPSX
Manish Pathak, Brand Building
Keshav Kumar
 
PPT
Jatin Mahindra, Founder, InternetMafia
Keshav Kumar
 
PPTX
Ankur Dinesh Garg, CMD, Wirefoot India Technology Ltd.
Keshav Kumar
 
JAVA Tutorial- Do's and Don'ts of Java programming
Keshav Kumar
 
Sumit goyal, Promoter, PlanForMe.com
Keshav Kumar
 
Alok Mittal, Managing Director, Canaan India
Keshav Kumar
 
Manish Vij, Co-founder, Quasar, Tyroo and Zoomtra
Keshav Kumar
 
Pawan Gadia, Vice President, Ferns 'N' Petals
Keshav Kumar
 
Manish Pathak, Brand Building
Keshav Kumar
 
Jatin Mahindra, Founder, InternetMafia
Keshav Kumar
 
Ankur Dinesh Garg, CMD, Wirefoot India Technology Ltd.
Keshav Kumar
 

Recently uploaded (20)

PDF
Presentation - Vibe Coding The Future of Tech
yanuarsinggih1
 
PPTX
OpenID AuthZEN - Analyst Briefing July 2025
David Brossard
 
PDF
From Code to Challenge: Crafting Skill-Based Games That Engage and Reward
aiyshauae
 
PDF
Newgen Beyond Frankenstein_Build vs Buy_Digital_version.pdf
darshakparmar
 
PDF
CIFDAQ Token Spotlight for 9th July 2025
CIFDAQ
 
PPTX
From Sci-Fi to Reality: Exploring AI Evolution
Svetlana Meissner
 
PPTX
AUTOMATION AND ROBOTICS IN PHARMA INDUSTRY.pptx
sameeraaabegumm
 
PDF
The Rise of AI and IoT in Mobile App Tech.pdf
IMG Global Infotech
 
PDF
IoT-Powered Industrial Transformation – Smart Manufacturing to Connected Heal...
Rejig Digital
 
PDF
CIFDAQ Weekly Market Wrap for 11th July 2025
CIFDAQ
 
PDF
What Makes Contify’s News API Stand Out: Key Features at a Glance
Contify
 
PDF
DevBcn - Building 10x Organizations Using Modern Productivity Metrics
Justin Reock
 
PDF
HCIP-Data Center Facility Deployment V2.0 Training Material (Without Remarks ...
mcastillo49
 
PDF
Bitcoin for Millennials podcast with Bram, Power Laws of Bitcoin
Stephen Perrenod
 
PDF
Building Real-Time Digital Twins with IBM Maximo & ArcGIS Indoors
Safe Software
 
PDF
Blockchain Transactions Explained For Everyone
CIFDAQ
 
PDF
[Newgen] NewgenONE Marvin Brochure 1.pdf
darshakparmar
 
PDF
Newgen 2022-Forrester Newgen TEI_13 05 2022-The-Total-Economic-Impact-Newgen-...
darshakparmar
 
PDF
Reverse Engineering of Security Products: Developing an Advanced Microsoft De...
nwbxhhcyjv
 
PPTX
WooCommerce Workshop: Bring Your Laptop
Laura Hartwig
 
Presentation - Vibe Coding The Future of Tech
yanuarsinggih1
 
OpenID AuthZEN - Analyst Briefing July 2025
David Brossard
 
From Code to Challenge: Crafting Skill-Based Games That Engage and Reward
aiyshauae
 
Newgen Beyond Frankenstein_Build vs Buy_Digital_version.pdf
darshakparmar
 
CIFDAQ Token Spotlight for 9th July 2025
CIFDAQ
 
From Sci-Fi to Reality: Exploring AI Evolution
Svetlana Meissner
 
AUTOMATION AND ROBOTICS IN PHARMA INDUSTRY.pptx
sameeraaabegumm
 
The Rise of AI and IoT in Mobile App Tech.pdf
IMG Global Infotech
 
IoT-Powered Industrial Transformation – Smart Manufacturing to Connected Heal...
Rejig Digital
 
CIFDAQ Weekly Market Wrap for 11th July 2025
CIFDAQ
 
What Makes Contify’s News API Stand Out: Key Features at a Glance
Contify
 
DevBcn - Building 10x Organizations Using Modern Productivity Metrics
Justin Reock
 
HCIP-Data Center Facility Deployment V2.0 Training Material (Without Remarks ...
mcastillo49
 
Bitcoin for Millennials podcast with Bram, Power Laws of Bitcoin
Stephen Perrenod
 
Building Real-Time Digital Twins with IBM Maximo & ArcGIS Indoors
Safe Software
 
Blockchain Transactions Explained For Everyone
CIFDAQ
 
[Newgen] NewgenONE Marvin Brochure 1.pdf
darshakparmar
 
Newgen 2022-Forrester Newgen TEI_13 05 2022-The-Total-Economic-Impact-Newgen-...
darshakparmar
 
Reverse Engineering of Security Products: Developing an Advanced Microsoft De...
nwbxhhcyjv
 
WooCommerce Workshop: Bring Your Laptop
Laura Hartwig
 

JAVA Tutorial- Do's and Don'ts of Java programming

  • 1. Dr Java Workshop – By Satyarth Gaur We will cover the following areas:  - Top 10 mistakes made by Java programmers – How to avoid them    - Core Java- Best Practices – This covers good and bad practices both - How to prepare for Java Interviews and Sun Java Exams
  • 2. Top Ten Errors Java Programmers Make SATYARTH GAUR [email_address]
  • 3. Accessing non-static member variables from static methods (such as main) public class StaticDemo { public String my_member_variable = &quot;somedata&quot;; public static void main (String args[]) { // Access a non-static member from static method System.out.println (&quot;This generates a compiler error&quot; + my_member_variable ); } }
  • 4. Contd.. public class NonStaticDemo { public String my_member_variable = &quot;somedata&quot;;   public static void main (String args[]) { NonStaticDemo demo = new NonStaticDemo();   // Access member variable of demo System.out.println (&quot;This WON'T generate an error&quot; + demo.my_member_variable ); } }
  • 5. Mistyping the name of a method when overriding If you mistype the name, you're no longer overriding a method - you're creating an entirely new method, but with the same parameter and return type.
  • 6. Comparison assignment (  = rather than == ) Fortunately, even if you don't spot this one by looking at code on the screen, your compiler will. Most commonly, it will report an error message like this : &quot;Can't convert xxx to boolean&quot;, where xxx is a Java type that you're assigning instead of comparing.
  • 7. Comparing two objects ( == instead of .equals) When we use the == operator, we are actually comparing two object references, to see if they point to the same object. We cannot compare, for example, two strings for equality, using the == operator. We must instead use the .equals method, which is a method inherited by all classes from java.lang.Object. Ex. String Comparison String abc = &quot;abc&quot;; String def = &quot;def&quot;;   // Bad way if ( (abc + def) == &quot;abcdef&quot; ) { ….. } // Good way if ( (abc + def).equals(&quot;abcdef&quot;) ) { ..... }
  • 8. Confusion over passing by value, and passing by reference When you pass a primitive data type, such as a char, int, float, or double, to a function then you are passing by value . That means that a copy of the data type is duplicated, and passed to the function. That means that a copy of the data type is duplicated, and passed to the function. If the function chooses to modify that value, it will be modifying the copy only.
  • 9. Contd.. When you pass a Java object, such as an array, a vector, or a string, to a function then you are passing by reference .So that means that if you pass an object to a function, you are passing a reference to it, not a duplicate. Any changes you make to the object's member variables will be permanent
  • 10. Writing blank exception handlers public static void main(String args[]) {     try { // Your code goes here..     }     catch (Exception e)     { System.out.println (&quot;Err - &quot; + e );     } }
  • 11. Forgetting that Java is zero-indexed If you've come from a C/C++ background, you may not find this quite as much a problem as those who have used other languages. In Java, arrays are zero-indexed, meaning that the first element's index is actually 0
  • 12. Example Contd.. // Create an array of three strings String[] strArray = new String[3];   // First element's index is actually 0 strArray[0] = &quot;First string&quot;;   // Second element's index is actually 1 strArray[1] = &quot;Second string&quot;;   // Final element's index is actually 2 strArray[2] = &quot;Third and final string&quot;;
  • 13. Preventing concurrent access to shared variables by threads The simplest method is to make your variables private (but you do that already,  right?) and to use synchronized accessor methods. Accessor methods allow access to private member variables, but in a controlled manner. Take the following accessor methods, which provide a safe way to change the value of a counter.
  • 14. Contd.. public class MyCounter{ private int count = 0; // count starts at zero   public synchronized void setCount(int amount) { count = amount; } public synchronized int getCount() { return count; } }
  • 15. Capitalization errors While there's no silver bullet for detecting this error, you can easily train yourself to make less of them. There's a very simple trick you can learn :- all methods and member variables in the Java API begin with lowercase letters all methods and member variables use capitalization where a new word begins e.g - getDoubleValue()
  • 16. Capitalization errors While there's no silver bullet for detecting this error, you can easily train yourself to make less of them. There's a very simple trick you can learn :- all methods and member variables in the Java API begin with lowercase letters all methods and member variables use capitalization where a new word begins e.g - getDoubleValue()
  • 17. Null pointers When an attempt to access an object is made, and the reference to that object is null, a NullPointerException will be thrown. The cause of null pointers can be varied, but generally it means that either you haven't initialized an object, or you haven't checked the return value of a function.
  • 18. Java Best Practices Java Fundamentals & Object-Oriented Programming Dr Java Boot Camp – Satyarth Gaur
  • 20. Duplicate Code! Every time you need to make a change in the routine, you need to edit it in several places. Don’t copy-paste code!
  • 21. Accessible Fields Fields should always be private except for constants. Accessible fields cause tight coupling. Accessible fields are corruptible. If a field needs to be accessed, use “get” and “set” convention.
  • 22. Using Magic Numbers Magic numbers are not readable for (int i = 1; i =< 52; i++) { j = i + randomInt(53 - i) – 1 swapEntries(i, j) } Replace with constants. final int DECKSIZE = 52; for (int i = 1; i =< DECKSIZE; i++) { j = i + randomInt(DECKSIZE + 1 - i) – 1 swapEntries(i, j) }
  • 23. Temporary Fields If a variable need not be shared across methods, make it local. private int x; int method() { x = 0; // if you forget to initialize, you're dead ... // do some stuff return x; } int method() { int x = 0; ... // do some stuff return x; }
  • 24. Initializing Strings with “new” Don’t: String str = new String(“This is bad.”); Do: String str = “This is good.”;
  • 25. Using floats and doubles for currency calculations Binary numbers cannot exactly represent decimals. Use BigDecimal for currency calculations. ...using the constructor that takes a String as a parameter.
  • 26. Returning null Causes NullPointerExceptions. Instead, return… empty objects custom-made “Null Objects”
  • 27.  
  • 28.  
  • 29. Subclassing for Functionality Implementation inheritance is difficult to debug. Ask yourself: “Is this a kind of…?” Alternatives: Prefer interface inheritance. Prefer composition over inheritance.
  • 30. Empty Catch Block No indication that an exception has occurred!
  • 31. Using Exceptions Unexceptionally Use exceptions only for exceptional conditions. Bad: try { obj = arr[index]; } catch (ArrayIndexOutOfBoundsException) { // do something } Good: if (index < 0 || index >= arr.size()) { // do something } else { obj = arr[index]; }
  • 32. Excessive Use of Switches Use of “if” and “switch” statements usually a sign of a breach of the “One Responsibility Rule”. Consider polymorphism instead.
  • 33. instanceof If you’re using instanceof often, it probably means bad design. Consider adding an overridden method in supertype. instanceof should only be used as validation prior to casting when you have to used a poorly-written library
  • 34. Static Methods Static methods are.. ...procedural They break encapsulation - the method should be part of the object that needs it ...not polymorphic You can't have substitution/pluggability. You can't override a static method because the implementation is tied to the class it's defined in. Makes your code rigid, difficult to test.
  • 35. System.exit Only use in stand-alone applications. For server applications, this might shut down the whole application container!
  • 37. Validate Your Parameters The first lines of code in a method should check if the parameters are valid: void myMethod(String str, int index, Object[] arr) { if (str == null) { throw new IllegalArgumentException(“str cannot be null”); } if (index >= arr.size || index < 0) { throw new IllegalArgumentException(“index exceeds bounds of array”); } … }
  • 38. Create Defensive Copies Create local copies, to prevent corruption. void myMethod (List listParameter) { List listCopy = new ArrayList(listParameter); listCopy.add(somevar); ... }
  • 39. Modify Strings with StringBuilder String objects are immutable. You may think you’re changing a String, but you’re actually creating a new object. Danger of OutOfMemoryErrors. Poor peformance. StringBuilder is mutable. All changes are to the same object.
  • 40. Favor Immutability If your objects don’t change… easier to debug. Fields are private and final. No setters, only getters.
  • 41. Prefer “final” for Variables Usually, variables / parameters do not need to change. Get into the habit of using final by default, and make a variable not final only when necessary.
  • 42. Declare Variable Just Before Use Easier to read and refactor.
  • 43. Initialize Variables Whenever Possible Helpful in debugging, makes it clear what initial value is. Makes sure you don’t use the variable before it’s ready for use.
  • 44. Follow Code Conventions Improves readability For other programmers. For yourself. Readability means… … less bugs. … easier to debug.
  • 45. Refer to Objects by Interfaces Maintainability - changes in implementation need only be done at a single point in code Polymorphism – implementation can be set at runtime. // bad: ArrayList list = new ArrayList(); list.add(somevar); // good: List list = new ArrayList(); list.add(somevar);
  • 46. Consider Using Enums instead of Constants Constants: Not typesafe No namespace You often need to prefix constants to avoid collisions Brittleness When you change the order, you need to change a lot of code. Printed values are uninformative
  • 47. Close Your I/O Streams If you don’t close, other applications may not be able to use the resource. Close using the “finally” block in a try-catch.
  • 48. Design Close to Domain Code is easily traceable if it is close to the business it is working for. If possible, name and group your packages according to the use cases. Easy to tell client %completion of feature. If user reports a bug, easier to find where it is.
  • 49. If You Override equals() Override hashcode() Always make sure that when equals() returns true, the two object have the same hashcode. Otherwise, data structures like Sets and Maps may not work.
  • 50. Write Self-Documenting Code Comments are important, but… … even without comments your code should be easily readable. Ask yourself: “If I removed my comments, can someone else still understand my code?”
  • 51. Use Javadoc Liberally Provide as much documentation about your code as possible.
  • 52. Bubble-Up Exceptions If code is not part of the user interface, it should not handle its own exceptions. It should be bubbled-up to presentation layer… Show a popup? Show an error page? Show a commandline message? Just log to an error log?
  • 53. Best Sites for Java Examples,Code Samples,Tutorials and Interview Preparation www. roseindia .net www. vaannila .com www. java2s .com www. javaprepare .com SCJP
  • 54. Contd.. www. techinterviews .com http://www.jguru.com www.coderanch.com SCJP 5 /6 By Kathy Sierra -- E book http://javapractices.com