Справочник от Автор24
Поделись лекцией за скидку на Автор24

Консольное приложение на языке java. Запись классов и объектов на java

  • 👀 354 просмотра
  • 📌 287 загрузок
Выбери формат для чтения
Загружаем конспект в формате doc
Это займет всего пару минут! А пока ты можешь прочитать работу в формате Word 👇
Конспект лекции по дисциплине «Консольное приложение на языке java. Запись классов и объектов на java» doc
Консольное приложение на языке java. Запись классов и объектов на java 1) Указатели. Динамические объекты на С++ Пример указателя на Си int main(int argc, char* argv[]) { int m; int *k; // указатель на int k=(int *)calloc(1,sizeof(int)); // выделение памяти для k *k=2; // переход от указателя к переменной и присваивание m=*k; // присваивание значения обычной переменной free(k); // освобождение памяти } k=(int *)calloc(1,sizeof(int)); Выделение памяти для указателя. Указатель – адрес, в 32 системе 4 байта, в 64-разрядной – 8 байт. (int *) -преобразование указателя void в int. Между указателями char, int, double и т.д. существуют ряд различий, поэтому в C++ принято преобразование, хотя никакие данные не меняются char *c; int x,y,z; c=(char *)calloc(1,sizeof(char)); x=(int)c; // перевод указателя в целое число c=c+1; // увеличение на 1 y=(int)c; z=y-x; // z=1 double *c1; int x,y,z; c1=(double *)calloc(1,sizeof(char)); x=(double)c1; // перевод указателя в целое число c1=c1+1; // увеличение на 1 y=(int)c1; z=y-x; // z=8 !! c1=c1+1 увеличение адреса на размер переменной, на которую и указывает c1 Для объектов указатели такие же, но вместо calloc и free используются new и delete class Record { public: void Init(int m,int s); private: int min; int sec; }; void Record::Init(int m,int s) { min=m; sec=s; } int main(int argc, char* argv[]) { Record *a; // объект - указатель на класс Record динамический объект a= new Record; // вместо calloc (*a).Init(6,7); // аналогично обычным переменным delete a; // вместо free } Для доступа к полям через указатель можно использовать операцию -> вместо точки int main(int argc, char* argv[]) { Record *a; // объект - указатель на класс Record a= new Record; // вместо calloc a->Init(6,7); // вместо (*a).Init(6,7); delete a; // вместо free } Аналогично переменным можно через указатели создавать динамические массивы объектов int main(int argc, char* argv[]) { Record *a; // объект - указатель на класс Record int i; a= new Record[5]; // массив из 5 объектов for (i=0;i<5;i++) { a[i].Init(6,i); // a[0].min=a[1].min=...=a[4].min=6 a[0].sec=0 a[1].sec=1 a[2].sec=2... } delete[] a; // для освобождения памяти массива delete[] } Массив результатов у спортсмена (Пример 1). class Sportsman { public: char* GetFam(); // возвращает строку-фамилию ....... void InitRez(int *m,int *s); // задание значений min,sec всемрезультатам int Sumrez(); private: char Fam[30]; // фамилия Record Rezults[5]; // массив результатов }; ....... void Sportsman::InitRez( int *m,int *s) { int i; for(i=0;i<5;i++) { Results[i].Init(m[i],s[i]); // всем результатам } } int Sportsman::Sumrez() { int i,s; s=0; for(i=0;i<5;i++) s+=Results[i].Numbersec(); return s; } int _tmain(int argc, _TCHAR* argv[]) { int m[5]={3,6,8.2,4}; int s[5]={15,20,25,16,10}; b.InitRez(m,s); k=b.Sumrez(); ..... } 2) Принцип работы на языке Java Принцип работы на языке Java – это компиляция в промежуточный язык с последующей интерпретацией Выполнение программы в данной операционной системе: Программа на исходном языке компилятор выполняемая программа (Паскаль, Си, C++… )  машинные коды (myprog.exe) Программа myprog.exe в другой ОС не запустится. Принцип работы Java: Исходная программа на Java (myprog.java) компилятор javac.exe выполняемая программа коды java 1 байт (вкл. классы, аналогичные компонентам свой для каждой ОС  myprog.class C++ Visual Studio) Программа одинаковая для любой ОС ! одинаковая Для всех ОС ! Выполнение java программы: myprog.class JVM (java virtual machine)  выполнение java.exe – своя для каждой ОС программы интерпретатор байт-кодов java Чтобы программа myprog.class (байт-коды) запустилась на некотором устройстве нужно только чтобы на устройстве была программа JVM (виртуальная машина java) (или вшита в телефон) Варианты java: java 2 SE (standart edition) – для PC + java 2 ME (micro edition) – для мобильных устройств - java 2 EE (enterprise edition) – корпоративные и серверные разработки - требуемые системы для разработки программ: jdk-8-windows-x64.exe - для windows java и все классы SE eclipse – удобная среда с редактором и отладчиком. (запускается без установки) netbeans - альтернативная среда с возможностью визуальных построений форм О Microsoft: Visual J++ , аналогичен Visual C++, программа пишется на языке java, но компилируется в exe-файл. Нет JVM!!! exe запускается только под windows. Есть и J++ Builder , аналогично C++ Builder фирмы Borland, но с JVM 3) Приложение без классов на java Выражения, операторы и управляющие структуры (if,while,for) совпадают с Си ! Математические функции java как на Си (примеры): abs(x),asin(x), sin(x), cos(x), exp(x),log(x),random(x) случ. на [0,1] , round(x), pow(x,y) Пример программы на java // программа 1 import java.lang.Math.*; // вместо (include math.h) public class lab2 { public static void main (String args[] ) { int x; double y; x=2; y=x*x+3; y=y/Math.sin(Math.PI/2); // sin метод класса Math, PI=3.14.. есть в Math System.out.printf("x= %d y= %f", x,y); // библиотека (пакет) system подцеплен } } Основной класс (с функцией main) должен располагаться в файле с таким же именем ! Программу можно набрать в блокноте notepad и сохранить в файл lab2.java Для компиляции и запуска удобно использовать bat-файлы в той же папке, где lab2.java. Compile.bat set path=c:\Program Files\Java\jdk1.8.0_51\bin\;%path% javac.exe -Xstdout diag.txt lab2.java pause 1 строка – путь к установленному пакету jdk-7-windows-x64.exe 2 строка – запуск компилятора javac.exe для компиляции lab2.java, ошибки компиляции записывать в diag.txt Если ошибок нет (diag.txt пуст) создается файл lab2.class с байт-кодами. run.bat set path=c:\Program Files\Java\jdk1.8.0_51\bin\;%path% java.exe lab2 pause 2 строка – запуск JVM – интерпретатор байт-кодов программы lab2.class Вывод на консоли после запуска: О выводе русских букв на java В java принята кодировка unicode. Обычная windows кодировка (1251) '1' – десятичное :(49) 16: (0x31) битовое: (00110001) ‘Б’ – десятичное : (190) 16: (0xC1) битовое: (11000001) 1символ – 1 байт Для многоязычных документов кодировка unicode: 1 символ – 2 байта. ‘Б’ - 0xF2 0xE2 1 байт – кодовая страница с требуемым алфавитом (например, кириллица или иврит) 2 байт код символа в данной странице. Заменим в строке System.out.printf("x= %d y= %f", x,y); y= на ответ: на консоли появится краказябра. Исправление – переключение системного вывода через библиотеку java.io. import java.io.*; // подключение библиотеки ввода-вывода на java import java.lang.Math.*; class lab2 { public static void main (String args[] ) { try { // переключение вывода консоли на кодировку unicode OutputStreamWriter os = new OutputStreamWriter (System.out,"Cp866"); // создание объекта Pr класса PrintWriter для вывода на консоль PrintWriter Pr = new PrintWriter (os, true); // начало консольной программы int x; double y; x=2; y=x*x+3; y=y/Math.sin(Math.PI/2); Pr.printf("%s %d %f","ответ: ",x,y); // объект Pr вызывает свой метод printf // конец консольной программы } catch(Exception е) { } } } В среде eclipse также возможен аналог консольного приложения: В начале работы нужно задать WorkSpace – Общую директорию для всех проектов. (Желательно во всех путях без русских букв!). Для смены – File->Switch WorkSpace File->new->Java project File->new->Class Не требуется перекодировка, система настроена на компьютер. Выводятся русские буквы О функии scanf: В отличие от printf в java нет прямого форматного ввода, аналогичного scanf(“%d”,&x). Используя библиотеку import java.util.*; можно выполнить ввод через класс Scaner, во многом похожий на stdio.h. 4) Запись на java классов и объектов и отличия от С++ public class Record { private int min; private int sec; public int Numbersec() // (1) { return min*60+sec; // (2) } public void Init(int m,int s) // (4) { min=m; sec=s; } public int GetFirst() { return min; } public int GetSecond() { return sec; } public static void main (String args[] ) { Record a = new Record(); // (3); int k; a.Init(2, 4); k=a.Numbersec(); System.out.printf("ответ %d", k); } } вывод на консоли: ответ 124 отличия от С++ (1) - public, private указывается для каждого поля и метода (2) – тело метода (функции) сразу за заголовком. В C++ такие функции называются inline-методы (3) – необходима инициализация объекта new – конструктор, в C++ используется для динамических объектов (4) – public можно заменить на private: private void Init(int m,int s), т.к. main принадлежит классу main – метод класса Record и может вызвать private метод Init. 5) Запись нескольких классов класс Record вспомогательный, Sportsman основной, в Sportsman есть два поля объектов вспомогательного класса, т.е. два результата. Кроме этого, в классе Sportsman есть поле straf , число штрафных минут (как, например, в биатлоне). Добавлен метод вычисления общего числа секунд за два результата с учетом штрафа. class Record { private int min,sec; public void Init(int m,int s) { min=m; sec=s; } public int Numbersec() { return min*60+sec; } public int GetFirst() { return min; } public int GetSecond() { return sec; } } public class Sportsman (1) { private int Straf; // дополнительное поле private Record r1 = new Record(); // поле типа Record private Record r2 = new Record(); // поле типа Record public void Init(int v,int m1,int s1,int m2,int s2) { Straf=v; r1.Init(m1, s1); // инициализация первого результата r2.Init(m2, s2); // инициализация второго результата } public int Sum() // общее число секунд { int k; k=r1.Numbersec(); // секунды первого k=k+r2.Numbersec(); // плюс секунды второго k=k+Straf*60; // штраф return k; } public static void main (String args[] ) { Sportsman a=new Sportsman(); int k,m; a.Init(1,2,6,1,55); k=a.r1.Numbersec(); m=a.Sum(); System.out.printf("ответ %d %d",k,m); } } (1) – в файле должен быть один класс public, имя которого совпадает с именем файла. sportsman.java Вывод: 126 301 5) Массивы встроенных типов на java и массивы объектов ....................... public static void main (String args[] ) { int i; // обычная переменная Record a=new Record(); // один объект ссылка с инициализацией a.Init(3, 40); // вызов метода int c[] = new int[5]; // инициализация обычного массива int. int c[5]; нельзя! Record b[]= new Record[5]; // массив ссылок, но ссылки null for(i=0;i<5;i++) { b[i]= new Record(); // каждый элемент массива – ссылка на Record !! } for(i=0;i<5;i++) { b[i].Init(i, 10); // вызов метода поэлементно } for(i=0;i<5;i++) { c[i]=b[i].Getmin(); // поэлементная запись в массив c } for(i=0;i<5;i++) { System.out.printf("%d ",c[i]); } System.out.printf("\n"); } } вывод на консоли: 0 1 2 3 4 Можно использовать переменные, которым задано значение. int k=10; double []x=new double [k]; Пример двумерного массива. double [][] a; a=new double [4][3]; for(i=0;i<4;i++) for(j=0;j<3;j++) a[i][j]=0.0; В многомерном массиве достаточно указывать только левую границу. int[][] m=new int [5][]; n=m.length; for(i=0;i
«Консольное приложение на языке java. Запись классов и объектов на java» 👇
Готовые курсовые работы и рефераты
Купить от 250 ₽
Решение задач от ИИ за 2 минуты
Решить задачу
Помощь с рефератом от нейросети
Написать ИИ

Тебе могут подойти лекции

Смотреть все 588 лекций
Все самое важное и интересное в Telegram

Все сервисы Справочника в твоем телефоне! Просто напиши Боту, что ты ищешь и он быстро найдет нужную статью, лекцию или пособие для тебя!

Перейти в Telegram Bot