Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Пара вопросов уровня Java 2 Fundamentals


Автор: Shklyar 28.7.2008, 10:49
1. Что делают унарные операторы +expr и -expr?
2. Что возвращает return x > 0;? Можно-ли вернуть х, если он > 0, в противном случае false?
3. Может-ли метод run() (при реализации интерфейса Runnable), быть с параметрами?

Автор: dive 28.7.2008, 10:56
1. Что делают унарные операторы +expr и -expr?
увеличивают \ уменьшают значение переменной, к примеру, вместо x = x + 5, можно записывать x += 5, что равнозначно.

2. Что возвращает return x > 0;? Можно-ли вернуть х, если он > 0, в противном случае false?
вернет boolean, true если больше и false если нет. так возвращать значение нельзя, потому что тип возвращаемого значения задан в определении метода (public static boolean getX() {return boolean}).
в таких случаях в качестве false обычно возвращают -1.

3. Может-ли метод run() (при реализации интерфейса Runnable), быть с параметрами?
нельзя, это реализация определенных методов интерфейса. можно перегрузить конечно метод, но по умолчанию все равно будет вызываться run().

Автор: Shklyar 28.7.2008, 11:06
А такое есть?: x =+ 5

Автор: dive 28.7.2008, 11:58
Цитата(Shklyar @ 28.7.2008,  11:06)
А такое есть?: x =+ 5

я видимо не правильно понял вас, в данном случае + \ - будут менять знак числа, к примеру так:

Код

int x = 5, y, z;
y = -x;
// y будет равен -5
z = +y;
// z будет равна 5


состояние исходной переменной не изменяется.

так же есть операции инкремента и декремента, который схожы по функциональности, к примеру:

Код

int x = 5, y;
y = ++x;
// вначале увеличится значение х на единицу, а потом это значение будет присвоено y, т.е. y и х будут равны 6. это префиксная форма записи, т.е. вначале выполняется вычисление значения операнда и потом оно уже возвращается, в данном случае операции присваивания.
y = x++;
// в данном случае, вначале выполнится операция присваивания и у станет равным 6 и лишь потом значение х увеличится на единицу, т.е. после выполнения этой операции у будет равным 6, а х - 7. это постфиксная форма записи.


соответственно, можно и -- так же использовать.

Автор: w1nd 28.7.2008, 12:07
Цитата(Shklyar @  28.7.2008,  10:49 Найти цитируемый пост)
Что делают унарные операторы +expr и -expr?

Выражения -expr/+expr возвращают результат умножения expr на единицу с указанным знаком.

Автор: Shklyar 28.7.2008, 13:42
Еще парочка:
1. можно-ли писать так:
Код

class name {
   public static void main(String args[]) {
      try {
         code;
      }
      finally {
         code;
      }
   }
}

2. "Когда объект подкласса создан, вызываются все конструкторы суперкласса, начиная с верхнего в иерархии." Помогите понять.

Автор: v2v 28.7.2008, 13:45
Цитата(Shklyar @  28.7.2008,  10:49 Найти цитируемый пост)
Можно-ли вернуть х, если он > 0, в противном случае false?

Код

    public static Object t(boolean b){
                int x = 5;
        if (b){
            return new Integer(x);
        }else{
            return new Boolean(false);
        }
    }
    
    public static void main(String[] args) {
        System.out.println(t(true).getClass().getSimpleName());
        System.out.println(t(false).getClass().getSimpleName());
    }


Добавлено через 5 минут и 38 секунд
Цитата(Shklyar @  28.7.2008,  13:42 Найти цитируемый пост)

2. "Когда объект подкласса создан, вызываются все конструкторы суперкласса, начиная с верхнего в иерархии." Помогите понять.

Код


class A{
    public A(){
        System.out.println("Конструктор A");
    }
}
class A1 extends A{
    public A1(){
        System.out.println("Конструктор A1");
    }
}
class A2 extends A1{
    public A2(){
        System.out.println("Конструктор A2");
    }
}
public class TestExpr {
    public static void main(String[] args) {        
        A2 a2 ;
        System.out.println("Создаём объект");
        a2 = new A2();
        System.out.println("Объект создан");
    }
}

Автор: Shklyar 28.7.2008, 15:14
А что про: try {} finally {} ?

Автор: Filin88 28.7.2008, 15:25
try-catch используются для обработки исключений. В вашем случае try-finally. Так вот блок finally{} будет выполнен в любом случае, даже если не будет выброшено исключение

Автор: Shklyar 28.7.2008, 15:52
Вопрос: можно-ли пропускать catch и throws?
Встретил это в тесте, ответил - нельзя.

Автор: v2v 28.7.2008, 16:19
Цитата(Shklyar @  28.7.2008,  15:52 Найти цитируемый пост)
ожно-ли пропускать catch 

можно.


Автор: vinter 28.7.2008, 22:04
del

Автор: chief39 29.7.2008, 17:06
Цитата(Shklyar @  28.7.2008,  15:52 Найти цитируемый пост)
Вопрос: можно-ли пропускать catch и throws?
Встретил это в тесте, ответил - нельзя.


try ограничивает "опасный участок дороги".
После него должен идти catch на случай происшествия.

Можно опасный участок этими штуками не огораживать - тогда нужен throws в сигнатуре метода - это означает что разбираться с происшествием ты не будешь - отдашь его "наверх", пусть вызывающий метод мучается.

К try-catch можно присовокупить finally - он будет делать нечто в любом случае.
Если он есть - то можно обойтись и без catch.

при наличии catch все равно может существовать throws. Например отлавливаешь эксепшн, создаёшь новый эксепшн(другой) и "выбрасываешь" его с помощью throw. Он уходит через throws из метода.

Вобщем, если в коде возникает checked exception(если есть вызовы методов с throws в сигнатурах) - то ты должен их огородить try(которые заканчиваются catch, finally или catch+finally). Всё "неогороженное" должно быть вписано в throws метода.


Автор: Kangaroo 31.7.2008, 00:41
Цитата(chief39 @  29.7.2008,  17:06 Найти цитируемый пост)
try ограничивает "опасный участок дороги".
После него должен идти catch на случай происшествия.

chief39 и тут про машины  smile


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)