Литералы

Class methods

Sr.No. Method & Description
1 static int bitCount(long i)

This method returns the number of one-bits in the two’s complement binary representation of the specified long value.


2 byte byteValue()

This method returns the value of this Long as a byte.

3 int compareTo(Long anotherLong)

This method compares two Long objects numerically.

4 static Long decode(String nm)

This method decodes a String into a Long.

5 double doubleValue()

This method returns the value of this Long as a double.

6 boolean equals(Object obj)

This method compares this object to the specified object.

7 float floatValue()

This method returns the value of this Long as a float.

8 static Long getLong(String nm)

This method determines the long value of the system property with the specified name.

9 static Long getLong(String nm, long val)

This method determines the long value of the system property with the specified name.

10 static Long getLong(String nm, Long val)

This method returns the long value of the system property with the specified name.

11 int hashCode()

This method returns a hash code for this Long.

12 static long highestOneBit(long i)

This method returns a long value with at most a single one-bit, in the position of the highest-order («leftmost») one-bit in the specified long value.

13 int intValue()

This method returns the value of this Long as an int.

14 long longValue()

This method returns the value of this Long as a long value.

15 static long lowestOneBit(long i)

This method returns a long value with at most a single one-bit, in the position of the lowest-order («rightmost») one-bit in the specified long value.

16 static int numberOfLeadingZeros(long i)

This method returns the number of zero bits preceding the highest-order («leftmost») one-bit in the two’s complement binary representation of the specified long value.

17 static int numberOfTrailingZeros(long i)

This method returns the number of zero bits following the lowest-order («rightmost») one-bit in the two’s complement binary representation of the specified long value.

18 static long parseLong(String s)

This method parses the string argument as a signed decimal long.

19 static long parseLong(String s, int radix)

This method parses the string argument as a signed long in the radix specified by the second argument.

20 static long reverse(long i)

This method returns the value obtained by reversing the order of the bits in the two’s complement binary representation of the specified long value.

21 static long reverseBytes(long i)

This method returns the value obtained by reversing the order of the bytes in the two’s complement representation of the specified long value.

22 static long rotateLeft(long i, int distance)

This method returns the value obtained by rotating the two’s complement binary representation of the specified long value left by the specified number of bits.

23 static long rotateRight(long i, int distance)

This method returns the value obtained by rotating the two’s complement binary representation of the specified long value right by the specified number of bits.

24 short shortValue()

This method returns the value of this Long as a short.

25 static int signum(long i)

This method returns the signum function of the specified long value.

26 static String toBinaryString(long i)

This method returns a string representation of the long argument as an unsigned integer in base 2.

27 static String toHexString(long i)

This method returns a string representation of the long argument as an unsigned integer in base 16.

28 static String toOctalString(long i)

This method returns a string representation of the long argument as an unsigned integer in base 8.

29 String toString()

This method returns a String object representing this Long’s value.

30 static String toString(long i)

This method returns a String object representing the specified long.

31 static String toString(long i, int radix)

This method returns a string representation of the first argument in the radix specified by the second argument.

32 static Long valueOf(long l)

This method returns a Long instance representing the specified long value.

33 static Long valueOf(String s)

This method returns a Long object holding the value of the specified String.

34 static Long valueOf(String s, int radix)

This method returns a Long object holding the value extracted from the specified String when parsed with the radix given by the second argument.

Массивы


Массив — это объект-контейнер, хранящий фиксированное количество элементов одинакового типа. Длина массива фиксируется после создания и не меняется во всём времени существования этого массива.

Нумерация элементов массива начинается с нуля. Первый элемент имеет индекс 0, второй — 1 и так далее. Последний элемент имеет индекс на единицу меньший длины массива.

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

Пример:

Java

int[] arrayOfInt; int arrayOfInt2[]; long[] arrayOfLong; String[] arrayOfString; double[] arrayOfDouble;

1 2 3 4 5

intarrayOfInt;

intarrayOfInt2;

longarrayOfLong;

StringarrayOfString;

doublearrayOfDouble;

Для инициализации массива используется оператор new  и имя типа данных с указанием размерности в квадратных скобках:

Java

int a[] = new int; // массив из 10 элементов типа int. double[] arrayOfDouble = new double; // массив из 12 элементов типа double.

1 2

inta=newint10;// массив из 10 элементов типа int.

doublearrayOfDouble=newdouble12;// массив из 12 элементов типа double.

После инициализации можно присваивать значения элементам массива. Доступ к элементам происходит по индексу, указанному в квадратных скобках после имени переменной:

Java

a = 12; a = 14; arrayOfDouble = 3.3; System.out.println(«The second element of a: » + a); // 12

1 2 3 4

a1=12;

a3=14;

arrayOfDouble2=3.3;

System.out.println(«The second element of a: «+a1);// 12

Для первоначальной инициализации массива можно использовать вот такую конструкцию:

// Инициализируем массив длиной 4 с элементами 10, 3, -4 и 67. int[] myArray = {10, 3, -4, 67};

// или так // Инициализируем массив длиной 4 с элементами 10, 3, -4 и 67. int[] myArray = new int[] {10, 3, -4, 67};

1 2 3 4 5 6

// Инициализируем массив длиной 4 с элементами 10, 3, -4 и 67.

intmyArray={10,3,-4,67};

  // или так // Инициализируем массив длиной 4 с элементами 10, 3, -4 и 67.

intmyArray=newint{10,3,-4,67};

Общий пример работы с массивами:

MainTest.java

Java

public class MainTest { public static void main(String[] args) { int[] myArray = {10, 3, -4, 67}; double [] arrayOfDouble = new double; myArray = 12; arrayOfDouble = 3.4; System.out.println(«The first element of myArray is » + myArray); // 12 System.out.println(«The second element of myArray is » + myArray); // 3 System.out.println(«The third element of arrayOfDouble is » + arrayOfDouble); // 3.4 } }

1 2 3 4 5 6 7 8 9 10 11 12 13 14

publicclassMainTest{

publicstaticvoidmain(Stringargs){

intmyArray={10,3,-4,67};

doublearrayOfDouble=newdouble3;

myArray=12;

arrayOfDouble2=3.4;

System.out.println(«The first element of myArray is «

+myArray);// 12

System.out.println(«The second element of myArray is «

+myArray1);// 3

System.out.println(«The third element of arrayOfDouble is «

+arrayOfDouble2);// 3.4

}

}

Класс java.util.Arrays  содержит множество полезных методов для работы с массивами: копирование, поиск, заполнение, сортировка. Имеет смысл ознакомиться с этими методами. Также может быть полезен метод staticvoidjava.lang.System.arraycopy(Objectsrc,intsrcPos,Objectdest,intdestPos,intlength) , который позволяет копировать элементы одного массива в другой. Я не буду здесь подробно расписывать эти методы. Здесь я хотел дать только общее представление о массивах. Кому интересно может посмотреть официальную документацию на java.util.Arrays и на сайте Oracle. А я, возможно, когда-нибудь тоже опишу основные методы из java.util.Arrays, но не в этой статье.

Цикл статей «Учебник Java 8».

Следующая статья — «Java 8 операции». Предыдущая статья — «Введение в Java 8».

Class methods

Sr.No. Method & Description
1 byte byteValue()

This method returns the value of this Float as a byte (by casting to a byte).

2 static int compare(float f1, float f2)

This method compares the two specified float values.

3 int compareTo(Float anotherFloat)

This method compares two Float objects numerically.

4 double doubleValue()

This method returns the double value of this Float object.

5 boolean equals(Object obj)

This method compares this object against the specified object.

6 static int floatToIntBits(float value)

This method returns a representation of the specified floating-point value according to the IEEE 754 floating-point «single format» bit layout.

7 static int floatToRawIntBits(float value)

This method returns a representation of the specified floating-point value according to the IEEE 754 floating-point «single format» bit layout, preserving Not-a-Number (NaN) values.

8 float floatValue()

This method returns the float value of this Float object.

9 int hashCode()

This method returns a hash code for this Float object.

10 static float intBitsToFloat(int bits)

This method returns the float value corresponding to a given bit representation.

11 int intValue()

This method returns the value of this Float as an int (by casting to type int).

12 boolean isInfinite()

This method returns true if this Float value is infinitely large in magnitude, false otherwise.

13 static boolean isInfinite(float v)

This method returns true if the specified number is infinitely large in magnitude, false otherwise.

14 boolean isNaN()

This method returns true if this Float value is a Not-a-Number (NaN), false otherwise.

15 static boolean isNaN(float v)

This method returns true if the specified number is a Not-a-Number (NaN) value, false otherwise.

16 long longValue()

This method returns value of this Float as a long (by casting to type long).

17 static float parseFloat(String s)

This method returns a new float initialized to the value represented by the specified String, as performed by the valueOf method of class Float.

18 short shortValue()

This method returns the value of this Float as a short (by casting to a short).

19 static String toHexString(float f)

This method returns a hexadecimal string representation of the float argument.

20 String toString()

This method returns a string representation of this Float object.

21 static String toString(float f)

This method returns a string representation of the float argument

22 static Float valueOf(float f)

This method returns a Float instance representing the specified float value.

23 static Float valueOf(String s)

This method returns a Float object holding the float value represented by the argument string s.

Иерархия наследования и преобразование типов

Последнее обновление: 21.04.2018

В прошлой главе говорилось о преобразованиях объектов простых типов. Однако с объектами классов все происходит немного по-другому. Допустим, у нас есть следующая иерархия классов:

public class Program{
     
	public static void main(String[] args) {
			
		Person tom = new Person("Tom");
		tom.display();
		Person sam = new Employee("Sam", "Oracle");
		sam.display();
		Person bob = new Client("Bob", "DeutscheBank", 3000);
		bob.display();
	}
}
// класс человека
class Person {
    
    private String name;
	
    public String getName() { return name; }
   
    public Person(String name){
    
        this.name=name;
    }
 
    public void display(){
		
		System.out.printf("Person %s \n", name);
	}
}
// служащий некоторой компании 
class Employee extends Person{

    private String company;
	
    public Employee(String name, String company) {
    
        super(name);
        this.company = company;
    }
	public String getCompany(){ return company; }
	
    public void display(){
        
        System.out.printf("Employee %s works in %s \n", super.getName(), company);
    }
}
// класс клиента банка
class Client extends Person{
      
    private int sum; // Переменная для хранения суммы на счете
    private String bank;
      
    public Client(String name, String bank, int sum) {
      
        super(name);
        this.bank=bank;
        this.sum=sum;
    }
      
    public void display(){
          
        System.out.printf("Client %s has account in %s \n", super.getName(), bank);
    }
      
    public String getBank(){ return bank; }
    public int getSum(){ return sum; }
}

В этой иерархии классов можно проследить следующую цепь наследования: Object (все классы неявно наследуются от типа Object) -> Person -> Employee|Client.

Суперклассы обычно размещаются выше подклассов, поэтому на вершине наследования находится класс Object, а в самом низу Employee и Client.

Объект подкласса также представляет объект суперкласса. Поэтому в программе мы можем написать следующим образом:

Object tom = new Person("Tom");
Object sam = new Employee("Sam", "Oracle");
Object kate = new Client("Kate", "DeutscheBank", 2000);
Person bob = new Client("Bob", "DeutscheBank", 3000);
Person alice = new Employee("Alice", "Google");

Это так называемое восходящее преобразование (от подкласса внизу к суперклассу вверху иерархии) или upcasting. Такое преобразование осуществляется автоматически.

Обратное не всегда верно. Например, объект Person не всегда является объектом Employee или Client. Поэтому нисходящее преобразование или downcasting от суперкласса к подклассу автоматически не выполняется. В этом случае нам надо использовать операцию преобразования типов.

Object sam = new Employee("Sam", "Oracle");
		
// нисходящее преобразование от Object к типу Employee
Employee emp = (Employee)sam;
emp.display();
System.out.println(emp.getCompany());

В данном случае переменная sam приводится к типу Employee. И затем через объект emp мы можем обратиться к функционалу объекта Employee.

Мы можем преобразовать объект Employee по всей прямой линии наследования от Object к Employee.

Примеры нисходящих перобразований:

Object kate = new Client("Kate", "DeutscheBank", 2000);
((Person)kate).display();
		
Object sam = new Employee("Sam", "Oracle");
((Employee)sam).display();

Но рассмотрим еще одну ситуацию:

Object kate = new Client("Kate", "DeutscheBank", 2000);
Employee emp = (Employee) kate;
emp.display();
		
// или так
((Employee)kate).display();

В данном случае переменная типа Object хранит ссылку на объект Client. Мы можем без ошибок привести этот объект к типам Person или Client. Но при попытке преобразования к типу Employee мы получим ошибку во время выполнения. Так как kate не представляет объект типа Employee.

Здесь мы явно видим, что переменная kate — это ссылка на объект Client, а не Employee. Однако нередко данные приходят извне, и мы можем точно не знать, какой именно объект эти данные представляют. Соответственно возникает большая вероятность столкнуться с ошибкой. И перед тем, как провести преобразование типов, мы можем проверить, а можем ли мы выполнить приведение с помощью оператора instanceof:

Object kate = new Client("Kate", "DeutscheBank", 2000);
if(kate instanceof Employee){
     
	((Employee)kate).display();
}
else{
					 
	System.out.println("Conversion is invalid");
}

Выражение проверяет, является ли переменная kate объектом типа Employee. Но так как в данном случае явно не является, то такая проверка вернет значение , и преобразование не сработает.

НазадВперед

Соглашение об именовании переменных

В языке программирования Java существуют следующие соглашения о именовании переменных:

  • Имена переменных зависят от регистра. Переменные var1 и VAR1 — это две разные переменные. Длина имени переменной не ограничена, оно может содержать любое количество букв Юникода и цифр, может начинаться с буквы, знака доллара «$» или символа подчёркивания «_». Однако согласно соглашению о кодировании в Java имена переменных всегда должны начинаться со строчной буквы английского алфавита, но не с символа «$» или «_». Также согласно соглашению знак доллара не используется совсем. Некоторые утилиты могут генерировать имена переменных с символом доллара, но вы не должны его использовать.
  • Последующие символы могут быть буквами, цифрами, знаком доллара и подчёркивания. Рекомендуется использовать полные английские слова при именовании переменных, а не сокращения.
  • Если имя переменной содержит несколько слов, то первые буквы второго и последующего слова делаются прописными, например energyUsed, moneyFoundOnStreets, abstractProxyFactorySingletonBean.
  • Нельзя использовать зарезервированные (или ключевые) слова в качестве имён переменных.
  • Если значение переменной никогда не меняется, например staticfinalintBUFFER_SIZE=1024;, то согласно соглашению нужно каждую букву делать ЗАГЛАВНОЙ, а между словами использовать символ подчёркивания «_».

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

Field

Following are the fields for java.lang.Float class −

  • static int MAX_EXPONENT − This is Maximum exponent a finite float variable may have.

  • static float MAX_VALUE − This is a constant holding the largest positive finite value of type float, (2-2-23)·2127.

  • static int MIN_EXPONENT − This is minimum exponent a normalized float variable may have.

  • static float MIN_NORMAL − This is a constant holding the smallest positive normal value of type float, 2-126.

  • static float MIN_VALUE − This is a constant holding the smallest positive nonzero value of type float, 2-149.

  • static float NaN − This is a constant holding a Not-a-Number (NaN) value of type float.

  • static float NEGATIVE_INFINITY − This is a constant holding the negative infinity of type float.

  • static float POSITIVE_INFINITY − This is a constant holding the positive infinity of type float.

  • static int SIZE − This is the number of bits used to represent a float value.

  • static Class<Float> TYPE − This is the Class instance representing the primitive type float.

Пример программы, использующей переменные в интерфейсе


Рассмотрим вышесказанное на примере. Напишем на Java интерфейс, содержащий четыре константы: число пи, ускорение свободного падения, а также минимальное и максимальное значения отрезка масс, для которых будем рассчитывать значение силы тяжести. Данный интерфейс поместим в файл IConst.java.

Java

package variablesintheinterface;

public interface IConst { double PI = 3.14; //число ПИ double g = 9.81; //ускорение свободного падения int MIN = 1; int MAX = 5; }

1 2 3 4 5 6 7 8 9

packagevariablesintheinterface;

publicinterfaceIConst{

doublePI=3.14;//число ПИ

doubleg=9.81;//ускорение свободного падения

intMIN=1;

intMAX=5;

}

Еще раз отдельно стоит сказать, что все эти четыре поля в интерфейсе неявно всегда считаются объявленными с модификаторами public, static и final.

Теперь в главном классе проекта попробуем использовать константы из интерфейса IConst. Для доступа из класса к переменным в интерфейсе необходимо, чтобы класс реализовывал соответствующий интерфейс. После имени класса нужно указать: implements IConst.

В классе с помощью переменных из интерфейса вычислим площадь круга и значения сил тяжести для значений масс в пределах от MIN до MAX включительно.

Java

package variablesintheinterface;

public class VariablesInTheInterface implements IConst {

public static void main(String[] args) { double radius = 4.5; double area = PI * radius * radius; System.out.println(«Площадь круга равна: » + area); System.out.println(); for(int m = MIN; m <= MAX; m++) System.out.println(«Сила тяжести для тела массой » + m + » кг = » + (m * g) + » Н»); } }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

packagevariablesintheinterface;

publicclassVariablesInTheInterfaceimplementsIConst{

publicstaticvoidmain(Stringargs){

doubleradius=4.5;

doublearea=PI*radius*radius;

System.out.println(«Площадь круга равна: «+area);

System.out.println();

for(intm=MIN;m<=MAX;m++)

System.out.println(«Сила тяжести для тела массой «+m+» кг = «+

(m*g)+» Н»);

}

}

Запустим программу и посмотрим на результат её работы:

Как вы видите, довольно полезно в интерфейсе иметь статические переменные-константы. Тем более когда речь идёт о крупных проектах, данный подход ни с чем не сравнится по удобству использования для доступа к константам из любого исходного файла программы.

Скачать исходник проекта, написанного в среде NetBeans и ссылка на репозиторий GitHub:

Скачать исходник Репозиторий проекта на GitHub

Спасибо за прочтение статьи!

Поделиться в соц. сетях:

Символьные литералы

Для представления символов типа char в Java используется кодировка в Unicode, определяющая полный набор международных символов на всех известных языках мира.

Символьные литералы могут быть представлены в виде символа заключенного в одинарные кавычки:

Существует также механизм для непосредственного ввода значения символа в восьмеричной или шестнадцатеричной форме. Для ввода значений в восьмеричной форме служит символ обратной косой черты, за которым следует трехзначное число. Например:

Есть возможность присвоения числового литерала символьному типу. Числовой литерал должен находиться в диапазоне от 0 до 65535. Например:

Символ обратной косой черты может быть использован для обозначения символов не имеющих точного написания, например символ перевода строки, табуляции, backspace, двойные и одинарные кавычки:

Non-Primitive Data Types

Non-primitive data types are called reference types because they refer to objects.

The main difference between primitive and non-primitive data types are:

  • Primitive types are predefined (already defined) in Java. Non-primitive types are created by the programmer and is not defined by Java (except for ).
  • Non-primitive types can be used to call methods to perform certain operations, while primitive types cannot.
  • A primitive type has always a value, while non-primitive types can be .
  • A primitive type starts with a lowercase letter, while non-primitive types starts with an uppercase letter.
  • The size of a primitive type depends on the data type, while non-primitive types have all the same size.

Examples of non-primitive types are Strings, Arrays, Classes, Interface, etc. You will learn more about these in a later chapter.

Значения по умолчанию

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

С полями классов ситуация несколько иная

Если поле класса (не важно статическое или нет) не инициализировано каким-нибудь значением, то ему будет присвоено значение по умолчанию. Значение по умолчанию — это null  или 0 соответствующего типа

Следующая таблица показывает соответствие типа данных и значения по умолчанию:

Тип данных Значение по умолчанию для полей
byte
short
int
long 0L
float 0.0f
double 0.0d
char ‘\u0000’
String (или любой объект) null
boolean false

Primitive Data Types

A primitive data type specifies the size and type of variable values, and it has no additional methods.

There are eight primitive data types in Java:

Data Type Size Description
byte 1 byte Stores whole numbers from -128 to 127
short 2 bytes Stores whole numbers from -32,768 to 32,767
int 4 bytes Stores whole numbers from -2,147,483,648 to 2,147,483,647
long 8 bytes Stores whole numbers from -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
float 4 bytes Stores fractional numbers. Sufficient for storing 6 to 7 decimal digits
double 8 bytes Stores fractional numbers. Sufficient for storing 15 decimal digits
boolean 1 bit Stores true or false values
char 2 bytes Stores a single character/letter or ASCII values

С этим читают