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

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

9
เหตุใดวิธีการคงที่จึงถือว่าเป็นวิธีการ
ฉันกำลังเขียนคำอธิบายรหัสสำหรับหลักสูตรและบังเอิญใช้คำmethodและfunctionสลับกันไปมา ฉันตัดสินใจที่จะกลับไปแก้ไขคำพูดนั้น แต่ก็พบกับช่องโหว่ในความเข้าใจของฉัน จากสิ่งที่ฉันเข้าใจรูทีนย่อยคือfunctionถ้ามันไม่ทำงานกับอินสแตนซ์ของคลาส (เอฟเฟกต์ถูก จำกัด ไว้ที่อินพุต / เอาท์พุตอย่างชัดเจน) และmethodถ้ามันทำงานบนอินสแตนซ์ของคลาส (มันอาจมี ออกผลข้างเคียงในกรณีที่ทำให้ไม่บริสุทธิ์) มีการอภิปรายที่ดีในหัวข้อนี้ โปรดทราบว่าตามคำจำกัดความของคำตอบที่ยอมรับแล้วสแตติกmethodควรเป็นฟังก์ชันเนื่องจากอินสแตนซ์จะไม่ถูกส่งผ่านโดยปริยายและไม่มีการเข้าถึงสมาชิกของอินสแตนซ์ใด ๆ ด้วยเหตุนี้จึงไม่ควรนิ่งmethodsเป็นฟังก์ชันใช่หรือไม่? ตามความหมายของพวกเขาพวกเขาไม่ได้ดำเนินการกับกรณีเฉพาะของคลาส พวกเขา "ผูก" กับชั้นเรียนเพราะความสัมพันธ์เท่านั้น ฉันเคยเห็นไซต์ที่ดูดีสองสามแห่งที่อ้างถึงรูทีนย่อยแบบคงที่เป็น "วิธีการ" แม้ว่า ( Oracle , Fredosaurus , ProgrammingSimplified ) ดังนั้นพวกเขาทั้งหมดมองข้ามคำศัพท์หรือฉันพลาดอะไรบางอย่าง (ฉันเดาว่าเป็นอย่างหลัง) . ฉันต้องการให้แน่ใจว่าฉันใช้ถ้อยคำที่ถูกต้อง ใครช่วยเคลียร์เรื่องนี้ได้ไหม

6
เธรด Java Static initializers ปลอดภัยหรือไม่
ฉันใช้บล็อกรหัสคงที่เพื่อเริ่มต้นตัวควบคุมบางตัวในรีจิสทรีที่ฉันมี ดังนั้นคำถามของฉันคือฉันสามารถรับประกันได้หรือไม่ว่าบล็อกรหัสคงที่นี้จะถูกเรียกใช้เพียงครั้งเดียวเมื่อโหลดคลาสครั้งแรก ฉันเข้าใจว่าฉันไม่สามารถรับประกันได้ว่าจะเรียกบล็อกโค้ดนี้เมื่อใดฉันคาดเดาว่าเมื่อใดที่ Classloader โหลดครั้งแรก ฉันรู้ว่าฉันสามารถซิงโครไนซ์กับคลาสในบล็อกโค้ดแบบคงที่ได้ แต่ฉันเดาว่านี่คือสิ่งที่เกิดขึ้นจริงหรือ? ตัวอย่างโค้ดง่ายๆจะเป็น; class FooRegistry { static { //this code must only ever be called once addController(new FooControllerImpl()); } private static void addController(IFooController controller) { // ... } } หรือฉันควรทำเช่นนี้ class FooRegistry { static { synchronized(FooRegistry.class) { addController(new FooControllerImpl()); } } private static void addController(IFooController …

8
Java: คลาสคงที่?
ฉันมีคลาสที่เต็มไปด้วยฟังก์ชันยูทิลิตี้ การสร้างอินสแตนซ์ของอินสแตนซ์นั้นไม่สมเหตุสมผล แต่ฉันยังต้องการเรียกวิธีการของมัน วิธีที่ดีที่สุดในการจัดการกับปัญหานี้คืออะไร? ชั้นคง? บทคัดย่อ?
130 java  class  oop  static  utility 



5
สัญลักษณ์ภายนอกที่ไม่ได้รับการแก้ไขบนสมาชิกคลาสแบบคงที่
ใส่ง่ายมาก: ฉันมีคลาสที่ประกอบด้วยสมาชิกสาธารณะแบบคงที่เป็นส่วนใหญ่ดังนั้นฉันจึงสามารถจัดกลุ่มฟังก์ชันที่คล้ายกันเข้าด้วยกันซึ่งยังต้องถูกเรียกจากคลาส / ฟังก์ชันอื่น ๆ อย่างไรก็ตามฉันได้กำหนดตัวแปรถ่านที่ไม่ได้ลงชื่อแบบคงที่สองตัวแปรในขอบเขตสาธารณะของคลาสของฉันเมื่อฉันพยายามแก้ไขค่าเหล่านี้ในตัวสร้างคลาสเดียวกันฉันได้รับข้อผิดพลาด "สัญลักษณ์ภายนอกที่ไม่ได้รับการแก้ไข" ในการคอมไพล์ class test { public: static unsigned char X; static unsigned char Y; ... test(); }; test::test() { X = 1; Y = 2; } ฉันยังใหม่กับ C ++ ดังนั้นฉันจึงเป็นเรื่องง่าย ทำไมฉันทำไม่ได้
129 c++  class  static  members 

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 

2
ฉันจะใช้คุณลักษณะ C # 6“ การใช้แบบคงที่” ได้อย่างไร?
ฉันมีลักษณะที่คู่ของเป็นคุณสมบัติใหม่ใน C # 6 โดยเฉพาะ "ใช้คงที่" การใช้ staticเป็นรูปแบบใหม่ของการใช้ประโยคที่ให้คุณนำเข้าสมาชิกแบบคงที่ไปยังขอบเขตได้โดยตรง (ด้านล่างของบล็อกโพสต์) แนวคิดมีดังนี้ตามแบบฝึกหัดสองสามข้อที่ฉันพบ แทนที่จะเป็น: using System; class Program { static void Main() { Console.WriteLine("Hello world!"); Console.WriteLine("Another message"); } } คุณสามารถละเว้นConsoleคำสั่งซ้ำได้โดยใช้คุณลักษณะ C # 6 ใหม่ในการใช้คลาสแบบคงที่: using System.Console; // ^ `.Console` added. class Program { static void Main() { WriteLine("Hello world!"); WriteLine("Another message"); } // …

4
วิธีการสร้างอินสแตนซ์คลาสภายในที่ไม่คงที่ภายในวิธีการคงที่?
ฉันมีรหัสต่อไปนี้: public class MyClass { class Inner { int s, e, p; } public static void main(String args[]) { Inner in; } } ถึงส่วนนี้รหัสก็ใช้ได้ แต่ฉันไม่สามารถสร้างอินสแตนซ์ 'in' ภายในวิธีการหลักเหมือนin = new Inner()ที่แสดงnon static field cannot be referenced in static contextได้ ฉันจะทำอย่างไร? ฉันไม่ต้องการที่จะทำให้ฉันInnerระดับคงที่

8
เหตุใดเราจึงไม่ควรใช้การป้องกันแบบคงที่ใน java
ฉันกำลังเจอคำถามนี้มีวิธีลบล้างตัวแปรคลาสใน Java หรือไม่? ความคิดเห็นแรกที่มี 36 upvotes คือ: ถ้าคุณเคยเห็นให้protected staticเรียกใช้ ใครสามารถอธิบายได้ว่าทำไมprotected staticขมวดคิ้ว?

8
เหตุใด PHP 5.2+ จึงไม่อนุญาตวิธีการคลาสแบบคงที่แบบนามธรรม
หลังจากเปิดใช้คำเตือนที่เข้มงวดใน PHP 5.2 ฉันเห็นคำเตือนมาตรฐานที่เข้มงวดมากมายจากโครงการที่เขียนขึ้นโดยไม่มีคำเตือนที่เข้มงวด: มาตรฐานที่เข้มงวด : ฟังก์ชันคงที่โปรแกรม :: getSelectSQL () ไม่ควรเป็นนามธรรมใน Program.class.inc ฟังก์ชันที่เป็นปัญหาเป็นของโปรแกรมคลาสพาเรนต์ที่เป็นนามธรรมและได้รับการประกาศว่าเป็นแบบคงที่เนื่องจากควรนำไปใช้ในคลาสย่อยเช่น TVProgram ฉันพบการอ้างอิงถึงการเปลี่ยนแปลงนี้ที่นี่ : ทิ้งฟังก์ชันคลาสคงที่ที่เป็นนามธรรม เนื่องจากการกำกับดูแล PHP 5.0.x และ 5.1.x จึงอนุญาตให้ใช้ฟังก์ชันคงที่ที่เป็นนามธรรมในคลาส ใน PHP 5.2.x มีเพียงอินเทอร์เฟซเท่านั้นที่สามารถมีได้ คำถามของฉันคือใครสามารถอธิบายได้อย่างชัดเจนว่าเหตุใดจึงไม่ควรมีฟังก์ชันคงที่ที่เป็นนามธรรมใน PHP
121 php  oop  static  abstract 

4
ตัวแปรอินสแตนซ์เทียบกับตัวแปรคลาสใน Python
ฉันมีคลาส Python ซึ่งฉันต้องการเพียงอินสแตนซ์เดียวที่รันไทม์ดังนั้นจึงเพียงพอที่จะมีแอตทริบิวต์เพียงครั้งเดียวต่อคลาสและไม่ใช่ต่ออินสแตนซ์ หากมีมากกว่าหนึ่งอินสแตนซ์ (ซึ่งจะไม่เกิดขึ้น) อินสแตนซ์ทั้งหมดควรมีการกำหนดค่าเหมือนกัน ฉันสงสัยว่าตัวเลือกใดต่อไปนี้จะดีกว่าหรือมากกว่า Python "สำนวน" ตัวแปรคลาส: class MyController(Controller): path = "something/" children = [AController, BController] def action(self, request): pass ตัวแปรอินสแตนซ์: class MyController(Controller): def __init__(self): self.path = "something/" self.children = [AController, BController] def action(self, request): pass

7
ดัชนีคงที่?
Наэтотвопросестьответына Stack Overflow нарусском : Перегрузкаиндексаторастатическогокласса ทำไมตัวทำดัชนีคงที่ไม่ได้รับอนุญาตใน C # ฉันไม่เห็นเหตุผลว่าทำไมจึงไม่ควรอนุญาตและยิ่งไปกว่านั้นมันอาจมีประโยชน์มาก ตัวอย่างเช่น: public static class ConfigurationManager { public object this[string name] { get => ConfigurationManager.getProperty(name); set => ConfigurationManager.editProperty(name, value); } /// <summary> /// This will write the value to the property. Will overwrite if the property is already there /// </summary> …

5
ฟิลด์คงที่บนการอ้างอิง null ใน Java
staticสมาชิก ( staticฟิลด์หรือstaticวิธีการ) ใน Java เชื่อมโยงกับคลาสตามลำดับแทนที่จะเป็นอ็อบเจ็กต์ของคลาสนี้ รหัสต่อไปนี้พยายามเข้าถึงฟิลด์แบบคงที่ในการnullอ้างอิง public class Main { private static final int value = 10; public Main getNull() { return null; } public static void main(String[] args) { Main main=new Main(); System.out.println("value = "+main.getNull().value); } } แม้ว่าmain.getNull()ผลตอบแทนจะทำงานและการแสดงnull value = 10รหัสนี้ทำงานอย่างไร?
119 java  static 


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.