Статикалық емес айнымалы мәндерді статистикалық емес әдістермен өзгертуге болады

Мен статикалық емес әдіс статикалық дананың айнымалы мәнін өзгертуге болатындығын білемін. Мен статикалық әдістер тек басқа статикалық әдістерге және статикалық айнымалыларға қол жеткізе алатынын білемін. Дегенмен, екінші тарап шынайы ма? Статистикалық емес әдістер тек статистикалық емес айнымалыларға қол жеткізе ала ма? Мысалға:

public class SampleClass {
  private static int currentCount = 0;

  public SampleClass() {
    currentCount++;
  }

  public void increaseCount() {
    currentCount++;
  }
}

Бұл код құрастырылып, статикалық қол жетімділікке байланысты неге екенін білгім келеді.

21
Сұраққа жауап: иә мүмкін; Жоқ, мұны жасамаңыз.
қосылды автор fge, көзі
@Marco Иә, ол құрастырады. Адамдар мұны кез-келген жерде құжаттап алғанын және менің ақыл-ойымның дұрыс екендігіне таңданамын.
қосылды автор Brian Vanover, көзі
Статикалық әдістер дана айнымалыларын өзгерте алмайды. Тек оларда «осы» сілтемелер жоқ. Сіз class Ex {жеке int x; static void fn (Ex ex) {ex.x = 12; }} . BTW: Мүмкін болатын статика - бұл жаман идея.
қосылды автор Tom Hawtin - tackline, көзі
Сіз оны көрдіңіз бе?
қосылды автор Marco Forberg, көзі

9 жауаптар

I have found this from The Java Tutorials

  • Мысал әдісі тікелей айнымалы мәндерге және даналық әдістеріне қол жеткізе алады.
  • Мысал әдісі класс айнымалыларына және сынып әдістеріне тікелей қол жеткізе алады.
  • Класс әдістері тікелей класс айнымалыларына және сынып әдістеріне қол жеткізе алады.
  • Класс әдісі айнымалы мәндер немесе даналық әдістеріне тікелей қатынаса алмайды - олар нысан сілтемесін пайдалану керек. Сондай-ақ, класс әдістері осы кілт сөзді пайдалана алмайды, себебі сілтеме жасайтын данасы жоқ.

Сондықтан, жауап - иә, статикалық емес айнымалы мәндерді өзгерте алмайтын статистикалық әдістер

31
қосылды

Жоқ, кез келген статистикалық әдіс статикалық мүшелерге қатынаса алады. Бұл жалған болар еді, статистикалық емес мәтінмән статикалық мүшеге (мысалы, статикалық мүше сыныпқа жеке және статистикалық емес код осы сыныпта болмаған) қол жетімді болмаса. Мысалы, егер бізде Game class және highscore айнымалысы бар болса, статистикалық статистикалық (данасыз) қол жетімді болады және әр ойыннан кейін (Game class данасы) статикалық айнымалы мәндер бар. егер біздің балл жоғары баллдан жоғары болса, статистикалық контекстен жоғары скорды өзгерте аламыз.

16
қосылды
Адамға рахмет. Мен жеке нәрсе туралы білмедім, мұнда бас ауырып қалдым.
қосылды автор A.Sanchez.SD, көзі

Статикалық емес әдістер статикалық айнымалыларға қол жеткізе алады. Статикалық әдістер тек объектілерді немесе объектілерді жасамай, тікелей статикалық айнымалыларға қол жеткізе алады: public static void main (String arg [])

5
қосылды
пайдаланбай нысансыз. Ол параметр ретінде ұсынылуы мүмкін.
қосылды автор EJP, көзі

Non-Static Methods can access both Static Variables & Static Methods as they Members of Class

Демо кодексі

public class Static_Class {
    protected static String str;
    private static int runningLoop;

    static{
        str = "Static Block";
    }

    /**
     * Non-Static Method Accessing Static Member  
     */
    public void modifyStaticMember(){
        str = "Non-Static Method";      
    }

    /**
     * Non-Static Method invoking Static Method
     */
    public void invokeStaticMethod(){
        String[] args = {};
        if(runningLoop == 0){
            runningLoop++;
            main(args); 
        }
        //Exiting as it will lead to java.lang.StackOverflowError
        System.exit(0);
    }

    public static void main(String[] args) {
        Static_Class instance = new Static_Class();
        System.out.println(str);
        instance.modifyStaticMember();

       //Changed Value persists 
        System.out.println(str);

        //Invoking Static Method
        instance.invokeStaticMethod();

    }
}
0
қосылды

Статикалық әдістер статистикалық емес өрістерді өзгерте алмайды, себебі - Статикалық емес өрісті (сыныптан тыс) пайдалану үшін сіз сынып нысанын жасайсыз, Бірақ Статикалық әдісті пайдалану үшін мүлдем объектіні құрудың қажеті жоқ. Сондықтан статистикалық емес әдіс (ол объектіні құруды қажет етпейді) үшін ақылға қонымды емес, жасалатын өрісті өзгертуге болады.

Бұл үшін - статикалық әдістер статикалық өрістерді ғана ұстай алады (немесе басқа статикалық әдістерді шақырады).

Бірақ, сіз айтып өткендей, Статикалық емес әдіс өз сыныпындағы барлық нысандар үшін статикалық болып табылатын статикалық өрісті өзгертуге болады.

0
қосылды

Міне осылай. Статикалық айнымалыға көптеген жолдармен кіруге болады. Ең кең таралғандардың бірі - var атын сынып атауына дейін жеткізу, өйткені статикалық vars әр сыныпқа жатады. Сіз сол айнымалы мәнге бір сыныпта сілтеген болсаңыз, сіз оның алдында сынып атымен босатылады. Статикалық айнымалы деп аталатын маңызды емес. Сондай-ақ, бұл кез-келген басқа кластағы қол жетімді емес жеке статикалық бар.

0
қосылды

Тұрақты мүшелер мүше емес, олар сыныппен бөліседі, сондықтан кез келген даналық әдісі осы статикалық мүшелерге қатынаса алады.

0
қосылды

Статикалық айнымалы мәндер - сыныптың айнымалы данасы немесе жергілікті айнымалы. сондықтан біз статикалық емес айнымалы статикалық емес әдіспен де пайдалана аламыз. және статикалық айнымалы мәндер объектіге қатысты емес. статикалық айнымалылардың барлығы бір бағдарламада қолданылатын бір данасы бар.

0
қосылды

Иә, статикалық әдіс статистикалық айнымалыға қатынаса алады. Бұл сыныпқа объект құру арқылы және айнымалы мәнге объект арқылы кіру арқылы жасалады. Төмендегі мысалда main - статистикалық емес айнымалы болып табылатын a айнымалы мәніне қол жеткізетін статикалық әдіс.

демо-код:

public class Sample {

   private int a;

   void method()
   {
       System.out.println("i am a private method");
   }

   public static void main(String[] args)
   { 
       Sample sample=new Sample();
       sample.a=10;
       System.out.println(sample.a);
   }
}   
0
қосылды