powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / private static метод
25 сообщений из 34, страница 1 из 2
private static метод
    #33660786
K1RUHA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.

Был вопрос в тесте:
Which one of the following situations requires a method to be declared "private
static"?


Choice 1
The method is available only to the class, not to instances of the class.
Choice 2
The method is called by other class methods but needs to be hidden from all other
classes.
Choice 3
The results of the method can be computed at compile-time and removed by the
optimizer.
Choice 4
The method is available only to classes that extend this class.
Choice 5
The method is called only once at the time of class initialization.

Терзают сомнения между 2 и 3 ответом, т.к. если объявить метод private statit, это будет означать также и final -> компилятор может это сделать, но 2-й кажется более очевидным и прикладным%
...
Рейтинг: 0 / 0
private static метод
    #33660922
Евгений Путилин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
K1RUHAЗдравствуйте.
Терзают сомнения между 2 и 3 ответом, т.к. если объявить метод private statit, это будет означать также и final -> компилятор может это сделать, но 2-й кажется более очевидным и прикладным%
IMHO 5-й
...
Рейтинг: 0 / 0
private static метод
    #33660942
K1RUHA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений Путилин
IMHO 5-й

Нет 5-й точно не подойдет. Это определение статического блока.
...
Рейтинг: 0 / 0
private static метод
    #33660964
GMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я за второй.
А есть правильный ответ?
...
Рейтинг: 0 / 0
private static метод
    #33661261
K1RUHA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GMaxЯ за второй.
А есть правильный ответ?

Неа, ответов нет :) Поэтому и решил посовещаться.
...
Рейтинг: 0 / 0
private static метод
    #33661897
Jozic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Похоже на второе.
приват требуецца для того чтобы другие классы, включая наследников, не могли вызвать метод, а статик требуецца для того, чтобы иметь возможность вызвать из другого статик метода этого же класса.
...
Рейтинг: 0 / 0
private static метод
    #33661992
K1RUHAТерзают сомнения между 2 и 3 ответом, т.к. если объявить метод private statit, это будет означать также и final -> компилятор может это сделать, но 2-й кажется более очевидным и прикладным%
Похоже, автор не знает еще, и что такое final.

Правильный ответ - 2.

А человека, который бы рассматривал вариант 3 как вероятный, я бы на работу не взял. За такой ответ нужно отнимать балы.
...
Рейтинг: 0 / 0
private static метод
    #33662247
K1RUHA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ненавижу регистрацию
Похоже, автор не знает еще, и что такое final.


Красным выделено почему private можно рассматривать как final. А чуть выше выделено, что код final-метода может быть вставлен в байт-код. Хотя мне казалось, что как раз компилятор может и вставить значение вычисленной функции, поэтому оба ответа казались правильными.

Bruce Eckel
Final methods
There are two reasons for final methods. The first is to put a “lock” on the method to prevent any inheriting class from changing its meaning. This is done for design reasons when you want to make sure that a method’s behavior is retained during inheritance and cannot be overridden. [ Add Comment ]


The second reason for final methods is efficiency. If you make a method final, you are allowing the compiler to turn any calls to that method into inline calls. When the compiler sees a final method call it can (at its discretion) skip the normal approach of inserting code to perform the method call mechanism (push arguments on the stack, hop over to the method code and execute it, hop back and clean off the stack arguments, and deal with the return value) and instead replace the method call with a copy of the actual code in the method body. This eliminates the overhead of the method call. Of course, if a method is big, then your code begins to bloat and you probably won’t see any performance gains from inlining, since any improvements will be dwarfed by the amount of time spent inside the method. It is implied that the Java compiler is able to detect these situations and choose wisely whether to inline a final method. However, it’s better to not trust that the compiler is able to do this and make a method final only if it’s quite small or if you want to explicitly prevent overriding. [ Add Comment ]


final and private

Any private methods in a class are implicitly final. Because you can’t access a private method, you can’t override it (even though the compiler doesn’t give an error message if you try to override it, you haven’t overridden the method, you’ve just created a new method). You can add the final specifier to a private method but it doesn’t give that method any extra meaning. [ Add Comment ]


This issue can cause confusion, because if you try to override a private method (which is implicitly final) it seems to work:


“Overriding” can only occur if something is part of the base-class interface. That is, you must be able to upcast an object to its base type and call the same method (the point of this will become clear in the next chapter). If a method is private, it isn’t part of the base-class interface. It is just some code that’s hidden away inside the class, and it just happens to have that name, but if you create a public, protected or “friendly” method in the derived class, there’s no connection to the method that might happen to have that name in the base class. Since a private method is unreachable and effectively invisible, it doesn’t factor into anything except for the code organization of the class for which it was defined.


Ненавижу регистрацию
А человека, который бы рассматривал вариант 3 как вероятный, я бы на работу не взял. За такой ответ нужно отнимать балы.

Не надо быть столь категоричным, все могут ошибаться :)
...
Рейтинг: 0 / 0
private static метод
    #33662419
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
K1RUHAХотя мне казалось, что как раз компилятор может и вставить значение вычисленной функции
Для этого как минимум функция должна быть детерминированной и без побочных эффектов, чего в задании совершенно не указано.
...
Рейтинг: 0 / 0
private static метод
    #33662930
K1RUHA Ненавижу регистрацию
Похоже, автор не знает еще, и что такое final.


Красным выделено почему private можно рассматривать как final. А чуть выше выделено, что код final-метода может быть вставлен в байт-код. Хотя мне казалось, что как раз компилятор может и вставить значение вычисленной функции, поэтому оба ответа казались правильными.

Bruce Eckel
Final methods
There are two reasons for final methods. The first is to put a “lock” on the method to prevent any inheriting class from changing its meaning. This is done for design reasons when you want to make sure that a method’s behavior is retained during inheritance and cannot be overridden. [ Add Comment ]


The second reason for final methods is efficiency. If you make a method final, you are allowing the compiler to turn any calls to that method into inline calls. When the compiler sees a final method call it can (at its discretion) skip the normal approach of inserting code to perform the method call mechanism (push arguments on the stack, hop over to the method code and execute it, hop back and clean off the stack arguments, and deal with the return value) and instead replace the method call with a copy of the actual code in the method body. This eliminates the overhead of the method call. Of course, if a method is big, then your code begins to bloat and you probably won’t see any performance gains from inlining, since any improvements will be dwarfed by the amount of time spent inside the method. It is implied that the Java compiler is able to detect these situations and choose wisely whether to inline a final method. However, it’s better to not trust that the compiler is able to do this and make a method final only if it’s quite small or if you want to explicitly prevent overriding. [ Add Comment ]


final and private

Any private methods in a class are implicitly final. Because you can’t access a private method, you can’t override it (even though the compiler doesn’t give an error message if you try to override it, you haven’t overridden the method, you’ve just created a new method). You can add the final specifier to a private method but it doesn’t give that method any extra meaning. [ Add Comment ]


This issue can cause confusion, because if you try to override a private method (which is implicitly final) it seems to work:


“Overriding” can only occur if something is part of the base-class interface. That is, you must be able to upcast an object to its base type and call the same method (the point of this will become clear in the next chapter). If a method is private, it isn’t part of the base-class interface. It is just some code that’s hidden away inside the class, and it just happens to have that name, but if you create a public, protected or “friendly” method in the derived class, there’s no connection to the method that might happen to have that name in the base class. Since a private method is unreachable and effectively invisible, it doesn’t factor into anything except for the code organization of the class for which it was defined.


Ненавижу регистрацию
А человека, который бы рассматривал вариант 3 как вероятный, я бы на работу не взял. За такой ответ нужно отнимать балы.

Не надо быть столь категоричным, все могут ошибаться :)
С красным никто не спорит. Только ваша ошибка в том, что вы думаете, будто бы Choice 3 соответствует final-методу.
...
Рейтинг: 0 / 0
private static метод
    #33662976
ska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
K1RUHAБыл вопрос в тесте:
Which one of the following situations requires a method to be declared "private
static"?


Подходит только ответ 3 (да и то ...) потому как

Choice 1
The method is available only to the class, not to instances of the class.

бред собачий

Choice 2
The method is called by other class methods but needs to be hidden from all other
classes.

не обязан быть static поскольку не оговорено что "other class methods" могут быть static.

Choice 3
The results of the method can be computed at compile-time and removed by the
optimizer.

Вот только в таком варианте при параметрах константах компилятор может вычислить значение и remove by the optimizer а не вставлять "inline" bytecode.

Choice 4
The method is available only to classes that extend this class.

бред

Choice 5
The method is called only once at the time of class initialization.

не обязан быть private

Сергей
...
Рейтинг: 0 / 0
private static метод
    #33662979
ska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ska
Подходит только ответ 3 (да и то ...) потому как


А на самом деле и 3 не обязательно требует static - лишь бы к instance обращения не было, т.е. static по сути а не по описанию, так что просто вопрос некорректный.

Составителей НА МЫЛО !
...
Рейтинг: 0 / 0
private static метод
    #33663024
ska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skaА на самом деле и 3 не обязательно требует static...

Хотите посмеяться - жаба 1.4 и 1.5 вообще не оптимизирует :-))
Проверил IBM (rs6000 & as/400), HP (pa-risc), SUN.

А вот IBM JDK 1.1.8 для Win действительно соптимизировал и независимо от static но "на всякий случай" функцию оставил.
тест:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
 public   class  t1 {
	 int  m =  3 ;
	 private   int  f( int  n) {
		 return  n +  5 ;
	}
	 public   void  mmm() {
		 int  v = m + f( 3 );
		System.out.println("v="+v);
	}
}

вот что показал jad:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
// Decompiled by Jad v1.5.7. Copyright 1997-99 Pavel Kouznetsov.
// Jad home page: http://www.geocities.com/SiliconValley/Bridge/8617/jad.html
// Decompiler options: packimports(3) 
// Source File Name:   t1.java

 import  java.io.PrintStream;

 public   class  t1
{

     private   int  f( int  i)
    {
         return  i +  5 ;
    }

     public   void  mmm()
    {
         int  i = m +  8 ;
        System.out.println("v=" + i);
    }

     public  t1()
    {
        m =  3 ;
    }

     int  m;
}
...
Рейтинг: 0 / 0
private static метод
    #33663369
Евгений Путилин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
K1RUHA Евгений Путилин
IMHO 5-й
Нет 5-й точно не подойдет. Это определение статического блока.
Ребята вы что прикалываетесь? Читатйе вопрос,
3 и 4 отпадают т.к. добавленны для кучки не имеют к вопросу никакого отношения. Для 1 не нужно private для 2 не нужен static.
У меня вот вопрос если нужно проинициализировать static final перепенную как вы будите поступать?
...
Рейтинг: 0 / 0
private static метод
    #33663420
KPIIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений Путилин K1RUHA Евгений Путилин
IMHO 5-й
Нет 5-й точно не подойдет. Это определение статического блока.
Ребята вы что прикалываетесь? Читатйе вопрос,
3 и 4 отпадают т.к. добавленны для кучки не имеют к вопросу никакого отношения. Для 1 не нужно private для 2 не нужен static.
У меня вот вопрос если нужно проинициализировать static final перепенную как вы будите поступать?
Только при объявлении
...
Рейтинг: 0 / 0
private static метод
    #33664608
Jozic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ska Choice 2
The method is called by other class methods but needs to be hidden from all other
classes.не обязан быть static поскольку не оговорено что "other class methods" могут быть static.

А почему это должно быть оговорено? создать статик метод также просто как и не статик, и это будет метод класса. Противоречий не вижу. К тому же, если учитывать что в пункте первом делаецца различие между методами класса и методами инстансов класса, то логично что когда во втором пункте говорицца о метода класса - подразумеваюцца что это могут быть как статик так и не статик методы (либо вообще только статик - но это уже спорно :))

ну это конечно имхо.
...
Рейтинг: 0 / 0
private static метод
    #33664728
expp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KPIISТолько при объявлении
а так

Код: plaintext
1.
2.
3.
4.
 static   int  sv;

 static {
sv =  9000 ;
}
...
Рейтинг: 0 / 0
private static метод
    #33665021
Jozic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
expp KPIISТолько при объявленииа так

Код: plaintext
1.
2.
3.
4.
 static   int  sv;

 static {
sv =  9000 ;
}
она у вас не final
...
Рейтинг: 0 / 0
private static метод
    #33665047
Jozic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jozic expp KPIISТолько при объявленииа так

Код: plaintext
1.
2.
3.
4.
 static   int  sv;

 static {
sv =  9000 ;
}
она у вас не final Но сути не меняет:)
Это подтверждает что статик блок может быть использован при инициализации статик переменных. И приват статик метод нот реквайред в этой ситуации :)
...
Рейтинг: 0 / 0
private static метод
    #33665067
Фотография Penkov Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jozic

она у вас не final




а так?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
class Test {

        final static int sv;
        static{
                sv =  9000 ;
        }
                
        public static void main(String[] args) {
                System.out.println(sv);
        }
}

-----------------------------------
The Bat + My Gate

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
private static метод
    #33665087
KPIIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Deady[quot Jozic]

она у вас не final




а так?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
class Test {

        final static int sv;
        static{
                sv =  9000 ;
        }
                
        public static void main(String[] args) {
                System.out.println(sv);
        }
}

а я кстати не люблю таких конструкций как
static{
sv = 9000;
}


мне не нравится читать такой код
...
Рейтинг: 0 / 0
private static метод
    #33666018
expp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
извиняюсь, тупанул
static final иниц-ся строго при объявлении.
это я неудачно на обычные final ы посмотрел где так можно.

а конструкция static{} вполне юзабильна
...
Рейтинг: 0 / 0
private static метод
    #33667584
s-e-r-g-e
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
единственный случай где можно применять это 2й, а вот чтобы требовалось.. некватает шестого варианта "ни один из перечисленных"
...
Рейтинг: 0 / 0
private static метод
    #33667629
OU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OU
Гость
2 KPIIS:

автора я кстати не люблю таких конструкций как
static{
sv = 9000;
}
мне не нравится читать такой код

напрасно, instance initialisation blocks ,к примеру, очень удобный подход если нужно дублировать код в нескольких конструкторах.
...
Рейтинг: 0 / 0
private static метод
    #33668531
s-e-r-g-eединственный случай где можно применять это 2й, а вот чтобы требовалось.. некватает шестого варианта "ни один из перечисленных"

Choice 2
The method is called by other class methods but needs to be hidden from all other
classes.
...
Рейтинг: 0 / 0
25 сообщений из 34, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / private static метод
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]