Java. Распространённые ошибки новичков

10 Янв
2012

Недавно я решил взять себя в руки и начать учить языки программирования самостоятельно; первым выбрал Java за его воспетую кроссплатформенность. Поскольку в книге, избранной мной для обучения, не все вещи понятны и прозрачны, я решил на своем примере показать некоторые (имхо) наиболее распространенные ошибки, которые допускают начинающие программисты на Java. Формулировки ошибок возьму из Eclipse IDE.

1. &ClassName% cannnot be resolved
Такая ошибка возникает, если вы пытаетесь вызвать метод класса без предварительного создания экземпляра этого класса.
public class ClassName {
 //code...
 }

public static void main (String[] args) {
 ClassName.classMethod();
 }

Это — неправильное использование. Правильное выглядит примерно так:
public class ClassName {
 //code...
 }

public static void main (String[] args) {
 ClassName current = new ClassName();
 current.classMethod();
 }


2. The public class ClassName must be defined in its own file
Эта ошибка возникает, если имя вашего класса не совпадает с именем файла, в котором вы создаете этот класс. То есть, если файл называется ClassName.java, а вы пытаетесь создать класс, допустим, classname — ошибка возникнет. Чтобы исключить её, необходимо создавать класс с тем же именем, что и файл.

public class classname {
 //code
 }

Это — неправильное создание класса, если файл называется ClassName.java. Правильно — вот так:
public class ClassName {
 //code
 }


Необходимо также отметить, что Java чувствительна к регистру: classname и ClassName — не одно и то же.

3. Неправильная работа программ, в которых есть дробные множители/слагаемые.
Когда я писал конвертер температур, столкнулся с тем, что происходит неверное умножение на коэффициент. Мой код выглядел примерно так:
public float convertTemp (float temperature, char convertTo)
	{
		float temp;
		switch (convertTo){
		case 'C':
			float k = 5/9;
			temp = (temperature - 32) * k;
			System.out.println(temp + " Celsium degrees.");
		break;
		case 'F':
			float n = 9/5;
			temp = temperature * n + 32;
			System.out.println(temp + " Fahrenheit degrees.");
		break;
		}
		return temperature;
	}

и не работал, хотя на первый взгляд (а также на второй и третий) всё выглядело правильно. Оказалось, что в такой программе коэффициенты были целыми, а не дробными, поскольку результатом деления целого числа на целое является целый остаток, даже если он помещен в переменную дробного типа. Поэтому правильный код выглядит так:
public float convertTemp (float temperature, char convertTo)
	{
		float temp;
		switch (convertTo){
		case 'C':
			float k = 5.0/9;
			temp = (temperature - 32) * k;
			System.out.println(temp + " Celsium degrees.");
		break;
		case 'F':
			float n = 9.0/5;
			temp = temperature * n + 32;
			System.out.println(temp + " Fahrenheit degrees.");
		break;
		}
		return temperature;
	}


4. This method must return a resulf of type %type%
Ошибка возникает, когда вы создаете метод, который что-то вычисляет, но забываете вернуть какое-то значение после всех вычислений.
Необходимо также отметить, что возвращать вы должны тот же тип, что указан при создании метода класса. Например, метод конвертации температур, описанный выше, должен возвращать значение типа float.

5. Type mismatch: cannot convert from String to char
Такая ошибка возникает, если метод использует переменную типа char, а вы пытаетесь присвоить ей строковое значение. Нужно запомнить, что двойные кавычки («F») — это строковое значение, а одинарные (‘C’) — значение типа char.

Вот вроде бы и все самые основные ошибки, возникающие у новичков при программировании на Java. Буду рад, если кому-то это поможет.
По материалам Хабрахабр.



загрузка...

Комментарии:

Наверх