Последняя серия базовых курсов Java — Day02 — Базовая грамматика Java

Домашняя страница автора: Programming Compass

Об авторе: Высококачественный создатель в области Java, эксперт блога CSDN
, контент-партнер CSDN, приглашенный автор Nuggets, эксперт блога Alibaba Cloud, приглашенный автор 51CTO, многолетний опыт проектирования архитекторов, постоянный лектор класса Tencent

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

В избранное, лайки, не пропадайте, хорошо подписывайтесь на автора

Получите исходный код в конце статьи

​# day02——тип данных, оператор

2. Преобразование типа данных

2.1 Автоматическое преобразование типов

Уважаемые студенты, давайте познакомимся с преобразованием типов дальше. Зачем изучать преобразование типов? Поскольку в нашей реальной разработке значение переменной определенного типа может быть присвоено переменной другого типа, также могут быть случаи, когда данные нескольких типов данных обрабатываются вместе.

В приведенных выше случаях фактически будет задействовано преобразование типов. Форма преобразования типов обычно делится на два типа: один — автоматическое преобразование типов , а другой — обязательное преобразование типов . Здесь сначала изучите автоматическое преобразование типов

  • Что такое автоматическое преобразование типов?
答:自动类型转换指的是,数据范围小的变量可以直接赋值给数据范围大的变量
	byte a = 12; 
	int b = a; //这里就发生了自动类型转换(把byte类型转换int类型)
  • Каков принцип автоматического преобразования типов?
答:自动类型转换其本质就是在较小数据类型数据前面,补了若干个字节

[Не удалось передать изображение по внешней ссылке, исходный сайт может иметь механизм защиты от пиявки, рекомендуется сохранить изображение и загрузить его напрямую (img-Q8Zj7wiJ-1689742236586)(assets/1660837214161.png)]

В дополнение к преобразованию между byte и int, другие типы также могут быть преобразованы, и последовательность преобразования показана на рисунке ниже.

[Не удалось передать изображение по внешней ссылке, исходный сайт может иметь механизм защиты от кражи, рекомендуется сохранить изображение и загрузить его напрямую (img-iCH6AolD-1689742236588)(assets/1660837456261.png)]

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

public class TypeConversionDemo1 {
    
    
    public static void main(String[] args) {
    
    
        // 目标:理解自动类型转换机制。
        byte a = 12;
        int b = a; // 发生了自动类型转换了
        System.out.println(a);
        System.out.println(b);

        int c = 100; // 4
        double d = c;// 8 发生了自动类型转换了
        System.out.println(d);

        char ch = 'a'; // 'a' 97 => 00000000 01100001
        int i = ch; // 发生了自动类型转换了 =>  00000000 00000000  00000000 01100001
        System.out.println(i);
    }
}
  • Автоматическое преобразование типов выражений

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

Если переменные или данные разных типов оперируются вместе в одном выражении, какой тип данных является результатом операции в этом случае? Необходимо соблюдать следующие два правила работы:

1.多种数据类型参与运算,其结果以大的数据类型为准
2.byte,short,char 三种类型数据在和其他类型数据运算时,都会转换为int类型再运算

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

public class TypeConversionDemo2 {
    
    
    public static void main(String[] args) {
    
    
        // 目标:掌握表达式的自动类型转换机制。
        byte a = 10;
        int b = 20;
        long c = 30;
        long rs = a + b + c;
        System.out.println(rs);

        double rs2 = a + b + 1.0;
        System.out.println(rs2);
		
        byte i = 10;
        short j = 30;
        int rs3 = i + j;
        System.out.println(rs3);

        // 面试笔试题: 即使两个byte运算,结果也会提升为int
        byte b1 = 110;
        byte b2 = 80;
        int b3 = b1 + b2;
        System.out.println(b3);
    }
}

2.2 Обязательное преобразование типов

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

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

  • Что брошено

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

目标数据类型  变量名  =  (目标数据类型)被转换的数据;

Ниже приведена демонстрация кода принудительного преобразования типов.

public class TypeConversionDemo3 {
    
    
    public static void main(String[] args) {
    
    
        // 目标:掌握强制类型转换。
        int a = 20;
        byte b = (byte) a;  // ALT + ENTER 强制类型转换。
        System.out.println(a);
        System.out.println(b);

        int i = 1500;
        byte j = (byte) i;
        System.out.println(j);

        double d = 99.5;
        int m = (int) d; // 强制类型转换
        System.out.println(m); // 丢掉小数部分,保留整数部分
    }
}
  • Принцип обязательного преобразования типов

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

[Не удалось передать изображение по внешней ссылке, на исходном сайте может быть установлен механизм защиты от пиявки, рекомендуется сохранить изображение и загрузить его напрямую (img-1JvRKiUv-1689742236590)(assets/1660840481803.png)]

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

3. Операторы

Затем объясните учащимся часть контента, которая часто используется в разработке, называемая операторами.

Все мы знаем, что компьютеры используются для обработки данных, а расчет данных необходим для обработки данных.Для расчета данных должны использоваться операторы.

Оператор — это символ, участвующий в операции. Java предоставляет множество видов операторов, которые можно разделить на следующие типы арифметических операций.

  • основные арифметические операторы
  • Операторы инкремента и декремента
  • оператор присваивания
  • оператор отношения
  • Логические операторы
  • тернарный оператор

3.1 Арифметические операторы

Начните изучение с самых основных арифметических операций. Существуют арифметические операции + - * / % , *означающие умножение, /деление и %остаток.

Мы должны обратить внимание на следующие моменты

/: 两个整数相除,结果也是一个整数
%: 表示两个数相除,取余数

[Не удалось передать изображение по внешней ссылке, исходный сайт может иметь механизм защиты от личинга, рекомендуется сохранить изображение и загрузить его напрямую (img-n4Ni3yjt-1689742236591)(assets/1660841349983.png)]

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

Следующий код демонстрирует действие различных арифметических операторов.

public class OperatorDemo1 {
    
    
    public static void main(String[] args) {
    
    
        // 目标:掌握基本的算术运算符的使用。
        int a = 10;
        int b = 2;
        System.out.println(a + b);
        System.out.println(a - b);
        System.out.println(a * b); // 20
        System.out.println(a / b); // 5
        System.out.println(5 / 2); // 2.5 ==> 2
        System.out.println(5.0 / 2); // 2.5
        int i = 5;
        int j = 2;
        System.out.println(1.0 * i / j); // 2.5

        System.out.println(a % b); // 0
        System.out.println(3 % 2); // 1

        System.out.println("---------------------------------------");

        // 目标2:掌握使用+符号做连接符的情况。
        int a2 = 5;
        System.out.println("abc" + a2); // "abc5"
        System.out.println(a2 + 5); //  10
        System.out.println("itheima" + a2 + 'a'); // "itheima5a"
        System.out.println(a2 + 'a' + "itheima"); // 102itheima
    }
}

3.2 Операторы инкремента и декремента

Затем изучите один из наиболее часто используемых операторов: ++и--

++Читать как самоувеличение, --читать как самоуменьшение; правила работы следующие

[Не удалось передать изображение по внешней ссылке, исходный сайт может иметь механизм защиты от кражи, рекомендуется сохранить изображение и загрузить его напрямую (img-HHgJdLmg-1689742236593)(assets/1660841701880.png)]

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

1.单独使用:++或者--放在变量前面没有区别
	   int a =10; 
	    a++;  //11
		--a;  //10
		System.out.println(a); //10

2.混合使用:++或者--放在变量或者前面运算规则稍有不通过
	//++在后:先做其他事情,再做自增和自减
	int a = 10;
	int b = a++; //等价于 int b = a; a++; 

	//++在前:先自增或者自减,再做其他运输
	int x = 10;
	int y = --x; //等价于x--; int y = x;  

Следующий код демонстрирует использование ++и--

public class OperatorDemo2 {
    
    
    public static void main(String[] args) {
    
    
        // 目标:掌握自增自减运算符的使用。
        int a = 10;
        // a++; // a = a + 1
        ++a;
        System.out.println(a);

        // a--; // a = a - 1
        --a;
        System.out.println(a);

        // 自增自减只能操作变量不能操作字面量的,会报错!
      	//System.out.println(2++);

        System.out.println("--------------------------------------");

        int i = 10;
        int rs = ++i; // 先加后用
        System.out.println(rs);
        System.out.println(i);

        int j = 10;
        int rs2 = j++; // 先用后加
        System.out.println(rs2);
        System.out.println(j);
    }
}

3.3 Операторы присваивания

Далее мы узнаем об операторах присваивания. Базовый оператор присваивания на самом деле является =числом, что означает присвоение данных справа переменной слева.

int a = 10; //将数据10赋值给左边的变量a

В дополнение к основным операторам присваивания мы в основном узнаем здесь о расширенных операторах присваивания. иметь+= -= *= /= %=

[Не удалось передать изображение по внешней ссылке, на исходном сайте может быть механизм защиты от пиявки, рекомендуется сохранить изображение и загрузить его напрямую (img-3tEtoRcl-1689742236594)(assets/1660872631676.png)]

В качестве примера рассмотрим +=правила его работы, таким же образом можно проанализировать и другие операторы.

int a = 10;
//+=解析:在a原来记录值10的基础上累加5,将结果重新赋值给a; 
a+=5; 
//最终打印a的值为15
System.out.println(a); 

Позвольте мне показать вам пример первого красного конверта.

public class OperatorDemo3 {
    
    
    public static void main(String[] args) {
    
    
        // 目标:掌握扩展赋值运算符的使用。
        // +=
        // 需求:收红包
        double a = 9.5;
        double b = 520;
        a += b;  // a = (double)(a + b);
        System.out.println(a);

        // -= 需求:发红包
        double i = 600;
        double j = 520;
        i -= j;  // i = (double)(i - j);
        System.out.println(i);

        int m = 10;
        int n = 5;
        // m *= n; // 等价形式: m = (int)(m * n)
        // m /= n; // 等价形式: m = (int)(m / n)
        m %= n;    // 等价形式: m = (int)(m % n)
        System.out.println(m);
    }
}

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

问题1:下面的代码否有问题?
    byte x = 10;
    byte y = 30;
	x = x + y;  //这句代码有问题,因为两个byte类型数据相加,会提升为int类型;
	
问题2:下面的代码是否有问题?
	byte x = 10;
	byte y = 30;
	x+=3; //这句代码没有问题,因为这里有隐含的强制类型转换
		  //x+=3; 等价于 byte x = (byte)(x+y);

На этом оператор присваивания закончен, давайте немного подытожим.

1.基本赋值运算符:
	=符号含义: 把右边的值赋值给左边的变量
	
2.扩展赋值运算符:
	+= -= *= /= %=符号含义:将右边的数据和左边的变量相加、相减、相乘、相除、取余数后,将结果重新赋值给左边的变量。

3.4 Реляционные операторы

Далее давайте изучим очень простой оператор, который часто используется в реальном коде, называемый реляционным оператором. Реляционные операторы (также называемые операторами сравнения).

На следующем рисунке показаны символы и функции каждого реляционного оператора, и результат каждого реляционного оператора является ложным.

[Не удалось передать изображение по внешней ссылке, исходный сайт может иметь механизм защиты от кражи, рекомендуется сохранить изображение и загрузить его напрямую (img-ENSnhRDP-1689742236596)(assets/1660872844712.png)]

Давайте продемонстрируем эффекты различных реляционных операторов с помощью кода.

public class OperatorDemo4 {
    
    
    public static void main(String[] args) {
    
    
        // 目标:掌握关系运算符的基本使用。
        int a = 10;
        int b = 5;
        boolean rs = a > b;
        System.out.println(rs);

        System.out.println(a >= b); // 要么a大于b,或者a等于b
        System.out.println(2 >= 2); // true
        System.out.println(a < b);
        System.out.println(a <= b); // false
        System.out.println(2 <= 2); // true
        System.out.println(a == b); // false
        System.out.println(5 == 5); // true
        
        // 注意了:判断是否相等一定是用 == ,=是用来赋值的。
        // System.out.println(a = b); 
        System.out.println(a != b); // true
        System.out.println(10 != 10); // false

        System.out.println(false ^ true ^ false);
    }
}

Теперь нам нужно только знать эффект операции каждого реляционного оператора.Фактическое применение реляционных операторов требует изучения оператора управления потоком позже, прежде чем его можно будет использовать.

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

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

Изучив операторы отношения, давайте узнаем о логических операторах. Давайте посмотрим, что такое логические операторы.

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

[Не удалось передать изображение по внешней ссылке, исходный сайт может иметь механизм защиты от кражи, рекомендуется сохранить изображение и загрузить его напрямую (img-bDWKWt1G-1689742236597)(assets/1660873470958.png)]

Продемонстрируем использование логических операторов на нескольких случаях.

//需求1:要求手机必须满足尺寸大于等于6.95,且内存必须大于等于8.
//需求2:要求手机要么满足尺寸大于等于6.95,要么内存必须大于等于8.
public class OperatorDemo5 {
    
    
    public static void main(String[] args) {
    
    
        // 目标:掌握逻辑运算符的使用。
        // 需求:要求手机必须满足尺寸大于等于6.95,且内存必须大于等于8.
        double size = 6.8;
        int storage = 16;
        // 1、& 前后的条件的结果必须都是true ,结果才是true.
        boolean rs = size >= 6.95 & storage >= 8;
        System.out.println(rs);

        // 需求2:要求手机要么满足尺寸大于等于6.95,要么内存必须大于等于8.
        // 2、| 只要多个条件中有一个是true,结果就是true.
        boolean rs2 = size >= 6.95 | storage >= 8;
        System.out.println(rs2);

        // 3、!取反的意思
        System.out.println(!true); // false
        System.out.println(!false); // true
        System.out.println(!(2 > 1)); // false

        // 4、^ 前后条件的结果相同时返回false,不同时返回true.
        System.out.println(true ^ true); // false
        System.out.println(false ^ false); // false
        System.out.println(true ^ false); // true
        System.out.println(false ^ true); // true

        // 5、&& 左边为false,右边不执行。
        int i = 10;
        int j = 20;
        // System.out.println(i > 100 && ++j > 99);
        System.out.println(i > 100 & ++j > 99);
        System.out.println(j);

        // 6、|| 左边是true ,右边就不执行。
        int m = 10;
        int n = 30;
        // System.out.println(m > 3 || ++n > 40);
        System.out.println(m > 3 | ++n > 40);
        System.out.println(n);
    }
}

Пока я закончил изучение правил логических операторов, я дам вам выражение операции, а вы можете проанализировать результат. Что касается фактического использования логических операторов, вам необходимо изучить операторы управления потоком, прежде чем вы сможете их использовать.

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

3.6 Тернарные операторы

Далее мы узнаем о последнем сегодняшнем операторе, называемом тернарным оператором.

Давайте сначала разберемся с форматом тернарного оператора:

关系表达式?1 :2;

Поток выполнения тернарной операции: сначала вычислить значение реляционного выражения, если значение реляционного выражения истинно, вернуть значение 1, если значение реляционного выражения ложно, то вернуть значение 2;

Как показано на рисунке ниже: оцените, является ли оценка студента >=60, если это правда, экзамен сдан, если неверно, оценка не соответствует требованиям.

[Не удалось передать изображение по внешней ссылке, исходный сайт может иметь механизм защиты от кражи, рекомендуется сохранить изображение и загрузить его напрямую (img-YIN0BZ0r-1689742236598)(assets/1660875022987.png)]

Далее я продемонстрирую это через код, цель которого состоит в том, чтобы позволить всем освоить формат и процесс выполнения тернарного оператора.

public class OperatorDemo6 {
    
    
    public static void main(String[] args) {
    
    
        // 目标:掌握三元运算符的基本使用。
        double score = 58.5;
        String rs = score >= 60 ? "成绩及格" : "成绩不及格";
        System.out.println(rs);

        // 需求2:找出2个整数中的较大值,并输出。
        int a = 99;
        int b = 69;
        int max = a > b ? a : b;
        System.out.println(max);

        // 需求3:找3个整数中的较大值。
        int i = 10;
        int j = 45;
        int k = 34;

        // 找出2个整数中的较大值。
        int temp = i > j ? i : j;
        // 找出temp与k中的较大值。
        int max2 = temp > k ? temp : k;
        System.out.println(max2);
    }
}

3.7 Приоритет операции

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

[Не удалось передать изображение по внешней ссылке, исходный сайт может иметь механизм защиты от личинга, рекомендуется сохранить изображение и загрузить его напрямую (img-abxMcef9-1689742236611)(assets/1660875681298.png)]

Из рисунка видно, что операция && имеет более высокий приоритет, чем операция ||, поэтому, когда && и || существуют одновременно, сначала вычисляется &&, а затем ||;

Например следующий код

//这里&&先算 相当于 true || false 结果为true
System.out.println(10 > 3 || 10 > 3 && 10 < 3); // true

Наконец, позвольте мне сказать вам, что в реальной разработке мы редко учитываем приоритет операций, потому что, если вы хотите сначала вычислить какие-то данные, вы можете фактически добавить их, что более читабельно ().

//有括号先算 相当于 true && false 结果为false
System.out.println((10 > 3 || 10 > 3) && 10 < 3); //false

4. Технология Case: получение данных, введенных с клавиатуры пользователя.

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

Дело ввода с клавиатуры на самом деле мы не делаем, но сама Java предоставляет такую ​​функцию, и мы просто вызываем ее в соответствии с ее требованиями.

Когда мы устанавливали JDK, на самом деле JDK уже содержал некоторый код, написанный на Java, мы просто берем код, написанный на Java, и используем его напрямую.

比如:Scanner就是Java提供给我们用于键盘录入数据的类,为了录入不同类型的数据,还提供了不同的功能,每一个功能会有不同的名称,我们只需要调用Scanner提供的功能就可以完成键盘录入数据。

Вам нужно только написать код в соответствии со следующими шагами, и вы можете вводить данные с клавиатуры

【第1步】:在class类上导包:一般不需要我们自己做,idea工具会自动帮助我们 导包的。
	import java.util.Scanner;
	
【第2步】:得到一个用于键盘扫描器对象(照抄代码就行,固定格式)
	//Scanner是键盘扫描器对象(你就把它理解成一个东西),这个东西有录入的功能
	//sc是给这个东西取的名字
	Scanner sc = new Scanner(System.in);

【第3步】:开始调用sc的功能,来接收用户键盘输入的数据。
	//sc这个东西有键盘录入整数的功能,这个功能的名字叫nextInt()
	//.表示表示调用的意思
	int age = sc.nextInt();
	System.out.println("我的年龄是:"+age);

	//sc这个东西还有键盘录入字符串的功能,这个功能的名字叫next
	String name = sc.next();
	System.out.println("我的姓名是:"+name);

Ниже приведена полная демонстрация кода.

public class ScannerDemo1 {
    
    
    public static void main(String[] args) {
    
    
        // 1、导包:一般不需要我们自己做,idea工具会自动帮助我们 导包的。
        // 2、抄写代码:得到一个键盘扫描器对象(东西)
        Scanner sc = new Scanner(System.in);

        // 3、开始 调用sc的功能,来接收用户键盘输入的数据。
        System.out.println("请您输入您的年龄:");
        int age = sc.nextInt(); // 执行到这儿,会开始等待用户输入一个整数,直到用户按了回车键,才会拿到数据。
        System.out.println("您的年龄是:"  + age);

        System.out.println("请您输入您的名字:");
        String name = sc.next(); // 执行到这儿,会开始等待用户输入一个字符串,直到用户按了回车键,才会拿到数据。
        System.out.println(name + "欢迎您进入系统~~");
    }
}

Je suppose que tu aimes

Origine blog.csdn.net/whirlwind526/article/details/131806224
conseillé
Classement