finalมีการใช้หลายตัวแปรที่มี นี่เป็นเพียงไม่กี่
ค่าคงที่สุดท้าย
 public static class CircleToolsBetter {
     public final static double PI = 3.141;
        public double getCircleArea(final double radius) {
          return (Math.pow(radius, 2) * PI);
        }
    }
สิ่งนี้สามารถนำไปใช้กับส่วนอื่น ๆ ของรหัสของคุณหรือเข้าถึงได้โดยคลาสอื่น ๆ ด้วยวิธีนี้หากคุณเคยเปลี่ยนค่าที่คุณไม่ต้องเปลี่ยนพวกเขาทีละคน
ตัวแปรสุดท้าย
public static String someMethod(final String environmentKey) {
    final String key = "env." + environmentKey;
    System.out.println("Key is: " + key);
    return (System.getProperty(key));
  }
}
ในคลาสนี้คุณสร้างตัวแปรสุดท้ายที่กำหนดขอบเขตซึ่งเพิ่มคำนำหน้าให้กับพารามิเตอร์ environmentKey ในกรณีนี้ตัวแปรสุดท้ายจะถือเป็นที่สุดเท่านั้นภายในขอบเขตการดำเนินการซึ่งแตกต่างกันในแต่ละการดำเนินการของวิธีการ ทุกครั้งที่มีการป้อนวิธีการขั้นสุดท้ายจะถูกสร้างขึ้นใหม่ ทันทีที่มันถูกสร้างขึ้นมันจะไม่สามารถเปลี่ยนแปลงได้ในระหว่างการดำเนินการของขอบเขต สิ่งนี้ช่วยให้คุณสามารถแก้ไขตัวแปรในวิธีสำหรับช่วงเวลาของวิธีการ ดูด้านล่าง:
public class FinalVariables {
  public final static void main(final String[] args) {
    System.out.println("Note how the key variable is changed.");
    someMethod("JAVA_HOME");
    someMethod("ANT_HOME");
  }
}
ค่าคงที่สุดท้าย
public double equation2Better(final double inputValue) {
    final double K = 1.414;
    final double X = 45.0;
double result = (((Math.pow(inputValue, 3.0d) * K) + X) * M);
double powInputValue = 0;         
if (result > 360) {
  powInputValue = X * Math.sin(result); 
} else {
  inputValue = K * Math.sin(result);   // <= Compiler error   
}
สิ่งเหล่านี้มีประโยชน์โดยเฉพาะอย่างยิ่งเมื่อคุณมีรหัสยาว ๆ และมันจะสร้างข้อผิดพลาดของคอมไพเลอร์ดังนั้นคุณจะไม่เรียกใช้ข้อผิดพลาดทางตรรกะ / ธุรกิจเมื่อมีคนเปลี่ยนตัวแปรที่ไม่ควรเปลี่ยนโดยไม่ตั้งใจ
คอลเลกชันสุดท้าย
กรณีที่แตกต่างกันเมื่อเรากำลังพูดถึงคอลเลกชันคุณจะต้องตั้งค่าให้พวกเขาเป็น unmodifiable
 public final static Set VALID_COLORS; 
    static {
      Set temp = new HashSet( );
      temp.add(Color.red);
      temp.add(Color.orange);
      temp.add(Color.yellow);
      temp.add(Color.green);
      temp.add(Color.blue);
      temp.add(Color.decode("#4B0082")); // indigo
      temp.add(Color.decode("#8A2BE2")); // violet
      VALID_COLORS = Collections.unmodifiableSet(temp);
    }
มิฉะนั้นหากคุณไม่ตั้งเป็น unmodifiable:
Set colors = Rainbow.VALID_COLORS;
colors.add(Color.black); // <= logic error but allowed by compiler
ชั้นเรียนสุดท้ายและวิธีสุดท้ายไม่สามารถขยายหรือเขียนทับได้ตามลำดับ
แก้ไข: เพื่อระบุปัญหาระดับสุดท้ายที่เกี่ยวกับการคำนวณ:
มีสองวิธีในการทำให้ชั้นเรียนเป็นขั้นสุดท้าย สิ่งแรกคือการใช้คำสำคัญสุดท้ายในการประกาศคลาส:
public final class SomeClass {
  //  . . . Class contents
}
วิธีที่สองในการทำให้คลาสสุดท้ายคือประกาศสิ่งก่อสร้างทั้งหมดเป็นแบบส่วนตัว:
public class SomeClass {
  public final static SOME_INSTANCE = new SomeClass(5);
  private SomeClass(final int value) {
  }
การทำเครื่องหมายเป็นขั้นสุดท้ายช่วยให้คุณประหยัดปัญหาหากพบว่าเป็นขั้นตอนสุดท้ายเพื่อแสดงให้เห็นถึงคลาสทดสอบนี้ ดูสาธารณะได้อย่างรวดเร็วก่อน
public class Test{
  private Test(Class beanClass, Class stopClass, int flags)
    throws Exception{
    //  . . . snip . . . 
  }
}
น่าเสียดายเนื่องจากคอนสตรัคเตอร์เฉพาะของคลาสนั้นเป็นแบบส่วนตัวจึงไม่สามารถขยายคลาสนี้ได้ ในกรณีของคลาสทดสอบไม่มีเหตุผลที่คลาสควรเป็นที่สิ้นสุด คลาสการทดสอบเป็นตัวอย่างที่ดีของวิธีการที่คลาสสุดท้ายโดยนัยสามารถทำให้เกิดปัญหาได้
ดังนั้นคุณควรทำเครื่องหมายเป็นขั้นสุดท้ายเมื่อคุณสร้างคลาสโดยปริยายโดยทำให้เป็นคอนสตรัคเตอร์ส่วนตัว