Базові можливості мови Java
Завантажити презентаціюПрезентація по слайдам:
Типи даних Основні категорії типів: примітивні (прості) і вказівникові. Вказівникові: масиви, класи (в тому числі – рядки), інтерфейси. Часто також називаються об’єктними типами. Прості типи (їх 8) ведуть себе подібно до своїх аналогів в інших МП. Наприклад, оголошення int a; означає, що створюється змінна типу int і під неї виділяється певний об’єм оперативної пам’яті. Змінні вказівникових типів ведуть себе аналогічно до вказівників. Спеціальне значення для пустого вказівника – null.
Характерний приклад Нехай є клас Kl і оголошення Kl ekz; Чи означає це оголошення створення екземпляру класу і виділення пам’яті під нього? Ні, створюється лише покажчик відповідного типу. Сам екземпляр створюється шляхом виклику конструктора класу: Kl ekz = new Kl(…);
Ще один приклад: безпосереднє створення списків Завдання: написати на Java програму, яка створює зв’язаний список з декількох цілих чисел, а потім переглядає його. Колекції не використовувати; обійтися низькорівневими операціями, аналогічними традиційним операціям з покажчиками.
Приклад на С++ struct Node { int N; Node* p; } ; Node* beg=0; Node* pointer; for (int i=1; i
Змінні та ідентифікатори Розрізняються великі та малі літери. В іменах - Unicode; можна використовувати не тільки латиницю. Змінні перед використанням повинні бути ініціалізовані. Особливості: для елементів масивів і полів класів (вони ініціалізуються значеннями за замовченням). Область видимості змінної - блок, але змінну, оголошену в блоці, не можна повторно оголошувати у підблоці.
Так можна… public class oblzm { public static void main (String args[]){ int i =5; { int j=2; System.out.println("Result is "+i*j); } } }
А так не можна public class oblzm { public static void main (String args[]){ int i =5; { int j=2; } System.out.println("Result is "+i*j); } }
І так теж не можна public class oblzm { public static void main (String args[]){ int i =5; { int j=2; int i=4; System.out.println("Result is "+i*j); } } }
Типовий приклад: що виведе програма? public class inittest { public static void main (String[] args) { int a=5; int b; if (a=0) b=50; System.out.println(b); } }
Цілочисельні типи byte (1 байт); short (2 байти); int (4 байти); long (8 байтів). Найбільш вживаний тип - int. Всі цілочисельні типи є знаковими. На початку 8-кових констант ставиться 0, на початку 16-кових - 0х. Довгі цілі повинні завершуватися літерою L. Оператор / є цілочисельним діленням.
Символьний тип Тип char для зберігання символів. 2 байти; код Unicode. Константи - в одинарних лапках (на відміну від рядків). Спеціальні символи, наприклад, '\n' . Або '\uкод' - символ з відповідним Unicode-кодом. Така конструкція може зустрічатися навіть в ідентифікаторах. Можна виконувати деякі операції, характерні для цілих чисел.
Приклад: програма addchars.java import java.io.*; public class addchars { public static void main(String args[]) throws Exception {char a='A'; char b= '\u0001' ; int s=b+a; System.out.println((char) s); int ch=System.in.read(); } }
Булевий тип Тип boolean. Два значення: true і false. Особливість: не можна оперувати цілими числами подібно до булевих.
Невеликий quiz: в чому різниця між (l) та (n-l) public static void main(String[] args) { boolean b; b = M1()&&M2(); // (l) System.out.println(b); System.out.println("-----------------"); b=M1()&M2(); // (n-l) System.out.println(b); } public static boolean M1() { System.out.println("M1 worked"); return false; } public static boolean M2() { System.out.println("M2 worked"); return true; }
Перетворення та приведення типів Розширююче перетворення здійснюється автоматично (напр., якщо змінній int присвоїти змінну byte). Для звужуючого перетворення - явне приведення. Тип char може бути піднятий до int. Не можна перетворювати цілий тип на булевий і навпаки. У виразах здійснюється автоматичне розширююче перетворення. Є спеціальні правила. Це може породити певні проблеми.
Розширююче перетворення: приклад проблеми byte b=50; b=b+b; - неправильно. Треба: b=(byte) (b+b);
Поняття про об’єктні оболонки Класи Integer і т.п. Інкапсулюють методи, пов’язані з простими типами. Автоупаковка/авторозпаковка (починаючи з Java 5).
Автоупаковка - приклад public static void main (String[] args) { Integer iob=100; int i =iob/20; System.out.println(iob+" "+i); }
Рядки. Клас String Всі рядки є екземплярами класу String. Рядки не можна розглядати як масиви символів! Типове створення: String S = “рядок”; (в подвійних дужках).
Конкатенація – цікаві ефекти int a=5; int b=3; String S="-output-"; System.out.println (S+a+b); System.out.println (a+b+S);
Незмінюваність рядків Рядки є незмінюваними! Можна S=… або S+=…, але це операції з вказівниками. Щоб змінювати рядок - клас StringBuilder (або більш старий клас StringBuffer).
Рядки: основні операції Для порівняння - метод equals, а не ==. Деякі найважливіші методи: length() - довжина рядка; char charAt(i) - символ у певній позиції; пошук рядка або символа: int indexOf(String S); int indexOf(char c); String substring(int Beg,int End) - виділення підрядка. Починаючи з 1.4 - регулярні вирази; синтаксис аналогічний Perl. Є спеціальний пакет, але деякі функції є в класі String. Зокрема, split – розщеплення рядка. Клас StringTokenizer з пакету java.util -розщеплення рядка.
Приклад використання StringBuilder StringBuilder S = new StringBuilder ("This is"); S.append(" a string");
Невеликий тест Яким буде результат виконання коду: public class stringtest { public static void main (String args[]) { String str1="abc"; String str2="def"; String str3=str1.concat(str2); str1.concat(str2); System.out.println(str1+str3); } } а) abc; б) abcabc; в) abcdef; г) abcabcdef; д) abcdefabcdef; e) defabc.
Використання split String s="2 5 3"; String [] sar = s.split(" "); int sum=0; for (String ss:sar) {sum+=Integer.parseInt(ss); } System.out.println("Result is "+sum);
Використання StringTokenizer: приклад StringTokenizer st=new StringTokenizer(Str," "); while (st.hasMoreTokens()) { parsedStr[Ind++]=st.nextToken(); }
Форматоване введення-виведення З Java 5 – зручні засоби введення-виведення. Клас Scanner. Функція printf. Клас Formatter.
Форматоване введення-виведення: приклад Scanner sc = new Scanner(System.in); System.out.println("What is your name?"); String s = sc.nextLine(); System.out.printf("Welcome, %s\n",s); System.out.println("How old are you?"); int q = sc.nextInt(); System.out.printf("Your %d years were lucky",q);
Масиви Також відносяться до вказівникових типів. Типове створення: int [] arr = new int[5] - створює цілочисельний масив з 5 елементів. Альтернативний синтаксис: квадратні дужки в оголошенні можна переставити. При такому створенні масиву його елементи ініціалізуються значеннями за замовченням. Для кількості елементів можна використати змінні. Нумерація починається з 0.
Масиви: продовження Масиви можна ініціалізовувати при оголошенні: масиви-літерали: int[] arr={10,20,30}; Взагалі, масив ініціалізується під час виконання програми, тому в дужках можуть бути і вирази. Анонімні масиви: new M[] {…} Багатовимірні масиви - по суті масиви масивів. Наприклад: int arr[][] = new int[5][6]; Можуть бути і “нерівні” масиви.
Параметри командного рядка Одне з типових використань масивів. Задаються як аргументи функції main (String arg[ ]).
Масиви: операції Довжина масиву - arr.length (зверніть увагу на синтаксис). Методи для копіювання масивів (метод arraycopy класу System, з Java 6 – Arrays.copyOf). В пакеті java.util є клас Arrays. Ряд корисних методів, наприклад, пошук, сортування і т.д.
Приклади надання значень для різних типів даних Приклади для простих типів, об’єктів і рядків.
Основні операції Java Набір операцій (операторів) Java схожий на набір операцій в С. Деякі характерні особливості: беззнаковий зсув >>>; оператор instanceof (зліва - назва об’єкту або масиву; справа - вказівниковий тип); рівність (==): особливості для простих типів і для вказівникових типів
Основні інструкції Три типи коментарів: //, /* та /**. Основні інструкції: умовні операції, switch, цикли - аналогічно С. Немає інструкції безумовного переходу. Але є мітки, які можна використовувати в операторах break і continue. З цим пов’язана характерна особливість: вийти можна не тільки з поточного циклу, але і з будь- якого зовнішнього. Аналогічні, хоч і не ідентичні, риси має continue.
Більш загально За допомогою break можна припинити виконання не тільки циклу, але і будь-якого складеного оператора.
Модифікований цикл for (з Java 5) Приклад: for (int i: Mas) {тіло циклу } Приклад: написати програму, яка знаходить суму елементів масиву з використанням модифікованого for.
Підрахунок суми public static void main (String args[]) { int[] nums = {1,2,3,4,5}; int S=0; for (int i:nums) S+=i; System.out.println(S); }
Передача параметрів методів Параметри методів у Java передаються за значенням. Але, якщо для параметрів примітивних типів передаються самі ці значення, то для вказівникових типів - значення вказівників на них.
Важливий приклад Процедура, яка повинна міняти місцями свої параметри: void swap (Kl a, Kl b) { Kl temp=a; a=b; b=temp; }
Приклад: продовження Не працює. Метод замінює значення копій посилань, але самі посилання в основній програмі не змінюються.
Функції зі змінною кількістю параметрів – з Java 5 (приклад) static public int va_sum (int ... v) { int S=0; for (int i:v) { S+=i; } return S; } public static void main (String[] args) { int S = va_sum(3,5,24); System.out.println(S); }
Або: з більш класичним циклом static public int va_sum (int ... v) { int S=0; for (int i=0; i
Випадкові числа Метод random класу Math – повертає дійсне число в діапазоні від 0 до 1. Клас java.util.Random.
Випадкові числа – приклад 2 int[] rin = new int[20]; Random rd = new Random(); for (int i=0; i
Схожі презентації
Категорії