В этом курсе мы рассмотрим:

  • настроить среду разработки
  • eclipse, IDE студии Android
  • программирование на Java
  • Примеры реальных приложений

Давайте сначала приступим к настройке инструментов. В этом курсе я буду использовать систему Mac. Пожалуйста, проверьте, как настроить его в других системах, таких как Windows, Linux и т. Д.

Мы будем настраивать intellij IDEA и Android Studio.

Настройка intellijIDEA и запуск в ней программы командной строки Hello World

  • Загрузите соответствующую версию сообщества для своей ОС со страницы https://www.jetbrains.com/idea/download.
  • После загрузки откройте его и выберите настройки по умолчанию.
  • Запустите intellijIDEA
  • Файл- ›Новый-› Проект- ›Java (убедитесь, что у вас есть путь к правильному SDK для вашего проекта) - Далее-› Отметьте (Создать проект из шаблона) - ›Назовите свой проект как« helloWorld »-› Выберите подходящее расположение проекта- ›Базовый пакет (com.‹ ваше имя ›.helloworld-› finish

Вставьте приведенный ниже код в основной и запустите.

System.out.println("Hello World - Java");

Результат должен выглядеть так:

Поздравляем с запуском вашей первой Java-программы.

Google взял исходный код intellijIDEA и построил на его основе студию Android. Давайте это тоже настроим.

Настройка студии Android и создание первого приложения (версия 3.1.2)

  • Загрузите студию Android с https://developer.android.com/studio/
  • Запустить его. После этого отобразится всплывающее окно с описанием импорта настроек Studio из, выберите «Не импортировать настройки».
  • На данный момент выберите значение по умолчанию. Мы узнаем больше о том, как настроить SDK и AVD (Android Virtual Device) менеджер.
  • После этого нажмите Начать новый проект Android Studio.
  • Задайте название приложения как «Тест»
  • Нажмите "Далее
  • Нажмите Пустое действие
  • Нажмите "Далее
  • Нажмите Готово

Перейдите в диспетчер SDK- ›Платформы SDK-› Выберите от Android 3.0 до Android 8.1 (на данный момент) (все) и примените их

В инструментах SDK убедитесь, что отмечены сервисы Google Play.

Применяйте их. Щелкните ОК.

Как только это будет сделано, нажмите на диспетчер AVD (Android Virtual Device), чтобы создать собственный эмулятор - ›Создать виртуальное устройство-› Выберите Nexus 6- ›Дайте ему соответствующее имя-› Выберите одно из рекомендуемых образов- ›Готово

Теперь запустите приложение для Android, нажав «Выполнить» (или) нажмите Ctrl + R, а затем эмулятор, который вы создали ранее.

Результат должен выглядеть примерно так:

Поздравляем, вы создали первое приложение для Android и запустили его на эмуляторе :)

Прежде чем мы двинемся дальше, они считают, что важно понять термины SDK, JDK, JRE, JVM и то, как происходит поток при запуске Java-программы. Пожалуйста, пройдите по этой ссылке https://www.geeksforgeeks.org/differences-jdk-jre-jvm/, чтобы понять это абстрактно.

В последней части мы обсудили-

  • настройка intellijIDEA и Android Studio
  • запуск базовой Java-программы в студии Android
  • запуск базового приложения для Android в Android Studio
  • Менеджер SDK, менеджер AVD

В этой главе мы обсудим язык Java

Java - это своего рода язык высокого уровня, что означает, что вам не нужно много знать о тонкостях машинного уровня, и вы можете писать на английском языке (простой для понимания синтаксис) для написания своей программы.

Прежде чем мы пойдем дальше, было бы неплохо обсудить процесс компиляции в java-

  • Рассмотрим helloworld.java
  • Когда мы нажимали кнопку запуска, он компилировал код (искал любые синтаксические ошибки, ошибки компиляции и т. Д.). и выплюнуть байт-код (код низкого уровня) * .class файл.
  • Этот байт-код можно поместить на любое устройство с JVM, и он может выполнять инструкции во время выполнения.

Комментарии

Комментарии - это текст в программе, который не интерпретируется.

// Однострочный комментарий

/*

I am a

Многострочный комментарий

*/

Переменные

Небольшие ведра, содержащие что-то определенного типа

String myName = "Anuj";

myName - это корзина, которая может хранить значение типа String. И сейчас в нем хранится «Анудж».

Типы переменных

  • Нить
  • int, byte, short
  • поплавок, двойной
  • символ
  • логический

Подробнее в программе ниже.

// type - String
   String myName = "Anuj Kumar";
   // A single line comment. Anything written after // is not to be interpreted by the compiler
/*
   Anything here won't be interpreted
   I will not get interpreted
 */
// type - int
int myAge = 23;
System.out.println("Hi I am " + myName + " and I am " + myAge + " years old."); // + can be used to concatenate things in java
// Output - Hi I am Anuj Kumar and I am 23 years old.
// type - byte. small bucket type in int
byte b = 123;
System.out.println("Byte: " + b);
// type - short. 2x of byte
short s = 123;
System.out.println("Short: " + s);
// type - float 1.34f, 3.14f, ...
float f = 3.14f;
System.out.println("Float: " + f);
// type - double
double d = 3.14;
System.out.println("Double: " + d);
// type - char == character ($, &, a, b..)
char c = 'a';
System.out.println("Character: " + c);
// type - boolean true or false, 1 or 0
boolean bl = false;
System.out.println("Boolean: " + bl);
// Output -
/*
   Byte: 123
   Short: 123
   Float: 3.14
   Double: 3.14
   Character: a
 */

Основные операции

  • Добавление
  • Вычитание
  • Умножение
  • Разделение
  • Остаток
// Basic Operations
// Addition -> +
int firstNum = 34;
int secondNum = 3;
System.out.println("The sum is " + (firstNum + secondNum));
// subtraction -> -
System.out.println("The subtraction is " + (firstNum - secondNum));
// multiplication -> *
System.out.println("The product is " + (firstNum * secondNum));
// division -> /
System.out.println("The division is " + (firstNum / secondNum));
// remainder -> %
System.out.println("The remainder is " + (firstNum % secondNum));
/*
Output -
   The sum is 37
   The subtraction is 31
   The product is 102
   The division is 11
   The remainder is 1
 */
// division output is 11 because both are integers. Convert their types to double and you will get output as 11.3333....4. So, it's your responsibility to describe the right type for the variable.

Операторы отношения

  • == сравнение, а не присвоение
  • ! = не равно
  • > больше чем
  • ›= Больше или равно
  • ‹= Меньше или равно

Логические операторы

  • И (&&) - обе стороны должны быть истинными, тогда выражение истинно
  • ИЛИ (||) - одна из сторон должна быть истинной, тогда выражение истинно
  • НЕ (!) - отменяет значение выражения

Подробнее об операторах отношения и логических операторах в коде ниже:

System.out.println(" 5 < 3: " + (5 < 3));
/*
   Output-
   5 < 3: false
 */
boolean isOld = true;
boolean isYoung = false;
if (isOld && isYoung) {
   System.out.println("Won't reach here!!! And");
}
if (isOld || isYoung) {
   System.out.println("Will reach here!!! OR");
}
if (isOld && !isYoung) {
   System.out.println("Will reach here!!! Both are true!!! And");
}
/*
   Output-
      Will reach here!!! OR
      Will reach here!!! Both are true!!! And
 */

Циклы

  • Выполнить определенный код определенное количество раз
  • for и while циклы чаще используются в java.
for (initialisation expression; conditional expression; update expression) {
// code
}
while (conditional expression) {
// code
}

Для получения дополнительной информации посмотрите код ниже -

/*
   for loop
   while loop
 */
for (int i = 0; i < 10; i++) {
   System.out.println(i);
}
/*
   Output-
      0
      1
      2
      3
      4
      5
      6
      7
      8
      9
 */
int i = 0;
while (i < 5) {
   System.out.println(i);
   i++;
}
/*
   Output-
      0
      1
      2
      3
      4
 */

Методы, параметры и типы возврата

type method_name (type param1, type param2, … ) {
    // body of the method
    return type;
}

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

Скажем, зная имя и фамилию пользователя, мы должны получить полное имя пользователя. Кажется повторяющимся повторением объединения во всех местах, а затем получение полного имени. Вот где в игру вступает метод. Нужно хранить логику в одном месте, а затем вызывать ее соответствующим образом. Более подробная информация в коде ниже -

public static void main(String[] args) {
   // methods and parameters
   myName();
   anotherMethod();
   anotherMethodWithName("Anamika");
   addNum(5, 6);
   System.out.println(add2Num(3, 4));
   System.out.println(fullName("Ashok", "Kumar"));
   System.out.println(firstLetter("Shyam"));
   /*
      Output -
         Ankit
         Another Method
         Another method that takes name Anamika
         Method that adds. 5 + 6 = 11
         Method that adds two numbers and return. 3 + 4 = 7
         7
         Ashok Kumar
         S
    */
   }
   // method
public static void myName () {
   System.out.println("Ankit");
}
// another method
public static void anotherMethod () {
   System.out.println("Another Method");
}
// another method with a string parameter
public static void anotherMethodWithName (String myName) {
   System.out.println("Another method that takes name " + myName);
}
// method that does sum of two numbers
public static void addNum (int a, int b) {
   System.out.println("Method that adds. " + a + " + " + b + " = " + (a + b));
}
// methods and return sum of two numbers
public static int add2Num (int a, int b) {
   System.out.println("Method that adds two numbers and return. " + a + " + " + b + " = " + (a + b));
       return (a + b);
}
// return a string
public static String fullName (String firstName, String lastName) {
       return firstName + " " + lastName;
}
// returns a char
public static char firstLetter (String word) {
       if (word.length() > 0)
          return word.charAt(0);
       return '\0';
}

В этой главе мы рассмотрели самые основы java. В следующей части мы коснемся сложных тем в java.

На этом пока все. До скорого. :)

В последней части мы обсудили-

  • процесс компиляции в java
  • основы языка - переменные, комментарии, циклы, методы, параметры и возвращаемые типы

В этой главе мы обсудим некоторые расширенные темы Java, связанные с ООП.

Классы и объекты

  • класс - это предварительный план
  • например, архитектор делает чертеж и передает его дизайнерам
  • дизайнеры используют его, вносят некоторые улучшения и воплощают в жизнь, называя его объектом.
  • классы - это чертежи для объектов. Легко подумать, что объекты должны иметь свойства и поведение. Рассмотрим теннисный мяч - зеленый, круглый, светлый, отскок (поведение) и т. Д.

Создайте новый файл Ball.java в том же пакете, что и Main.java.

package com.anujkuma.helloworld;
public class Ball { // blue print
   // properties, attributes, features, or instance variables
   public String color;
   public String name;
   public int bounceRate;

   // behaviors
   public void bounce () {
      System.out.println("Bouncing");
   }
   public void deflate () {
      System.out.println("Deflate");
   }
   public void inflate () {
      System.out.println("Inflate");
   }
}

внутри main (String [] args)

Ball myBall = new Ball(); // new Ball actually creates an object of type ball in memory
Ball secondBall = new Ball(); // second ball. totally different from myBall
myBall.color = "Blue";
myBall.name = "Basket Ball";
myBall.bounceRate = 10;
secondBall.color = "Red";
secondBall.name = "Tennis Ball";
secondBall.bounceRate = 10;
System.out.println("My ball");
System.out.println(myBall.color);
System.out.println(myBall.name);
System.out.println("Second ball");
System.out.println(secondBall.color);
System.out.println(secondBall.name);
/*
   Output-
      My ball
      Blue
      Basket Ball
      Second ball
      Red
      Tennis Ball
 */

Важно понимать, зачем использовать классы и объекты. Иногда важно не беспокоиться о деталях того, как работают внутренние детали класса. Если вы просто хотите поиграть с мячом, вам не нужно знать, как делается резина и т. Д., И т. Д. Кроме того, они представляют собой объекты реального мира. И обычно они самодостаточны. Итак, кто-то не может просто подойти и изменить capacity шарика на 0. Нет смысла иметь шар с capacity 0. Итак, вот роль модификаторов доступа

Модификаторы доступа

  • общедоступный - любой может получить к нему доступ
  • частный - может быть доступен внутри класса

Важно, чтобы мы дали private access кому-то вроде capacity.

в Ball.java

// properties, attributes, features, or instance variables
private String color;
private String name;
private int bounceRate;
private int capacity;
public Ball(String color, String name, int bounceRate, int capacity) {
   this.color = color;
   this.name = name;
   this.bounceRate = bounceRate;
   this.capacity = capacity;
}

// behaviors
public void showColor () {
   System.out.println("Color: " + color);
}
public void showName () {
   System.out.println("Name: " + name);
}
public void bounce () {
   System.out.println("Bouncing");
}
public void deflate () {
   System.out.println("Deflate");
}
public void inflate () {
   System.out.println("Inflate");
}

в Main.java

Ball myBall = new Ball("Red", "Tennis", 10, 10); // new Ball actually creates an object of type ball in memory
myBall.bounce();
// Need not worry about how ball is made if you want to play with it. These details are abstracted away.
// Controlling Access or Access modifiers -
// public - anyone can access it
// private - only access within the class
// access modifiers and introduction to constructors
// constructor - to construct a proper object. new Ball() is actually constructing the new object.
myBall.showColor();
myBall.showName();
/*
Output-
    Bouncing
    Color: Red
    Name: Tennis
*/

Конструктор - это способ инициализировать объект с правильными свойствами. У них нет возвращаемого типа.

public Ball (String color, String name, int capacity, int bounceRate) {
    this.color = color;
    this.name = name;
    this.capacity = capacity;
    this.bounceRate = bounceRate;
}

Не следует просто изменять свойства прямо из main, например,

myBall.capacity = 10; // bad

Однако иногда может случиться так, что потребителю потребуется изменить значение переменной-члена. Вот тут-то и вступают в игру геттеры и сеттеры. Теперь установщик внутри класса может инкапсулировать логику, должен ли он присваивать значение переменной-члену или нет.

myBall.setColor (“Yellow”);

Перегрузка конструкторов

Идея перегружающих конструкторов состоит в том, чтобы иметь как можно больше конструкторов.

Перегрузка может быть достигнута путем изменения количества (или) типа аргументов.

public Ball () {
}
public Ball(String color, String name, int bounceRate, int capacity) {
   this.color = color;
   this.name = name;
   this.bounceRate = bounceRate;
   this.capacity = capacity;
}
public Ball (String color, String name) {
   this.color = color;
   this.name = name;
}

Наследование

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

На изображении выше можно увидеть, что Animal является базовым классом (общим классом), а другие классы Cat, Dog and Lion просто наследуют свойства и поведение от базового класса и могут добавлять его конкретные свойства и поведения в свои соответствующие классы.

Подробнее в коде ниже.

Давайте рассмотрим пример мяча. BasketBall - это класс, наследующий Ball

public BasketBall extends Ball {
// properties
public boolean isNBA;
public int capacity;
// behaviors
public boolean isNBA () {
   return isNBA;
}
// override
/*
   when we override certain behaviours it means that though we have all the behaviours from parent, we can have our own definition of the behaviour defined in parent
 */
@Override
public void bounce() {
   // super.bounce();
   System.out.println("Basket ball bouncing!!!");
}

Когда класс наследует другой класс, мы используем ключевое слово extends после дочернего класса и помещаем после него базовый класс.

Библиотека классов Java

Важно понимать, как мы можем использовать такие классы, как String, Integer, System.out.println и т. Д., Не беспокоясь о том, как это делается.

Это потому, что многие классы импортируются из таких пакетов, как java.lang.

Более подробную информацию о том, какие пакеты и классы доступны внутри него, можно найти на странице https://docs.oracle.com/javase/8/docs/api/.

Давайте попробуем использовать один из документов -

StringBuilder
StringBuilder sBuilder = new StringBuilder();
sBuilder.append("Life");
System.out.println("String Builder: " + sBuilder);
sBuilder.append(" is great");
System.out.println("String Builder: " + sBuilder);
System.out.println(sBuilder.capacity());

На этом все. В следующей части мы поговорим о других структурах данных в java. :)

В последней части мы обсудили-

  • классы и объекты
  • Модификаторы доступа
  • конструкторы
  • Геттеры и сеттеры
  • Перегрузка
  • наследование
  • преобладающий
  • библиотека классов Java

В этой части мы обсудим структуры данных в java-

Массивы

  • небольшие ведра, но организованные определенным образом
  • контейнер, который имеет небольшие компоненты, и к этому компоненту можно получить доступ по номеру в порядке
  • массивы допускают значения только одного типа
  • К каждому маленькому компоненту можно добраться с помощью индекса. Индекс 0 означает первый компонент в контейнере, 1 означает второй и так далее.

Было бы здорово, если бы мы могли создать массив на данный момент, а затем иметь возможность добавлять в него значения позже.

Для этого мы создаем наш массив с новым.

type[] name-of-array = new type[size-of-array];

int[] myArray = {1, 2, 3, 4};
String[] myStringArray = {"Anuj", "Ankit", "Anamika"};
System.out.println("Array of ints: [0] -> " + myArray[0]);
System.out.println("Array of Strings: [0] -> " + myStringArray[0]);
for (int i = 0; i < myArray.length; i++) {
   System.out.println("Int[" + i + "] -> " + myArray[i]);
}
for (int i = 0; i < myStringArray.length; i++) {
   System.out.println("String[" + i + "] -> " + myStringArray[i]);
}
// it will be great if we can create the array for now and then have the flexibility add values in it later
int[] newIntArray = new int[5];
String[] newStringArray = new String[5];
newIntArray[0] = 10;
newIntArray[1] = 11;
newIntArray[2] = 12;
newIntArray[3] = 13;
newIntArray[4] = 14;
// newIntArray[5] = 15; // java.lang.ArrayIndexOutOfBoundsException
newStringArray[0] = "A";
newStringArray[1] = "B";
newStringArray[2] = "C";
newStringArray[3] = "D";
newStringArray[4] = "E";
for (int i = 0; i < myArray.length; i++) {
   System.out.println("Int[" + i + "] -> " + newIntArray[i]);
}
for (int i = 0; i < myStringArray.length; i++) {
   System.out.println("String[" + i + "] -> " + newStringArray[i]);
}
/*
    Output-
Array of ints: [0] -> 1
Array of Strings: [0] -> Anuj
Int[0] -> 1
Int[1] -> 2
Int[2] -> 3
Int[3] -> 4
String[0] -> Anuj
String[1] -> Ankit
String[2] -> Anamika
Int[0] -> 10
Int[1] -> 11
Int[2] -> 12
Int[3] -> 13
String[0] -> A
String[1] -> B
String[2] -> C
*/

ArrayList

  • более расширенная версия Array

Синтаксис ArrayList -

  • ArrayList<type(optional)> name-of-array-list = new ArrayList();
  • если тип не указан, он может содержать любой тип данных
ArrayList animals = new ArrayList();
animals.add(23);
animals.add("Cow");
animals.add("Parrot");
for (int i = 0; i < animals.size(); i++) {
   System.out.println("ArrayList[" + i + "] -> " + animals.get(i));
}
/*
    Output-
ArrayList[0] -> 23
ArrayList[1] -> Cow
ArrayList[2] -> Parrot
*/
// clever for loop
for (Object animal : animals) {
   System.out.println(animal);
}

ArrayList очень гибкий и динамичный по своей природе. Есть и другие полезные утилиты ArrayList:

  • размер
  • Удалить
  • содержит

так далее…

ArrayList animals = new ArrayList();
animals.add(23);
animals.add("Cow");
animals.add("Parrot");
animals.remove(0); // remove
animals.add(0, "Dog");
animals.remove("Cow");
animals.add("Cheetah");
// System.out.println(animals.get(0));
System.out.println("Does list of animals contain Cheetah? " + animals.contains("Cheetah"));
for (int i = 0; i < animals.size(); i++) {
   System.out.println("ArrayList[" + i + "] -> " + animals.get(i));
}
/*
Output-
ArrayList[0] -> Dog
ArrayList[1] -> Parrot
ArrayList[2] -> Cheetah
*/

HashMap

  • Хранит пары ключ, значение
  • Синтаксис-
HashMap name-of-HashMap = new HashMap();
  • putвставить (ключ, значение) в HashMap
  • get(key) для получения значения из HashMap
  • Iterator используется для перебора всех пар ключ-значение в HashMap.
// HashMap - (key, value) pairs
HashMap users = new HashMap();
users.put("Anuj", 0);
users.put("Ankit", 1);
users.put("Anamika", 2);
users.remove("Anamika");
System.out.println(users.entrySet());
System.out.println("Value of users' key: 'Anuj' -> " + users.get("Anuj"));
Iterator iterator = users.entrySet().iterator();
while (iterator.hasNext()) {
   Map.Entry pair = (Map.Entry) iterator.next();
   System.out.println("Key -> " + pair.getKey() + " Value -> " + pair.getValue());
}
HashMap<String, Integer> newUsers = new HashMap<>();
newUsers.put("Anuj", 23);
newUsers.put("Ankit", 25);
newUsers.put("Anamika", 21);
Iterator iterator1 = newUsers.entrySet().iterator();
while (iterator1.hasNext()) {
   Map.Entry pair = (Map.Entry) iterator1.next();
   System.out.println("Key -> " + pair.getKey() + " Value -> " + pair.getValue());
}
/*
Output-
[Anuj=0, Ankit=1]
Value of users' key: 'Anuj' -> 0
Key -> Anuj Value -> 0
Key -> Ankit Value -> 1
Key -> Anamika Value -> 21
Key -> Anuj Value -> 23
Key -> Ankit Value -> 25
*/

Запомните такой синтаксис, как ArrayList<className>, где имя класса не может быть примитивного типа.

Важно понимать, как итератор работает с hashmap. Подробнее в коде выше.

Часть 2: https://medium.com/@anujbaranwal/android-from-scratch-part-2-f17b9744ed03

Итак, это то, что мы рассмотрим при разработке Java для Android. В следующей части мы погрузимся в Android. До скорого. :)