คำถามติดแท็ก final

11
ค่าคงที่สุดท้ายเทียบกับ C ++ ของ Java
Java สำหรับการเขียนโปรแกรมภาษา C ++ กวดวิชากล่าวว่า (ไฮไลท์เป็นของตัวเอง): สุดท้ายคำหลักคือประมาณ เทียบเท่ากับ const ใน C ++ "คร่าวๆ" หมายความว่าอะไรในบริบทนี้ พวกเขาไม่เหมือนกันหรือ อะไรคือความแตกต่างถ้ามี?
151 java  c++  const  final 

7
ความแตกต่างระหว่างสุดท้ายคงที่และสุดท้ายคงที่
ฉันพบรหัสที่มันประกาศรหัสเช่น private final static String API_RTN_SUCCESS = "0"; private final static String API_RTN_ERROR = "1"; public static final String SHARED_PREFERENCE_CONFIG = "shared_preference_config"; public static final String STARTUP_SETTING_KEY = "startup_setting"; ความแตกต่างระหว่างพวกเขาหรือพวกเขาเหมือนกันคืออะไร? หรือไม่ก็แตกต่างกันprivateหรือpublic?
151 java  static  final 

10
วัตถุประสงค์ของคำหลัก“ สุดท้าย” ใน C ++ 11 สำหรับฟังก์ชั่นคืออะไร?
วัตถุประสงค์ของfinalคำสำคัญใน C ++ 11 สำหรับฟังก์ชั่นคืออะไร? ฉันเข้าใจว่ามันป้องกันการแทนที่ฟังก์ชั่นโดยคลาสที่ได้รับ แต่ถ้าเป็นกรณีนี้มันไม่เพียงพอที่จะประกาศว่าไม่ใช่finalฟังก์ชันของคุณใช่หรือไม่ มีสิ่งอื่นอีกไหมที่ฉันหายไปที่นี่
143 c++  c++11  final 

5
Java `วิธีสุดท้าย ': มันสัญญาอะไร?
ในคลาส Java สามารถกำหนดวิธีเป็นfinalเพื่อทำเครื่องหมายว่าวิธีนี้อาจไม่ถูกแทนที่: public class Thingy { public Thingy() { ... } public int operationA() {...} /** this method does @return That and is final. */ public final int getThat() { ...} } ชัดเจนและอาจเป็นประโยชน์ในการป้องกันการทับซ้อนโดยไม่ตั้งใจหรืออาจเป็นการทำงาน - แต่นั่นไม่ใช่คำถามของฉัน คำถามของฉันคือ: จากมุมมอง OOP ฉันเข้าใจว่าโดยการกำหนดวิธีการfinalที่นักออกแบบชั้นสัญญาว่าวิธีนี้จะทำงานได้ตามที่อธิบายไว้หรือโดยนัย แต่บ่อยครั้งนี้อาจจะเป็นนอกอิทธิพลของผู้เขียนชั้นถ้าสิ่งที่วิธีการที่จะทำมีความซับซ้อนมากขึ้นแล้วเพียงแค่การส่งมอบทรัพย์สิน ข้อ จำกัด ทางวากยสัมพันธ์ชัดเจนสำหรับฉัน แต่ความหมายของ OOP คืออะไร? มีการfinalใช้อย่างถูกต้องในแง่นี้โดยผู้เขียนชั้นเรียนมากที่สุด? วิธีการ "สัญญา" …
141 java  oop  final 

16
เหตุใดคลาส String จึงถูกประกาศเป็นขั้นสุดท้ายใน Java
จากเมื่อฉันได้เรียนรู้ว่าชั้นเรียนjava.lang.Stringได้รับการประกาศเป็นขั้นสุดท้ายใน Java ฉันสงสัยว่าทำไมเป็นเช่นนั้น ฉันไม่พบคำตอบใด ๆ ในตอนนี้ แต่โพสต์นี้: จะสร้างแบบจำลองของคลาส String ใน Java ได้อย่างไร ทำให้ฉันนึกถึงการค้นหาของฉัน แน่นอนว่า String มีฟังก์ชั่นทั้งหมดที่ฉันต้องการและฉันไม่เคยคิดถึงการดำเนินการใด ๆ ที่ต้องการส่วนเสริมของคลาส String แต่คุณก็ยังไม่มีทางรู้ว่าใครบางคนอาจต้องการ! ดังนั้นไม่มีใครรู้ว่าเจตนาของนักออกแบบคืออะไรเมื่อพวกเขาตัดสินใจที่จะทำให้มันเป็นที่สิ้นสุด?
141 java  string  final 

8
เหตุใดจึงไม่มีคุณสมบัติคงที่ใน Java
ฉันพยายามระบุเหตุผลของค่าคงที่ใน Java ฉันได้เรียนรู้ว่า Java ช่วยให้เราประกาศค่าคงที่โดยใช้finalคำหลัก คำถามของฉันคือทำไม Java ไม่แนะนำคุณลักษณะคงที่ ( const) เนื่องจากหลายคนบอกว่ามาจาก C ++ ใน C ++ เรามีconstคำหลัก กรุณาแบ่งปันความคิดของคุณ
140 java  constants  final 

7
พฤติกรรมของวิธีการคงที่ขั้นสุดท้าย
ฉันเล่นกับโมดิฟายเออร์ด้วยวิธีการคงที่และเจอพฤติกรรมแปลก ๆ อย่างที่เราทราบกันดีว่าเมธอดแบบคงที่ไม่สามารถแทนที่ได้เนื่องจากเกี่ยวข้องกับคลาสมากกว่าอินสแตนซ์ ดังนั้นหากฉันมีตัวอย่างด้านล่างนี้ก็จะรวบรวมได้ดี //Snippet 1 - Compiles fine public class A { static void ts() { } } class B extends A { static void ts() { } } แต่ถ้าฉันรวมตัวปรับแต่งขั้นสุดท้ายเป็นวิธีการแบบคงที่ในคลาส A การคอมไพล์ล้มเหลว ts () ใน B ไม่สามารถแทนที่ ts () ใน A; วิธีการแทนที่เป็นที่สิ้นสุดแบบคงที่ เหตุใดจึงเกิดขึ้นเมื่อวิธีการคงที่ไม่สามารถแทนที่ได้เลย
124 java  methods  static  final 

5
มีเหตุผลด้านประสิทธิภาพในการประกาศพารามิเตอร์เมธอดใน Java หรือไม่?
มีเหตุผลด้านประสิทธิภาพในการประกาศพารามิเตอร์เมธอดใน Java หรือไม่? ใน: public void foo(int bar) { ... } เมื่อเทียบกับ: public void foo(final int bar) { ... } สมมติว่ามีการอ่านอย่างเดียวและไม่เคยแก้ไขได้ในbarfoo()
117 java  performance  final 

2
Final vs Final อย่างมีประสิทธิภาพ - พฤติกรรมที่แตกต่างกัน
จนถึงตอนนี้ฉันคิดว่าขั้นสุดท้ายและขั้นสุดท้ายที่มีประสิทธิผลนั้นเทียบเท่ากันไม่มากก็น้อยและ JLS จะปฏิบัติต่อสิ่งเหล่านี้เหมือนกันหากไม่เหมือนกันในพฤติกรรมจริง จากนั้นฉันพบสถานการณ์ที่สร้างขึ้นนี้: final int a = 97; System.out.println(true ? a : 'c'); // outputs a // versus int a = 97; System.out.println(true ? a : 'c'); // outputs 97 เห็นได้ชัดว่า JLS สร้างความแตกต่างที่สำคัญระหว่างทั้งสองที่นี่และฉันไม่แน่ใจว่าทำไม ฉันอ่านกระทู้อื่น ๆ เช่น ความแตกต่างระหว่างขั้นสุดท้ายและขั้นสุดท้ายอย่างมีประสิทธิผล ตัวแปรสุดท้ายเทียบกับตัวแปรสุดท้ายอย่างมีประสิทธิภาพ ตัวแปรที่เป็น "ขั้นสุดท้ายอย่างมีประสิทธิภาพ" หมายความว่าอย่างไร แต่ไม่ได้ลงรายละเอียดดังกล่าว ท้ายที่สุดแล้วในระดับที่กว้างขึ้นพวกเขาดูเหมือนจะเทียบเท่ากันมาก แต่การขุดลึกลงไปเห็นได้ชัดว่าพวกเขาต่าง อะไรเป็นสาเหตุของพฤติกรรมนี้ใครสามารถให้คำจำกัดความ JLS ที่อธิบายสิ่งนี้ได้บ้าง แก้ไข: ฉันพบสถานการณ์อื่นที่เกี่ยวข้อง: …


2
เหตุใด "private val" และ "private final val" จึงแตกต่างกัน
ฉันเคยคิดแบบนั้นprivate valและprivate final valเหมือนกันจนกระทั่งฉันเห็นหัวข้อ 4.1 ใน Scala Reference: นิยามค่าคงที่เป็นรูปแบบ final val x = e โดยที่ e คือนิพจน์คงที่ (§6.24) ต้องมีตัวปรับแต่งขั้นสุดท้ายและไม่สามารถระบุคำอธิบายประกอบประเภทได้ การอ้างอิงถึงค่าคงที่ x ถือว่าเป็นนิพจน์คงที่ ในโค้ดที่สร้างขึ้นจะถูกแทนที่ด้วย e ด้านขวามือของนิยาม และฉันได้เขียนแบบทดสอบ: class PrivateVal { private val privateVal = 0 def testPrivateVal = privateVal private final val privateFinalVal = 1 def testPrivateFinalVal = privateFinalVal } javap …
101 scala  private  final 

7
เหตุใดฟิลด์ทั้งหมดในอินเทอร์เฟซจึงคงที่โดยปริยายและสุดท้าย
ฉันเพียงแค่พยายามที่จะเข้าใจว่าทำไมทุกสาขาที่กำหนดไว้ใน Interface เป็นโดยปริยายและstatic finalแนวคิดในการรักษาเขตข้อมูลมีstaticความหมายสำหรับฉันเนื่องจากคุณไม่มีวัตถุของอินเทอร์เฟซ แต่ทำไมจึงเป็นfinal(โดยปริยาย)? มีใครรู้บ้างว่าทำไมนักออกแบบ Java ถึงทำฟิลด์ในอินเทอร์เฟซstaticและfinal?

11
การทำให้อาร์กิวเมนต์ของเมธอด java เป็นขั้นสุดท้าย
อะไรคือความแตกต่างfinalระหว่างโค้ดด้านล่าง มีข้อได้เปรียบในการประกาศอาร์กิวเมนต์เป็นfinal. public String changeTimezone( Timestamp stamp, Timezone fTz, Timezone toTz){ return .... } public String changeTimezone(final Timestamp stamp, final Timezone fTz, final Timezone toTz){ return .... }

7
เหตุใดจึงสามารถแก้ไขวัตถุสุดท้ายได้
ฉันเจอรหัสต่อไปนี้ในฐานรหัสที่ฉันกำลังทำอยู่: public final class ConfigurationService { private static final ConfigurationService INSTANCE = new ConfigurationService(); private List providers; private ConfigurationService() { providers = new ArrayList(); } public static void addProvider(ConfigurationProvider provider) { INSTANCE.providers.add(provider); } ... INSTANCEถูกประกาศเป็นfinal. ทำไมจึงสามารถเพิ่มวัตถุเข้าไปได้INSTANCE? ไม่ควรทำให้การใช้ขั้นสุดท้ายเป็นโมฆะ (มันไม่) ฉันสมมติว่าคำตอบต้องทำอะไรบางอย่างกับตัวชี้และหน่วยความจำ แต่อยากจะรู้แน่
90 java  final 

15
การใช้ขั้นสุดท้ายสำหรับตัวแปรใน Java ช่วยปรับปรุงการรวบรวมขยะหรือไม่
วันนี้เพื่อนร่วมงานของฉันและฉันมีการอภิปรายเกี่ยวกับการใช้finalคำหลักใน Java เพื่อปรับปรุงการรวบรวมขยะ ตัวอย่างเช่นหากคุณเขียนวิธีการเช่น: public Double doCalc(final Double value) { final Double maxWeight = 1000.0; final Double totalWeight = maxWeight * value; return totalWeight; } การประกาศตัวแปรในเมธอดfinalจะช่วยให้การรวบรวมขยะล้างหน่วยความจำจากตัวแปรที่ไม่ได้ใช้ในเมธอดหลังจากที่เมธอดออกไป นี่คือเรื่องจริง?
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.