Java, определяющая или инициализирующая атрибуты класса
Java noob здесь. При кодировании нового класса при определении атрибутов класса существует разница в определении переменной и инициализации переменной. Есть ли случаи, когда вы хотели бы сделать один за другим? Я использовал примитив и объект по назначению, если есть разница для обоих случаев.
то есть.
import Java.util.Random;
public class Something extends Activity {
int integer;
Random random = null;
Something(){
integer = 0;
random = new Random();
....
против. импортировать Java.util.Random;
public class Something extends Activity {
int integer = null;
Random random;
Something(){
integer = 0;
random = new Random();
....
Ответы
Ответ 1
Во-первых, вы не можете установить примитив как null как примитив, это просто данные, где null
- ссылка на объект. Если вы попытались скомпилировать int i = null
, вы получите ошибку несовместимых типов.
Во-вторых, инициализация переменных до null
или 0
при объявлении их в классе избыточна, как в Java, для примитивов по умолчанию используется значение 0
(или false
) и ссылки на объекты по умолчанию равны null
. Это не относится к локальным переменным, однако, если вы попытались использовать ниже, вы получите ошибку инициализации во время компиляции
public static void main(String[] args)
{
int i;
System.out.print(i);
}
Явно инициализировать их значением по умолчанию 0
или false
или null
бессмысленно, но вы можете установить их на другое значение по умолчанию, тогда вы можете создать конструктор со значениями по умолчанию, например
public MyClass
{
int theDate = 9;
String day = "Tuesday";
// This would return the default values of the class
public MyClass()
{
}
// Where as this would return the new String
public MyClass (String aDiffDay)
{
day = aDiffDay;
}
}
Ответ 2
Шанку и Морфеус правильно ответили на вопрос. Во-первых, вы получите ошибку компиляции, при которой ваша примитивная переменная int "integer" будет равна null; вы можете сделать это только для объектов. Во-вторых, Шанку прав, что Java присваивает значения по умолчанию переменным экземпляра, которые являются "целыми" и "случайными" в вашем примере кода; переменные экземпляра можно просматривать внутри класса или за его пределами в зависимости от области действия (открытый, закрытый, защищенный, пакет).
Однако значения по умолчанию не для локальных переменных. Например, если вы назначили переменную в своем конструкторе типа "int height"; то он не будет инициализирован нулем.
Я бы порекомендовал читать документацию по переменной Java, которая очень хорошо описывает переменные и, кроме того, вы можете также просмотреть Java-учебники, которые также являются отличным материалом для чтения.
Ответ 3
В Java инициализация явно определена в спецификации языка. Для полей и компонентов массива, когда элементы создаются, они автоматически устанавливаются системой по умолчанию:
числа: 0 или 0.0
booleans: false
ссылки на объекты: null
Это означает, что явно задание полей в 0, false или null (в зависимости от случая) не является необходимым и избыточным.