Имена (names) используются в программе для доступа к объявленным (declared) ранее "объектам", "элементам", "конструкциям" языка (все эти слова-синонимы были использованы здесь в их общем смысле, а не как термины ООП). Конкретнее, в Java имеются имена:
* пакеты;* классы;* интерфейсы;* элементы (member) ссылочных типов:* поля;* методы;* внутренние классы и интерфейсы;* аргументы:* методов;* конструкторов;* обработчиков ошибок;* локальные переменные.
Простые и составные имена. Элементы
Имена бывают простыми (simple), состоящими из одного идентификатора (они определяются во время объявления) и составными (qualified), состоящими из последовательности идентификаторов, разделенных точкой.
У пакетов и ссылочных типов (классов, интерфейсов, массивов) есть элементы (members). Доступ к элементам осуществляется с помощью выражения, состоящего из имен, например, пакета и класса, разделенных точкой.
Далее классы и интерфейсы будут называться объединяющим термином тип (type).
Элементами пакета являются содержащиеся в нем классы и интерфейсы, а также вложенные пакеты. Чтобы получить составное имя пакета, необходимо к полному имени пакета, в котором он располагается, добавить точку, а затем его собственное простое имя. Например, составное имя основного пакета языка Java – java.lang (то есть простое имя этого пакета lang, и он находится в объемлющем пакете java). Внутри него есть вложенный пакет, предназначенный для типов технологии reflection, которая упоминалась в предыдущих главах. Простое название пакета reflect, а значит, составное – java.lang.reflect.
Простое имя классов и интерфейсов дается при объявлении, например, Object, String, Point. Чтобы получить составное имя таких типов, надо к составному имени пакета, в котором находится тип, через точку добавить простое имя типа. Например, java.lang.Object, java.lang.reflect.Method или com.myfirm.MainClass. Смысл последнего выражения таков: сначала идет обращение к пакету com, затем к его элементу – вложенному пакету myfirm , а затем к элементу пакета myfirm – классу MainClass. Здесь com.myfirm – составное имя пакета, где лежит класс MainClass, а MainClass — простое имя. Составляем их и разделяем точкой – получается полное имя класса com.myfirm.MainClass.
Для ссылочных типов элементами являются поля и методы, а также внутренние типы (классы и интерфейсы). Элементы могут быть, как непосредственно объявлены в классе, так и получены по наследству от родительских классов и интерфейсов, если таковые имеются. Простое имя элементов также дается при инициализации. Например, toString(), PI, InnerClass. Составное имя получается путем объединения простого или составного имени типа, или переменной объектного типа с именем элемента. Например, ref.toString(), java.lang.Math.PI, OuterClass.InnerClass.Имена и идентификаторы
Теперь, когда мы рассмотрели простые и составные имена, уточним разницу между идентификатором (напомним, что это вид лексемы) и именем.
Понятно, что простое имя состоит из одного идентификатора, а составное - из нескольких. Однако не всякий идентификатор входит в состав имени.
Во-первых, в выражении объявления (declaration) идентификатор еще не является именем. Другими словами, он становится именем после первого появления в коде в месте объявления.
Во-вторых, существует возможность обращаться к полям и методам объектного типа не через имя типа или объектной переменной, а через ссылку на объект, полученную в результате выполнения выражения. Пример такого вызова:
country.getCity().getStreet();
В данном примере getStreet является не именем, а идентификатором, так как соответствующий метод вызывается у объекта, полученного в результате вызова метода getCity(). Причем country.getCity как раз является составным именем метода.
Наконец, идентификаторы также используются для названий меток (label). Пример:
num:for (int num = 2; num 0) {
mp.setMyX(mp.getMyX() - 5);
}
break;
case KeyEvent.VK_DOWN:
if (mp.getMyY() < 500 - 1.8*mp.getMySize()) {
mp.setMyY(mp.getMyY() + 5);
}
break;
case KeyEvent.VK_UP:
if (mp.getMyY() > 0) {
mp.setMyY(mp.getMyY() - 5);
}
break;
default:
throw new AssertionError();
}
mp.repaint();
}
рис. 4
Листинг Листинг Maria.javapackage maria;
public class Maria {
public static void main(String[] args) {
NewJFrame frame = new NewJFrame();
frame.setVisible(true);
}
}
Листинг NewJFrame.javapackage maria;
import java.awt.Color;
import java.awt.event.KeyEvent;
public class NewJFrame extends javax.swing.JFrame {
MyPanel mp = new MyPanel();
public NewJFrame() {
super("Ланщикова М.П. Вартант №4");
initComponents();
setLocationRelativeTo(null);
mp.setBackground(Color.DARK_GRAY);
mp.setSize(500, 500);
mp.setLocation(0, 0);
add(mp);
}
@SuppressWarnings("unchecked")
//
private void initComponents() {
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setPreferredSize(new java.awt.Dimension(500, 500));
setResizable(false);
addKeyListener(new java.awt.event.KeyAdapter() {
public void keyPressed(java.awt.event.KeyEvent evt) {
formKeyPressed(evt);
}
});
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 400, Short.MAX_VALUE)
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 300, Short.MAX_VALUE)
pack();
}//
private void formKeyPressed(java.awt.event.KeyEvent evt) {
switch (evt.getKeyCode()) {
case KeyEvent.VK_RIGHT:
if (mp.getMyX() < 500 - 1.55*mp.getMySize()) {
mp.setMyX(mp.getMyX() + 5);
}
break;
case KeyEvent.VK_LEFT:
if (mp.getMyX() > 0) {
mp.setMyX(mp.getMyX() - 5);
}
break;
case KeyEvent.VK_DOWN:
if (mp.getMyY() < 500 - 1.8*mp.getMySize()) {
mp.setMyY(mp.getMyY() + 5);
}
break;
case KeyEvent.VK_UP:
if (mp.getMyY() > 0) {
mp.setMyY(mp.getMyY() - 5);
}
break;
default:
throw new AssertionError();
}
mp.repaint();
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new NewJFrame().setVisible(true);
}
});
}
}
break; case KeyEvent.VK_LEFT: if (mp.getMyX() > 0) { mp.setMyX(mp.getMyX() - 5); } break; case KeyEvent.VK_DOWN: if (mp.getMyY() < 500 - 2*mp.getMySize()) { mp.setMyY(mp.getMyY() + 5); } break; case KeyEvent.VK_UP: if (mp.getMyY() > 0) { mp.setMyY(mp.getMyY() - 5); } break; default: throw new AssertionError(); } mp.repaint();}
public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new NewJFrame().setVisible(true); } });}
Листинг MyPanel.javapackage maria;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Panel;
public class MyPanel extends Panel{
private int MyX = 100;
private int MyY = 100;
private int MySize = 100;
public MyPanel() {
}
@Override
public void paint(Graphics g) {
g.setColor(Color.BLUE);
g.fillRect(MyX, MyY, MySize*3/2, MySize/2);
g.fillRect(MyX, MyY, MySize/2, MySize);
g.setColor(Color.RED);
g.fillOval(MyX, MyY+MySize/2, MySize, MySize);
}
public int getMyX() {
return MyX;
}
public void setMyX(int MyX) {
this.MyX = MyX;
}
public int getMyY() {
return MyY;
}
public void setMyY(int MyY) {
this.MyY = MyY;
}
public int getMySize() {
return MySize;
}
public void setMySize(int MySize) {
this.MySize = MySize;
}
}
Список используемых источниковПрограммирование на Java: Информация/ Н. Вязовик - М.: Национальный Открытый Университет "ИНТУИТ".
Программирование на Java/Патрик Нимейер, Дэниэл Леук [пер. с англ. Райтмана М.А.]. – Москва: Эксмо, 2014. – 1216 с.
Герман О.В., Герман Ю.О. Программирование на Java и C# для студентов – СПб.: БХВ-Петербург, 2005. – 512с.: ил.
Гаврилов А.В., Клименков С.В., Цопа Е.А. Программирование на Java. Конспект лекций – СПб: СПбГУ ИТМО, 2010. – 130 с.