2015-12-28 4 views
0

Иногда появляются атрибуты, возникающие в результате операции mathematical. При объявлении этих атрибутов записывается математическая операция? Например, мне нужно написать class, представляющий moment in time с атрибутом, который имеет количество секунд с полуночи за этот момент времени. Буду ли я объявить его как таковой:Объявление атрибутов при создании классов в Java

private long _secFromMid;? 

Или мне нужно объявить его как

private long _secFromMid = ((_hour*60*60) + (_minute*60) + _second);? 

ли мы когда-либо математических операций при декларировании attributes?

+1

Вы можете просто попытаться сделать это правильно? –

+0

use camelCase ... И да, вы можете инициализировать его математическими выражениями. Если вы это делаете, отметьте поле как «final» и «transient» – TheLostMind

+0

Обычно инициализация переменных при определении класса рассматривается как статические (классные) переменные. Если вы хотите изменить формулу в будущем, вы можете сохранить ее так, как она есть или иным образом использовать «окончательный» блок для объявления как константу. –

ответ

0

Вы можете выполнить любые вычисления при инициализации. Компилятор Java достаточно умен, чтобы привести в порядок.

Единственное ограничение состоит в том, что вы можете использовать другое свойство только в том случае, если оно было объявлено.

См. Это working example.

class Test 
{ 
    private String foo = "foo"; 
    private String fooBar = foo + "bar"; 
    private int x = 10; 
    private int y = x * 10; 
    private MyInt my = new MyInt(5); 
    private int z = x * my.get(); 

    public static void main (String[] args) throws java.lang.Exception 
    { 
     Test t = new Test(); 
     System.out.println(t.foo); 
     System.out.println(t.fooBar); 
     System.out.println(t.x); 
     System.out.println(t.y); 
     System.out.println(t.z); 
    } 
} 

Например, если я изменил код для этого:

class Test 
{ 
    private String fooBar = foo + "bar"; // inverted here 
    private String foo = "foo"; 
    private int x = 10; 
    private int y = x * 10; 
    private MyInt my = new MyInt(5); 
    private int z = x * my.get(); 

    public static void main (String[] args) throws java.lang.Exception 
    { 
     Test t = new Test(); 
     System.out.println(t.foo); 
     System.out.println(t.fooBar); 
     System.out.println(t.x); 
     System.out.println(t.y); 
     System.out.println(t.z); 
    } 
} 

Это вызовет ошибку компиляции:

Compilation error time: 0.1 memory: 320576 signal:0 
Main.java:19: error: illegal forward reference 
    private String fooBar = foo + "bar"; 
          ^
1 error