public static void main(String[] args)

advertisement
Работа с классами
Объявление
class Name {
// заголовок класса
// блок переменных
int i;
// блок методов
Name(int i) {…}
void doSomeThing() {…}
}
Объявление
class Name {…}
public class Name {…}
protected class Name {…}
private class Name {…}
Default
Доступ к таким переменным и методам
возможен из любого места пакета (package).
Но они недоступны извне.
package test;
class Test{
int I;
Test(int i){
This.i = I;
}
}
package another;
import Test.*;
class Another{
public static void main(String[] args) {
Test a = new Test(3);
}
}
//The type Test.Test is not visible
Public
Доступны из любого места программы.
package test;
class Test{
int i;
Test(int i){
this.i = I;
}
}
package another;
import test.*;
class Another{
public static void main(String[] args) {
Test a = new Test(3);
}
}
Protected
Доступ к таким переменным и методам
доступен только из объектов данного класса
и его потомков.
class Test{
protected int i;
Another(int i){
this.i = I;
}
}
class Another extends Test {
public static void main(String[] args) {
Another a = new Another(3);
a.i = 1;
}
}
Private
Доступ к таким данным доступен только в объектах
данного класса и из классов, непосредственно в теле
которых он содержится.
class Test{
class Another{
private int i=0;
}
public static void main(String[] args) {
Test t = new Test();
Another a = t.new Another();
int testInt = a.i;
}
}
Конструктор класса
Вызывается при создании объекта данного класса.
class Name {
int n;
String name;
Name(int i) {
n = 1;
}
Name(int i, String s) {
this(int i);
name = s;
}
}
Конструктор класса
Выражение super может стоять только на первой строке
конструктора. Часто можно увидеть конструкторы вообще без такого
выражения. В этом случае компилятор первой строкой по умолчанию
добавляет вызов родительского конструктора без параметров (super()).
Если у родительского класса такого конструктора нет, выражение super
обязательно должно быть записано явно (и именно на первой строке),
поскольку необходима передача входных параметров.
class MyClass extends OtherClass{
String name;
MyClass(String s){
super();
name = s;
}
}
Конструктор класса
Если в родительском классе объявлено пять разных
полезных конструкторов и требуется, чтобы класснаследник имел аналогичный набор, необходимо все их
описать заново.
Класс обязательно должен иметь конструктор, иначе
невозможно порождать объекты ни от него, ни от его
наследников. Поэтому если в классе не объявлен ни один
конструктор, компилятор добавляет один по умолчанию.
Это public-конструктор без параметров и с телом,
описанным парой пустых фигурных скобок. Из этого
следует, что такое возможно только для классов, у
родителей которых объявлен конструктор без параметров,
иначе возникнет ошибка компиляции.
Инициализаторы
class Test {
private int x, y, z;
// инициализатор объекта
{
x=3;
if (x>0) y=4;
z=Math.max(x, y);
}
}
Инициализаторы
Инициализаторы не имеют имен, исполняются при создании
объектов, не могут быть вызваны явно, не передаются по наследству
(хотя, конечно, инициализаторы в родительском классе продолжают
исполняться при создании объекта класса-наследника).
При создании экземпляра класса вызванный конструктор
выполняется следующим образом:
• Если первой строкой идет обращение к конструктору родительского
класса (явное или добавленное компилятором по умолчанию), то этот
конструктор исполняется;
• В случае успешного исполнения вызываются все инициализаторы
полей и объекта в том порядке, в каком они объявлены в теле класса;
• Если первой строкой идет обращение к другому конструктору этого же
класса, то он вызывается. Повторное выполнение инициализаторов не
производится.
Метод main()
public static void main(String[] args) {…}
При запуске программы первым делом
вызывается именно этот метод.
args – массив строк, содержащий параметры
запуска программы. Вызов «java test.class -s -b»
запустит программу с args={‘-s’, ‘-b’}.
Перегруженные методы
Перегруженными называются методы,
имеющие одинаковое имя, но принимающие
разные аргументы или возвращающие
разные типы.
int calculate(int a, int b) {}
float calculate(int a, int b) {}
double calculate(int a, int b, float c) {}
boolean calculate(int a, int b) {}
Сеттер и геттер
Эти методы устанавливают и возвращают
значения инкапсулированных переменных.
public void setWidth(int width){
this.width = width;
}
public int getWidth(){
return width;
}
Download