2. Java基础语法

2. Java基础语法

2.1 数据存储(了解)

2.1.1 二进制

  • 计算机中的所有信息都是二进制方式进行存储的,二进制就是只有0、1
  • 换句话说,计算机只认识0和1两个数字,
  • 我们要想把数字、文字、图片、视频等等内容保存到计算机中,都要想办法把它们转换为0和1才行

2.1.2 数字存储

1. 数字存储
  • 二进制就是只有0、1,按照逢2进1的方式表示数
  • 由上图可以看出4的二进制为: 100
2. 十进制转二进制的算法
  • 你现在说的数字很小,那我一个数很大,
    比如153,他的二进制难道我一个个12345678….
    这样推出来吗,有没有更直接的算法呢?
    
  • 解决流程如下:
1. 将给定的十进制数不断地除以2,同时记录下每次的商和余数。
2. 将每次得到的余数作为二进制数的一个位数,从最低位开始记录。
3. 重复上述步骤,直到商为0为止。
4. 将得到的二进制数倒序排列,即可得到最终结果。
5. 以下是使用这种方法将十进制数153转换为二进制的过程:

  153 ÷ 2 = 76 余 1(最低位)
  76 ÷ 2 = 38 余 0
  38 ÷ 2 = 19 余 0
  19 ÷ 2 = 9 余 1
  9 ÷ 2 = 4 余 1
  4 ÷ 2 = 2 余 0
  2 ÷ 2 = 1 余 0
  1 ÷ 2 = 0 余 1(最高位)
  然后将得到的余数倒序排列,即可得到153的二进制表示为10011001。
3. 计算机中的数据的基本单元和最小单位
  • 数据存储基本单元:使用8个二进制位为一组,称之为一个字节(byte,简称B)
  • 数据存储最小单位: 数据基本单元中,每个二进制位称为比特(bit,简称b), 1B = 8b
  • 补充: 最高位一般作为符号位,0代表正数,1代表负数
4. 总结
  1. 数据在计算机底层都是使用___二进制___进制存储的
  2. 快速计算一个数据的二进制形式的方法是___除2取余法___
  3. 数据在计算机底层存储的基本单元是___字节(byte, B)___
  4. 数据在计算机底层存储的最小单位是___位(bit, b)___

2.1.3 其他存储

  1. 字符在计算机中是如何存储的呢?
  • ASCII编码表:即美国信息交换标准编码,规定了现代英语、数字字符、和其他西欧字符对应的数字编号。
  • char ch = 'a';
  1. 图片数据
  • 图片就是无数个像素点组成的
  • 每个像素点的数据:用0 ~ 255255255表示其颜色
  1. 声音数据
  1. 总结
  2. 字符存的是___ASCII码表中对应的数字的二进制____形式
  3. 字符’0’对应的数字是__48___
  4. 字符’A’对应的数字是__65___
  5. 字符’a’对应的数字是__97___
  6. 图片、声音、视频等等内容在计算机中都是想办法转为___二进制____存储的

2.2 数据类型(重点)

2.2.1 数据类型的分类

1. 基本数据类型
  • 基本数据类型: 4类8种
  • 数据类型的分类
  • 总结:
  • 2.1.1总结
  • 字符串的拼接使用+号
  • +号的左右两边有任意一边是字符串,+就是拼接
2. 引用数据类型
  • String : 字符串类型,
  • 用于如: 需要存储姓名, 或者一段话 的时候会用到.

2.2.2 自动类型转换

1. 什么是自动类型转换?
  • 类型转换就是指的不同类型的变量相互转换
  • 类型范围小的变量,可以直接赋值给类型范围大的变量。
  • 自动类型转换在计算机中的执行原理
  • 自动类型转换在计算机中的执行原理
  • 自动类型转换的其他形式
  • 自动类型转换的其他形式

int c = 10;
double d = c;
System.out.println(d); 
char x = ‘中’;
int y = x;
2. 表达式的自动类型转换
  • 在表达式中,小范围类型的变量,会自动转换成表达式中较大范围的类型,再参与运算。
  • 表达式的自动类型转换

2.2.2 强制类型转换

  • 类型范围大的数据或者变量,直接赋值给类型范围小的变量,会报错。
int a = 20;
byte b = a; //报错 
1. 强制类型转换
  • 强行将类型范围大的变量、数据赋值给类型范围小的变量。
  • 目标数据类型 变量名 = (目标数据类型)变量值

int a = 20;
byte b =  (byte)a; 

2. 强制类型转换在计算机中的执行原理
  • 强制类型转换在计算机中的执行原理_1
  • 强制类型转换在计算机中的执行原理
_2
3. 注意事项:
  • 强制类型转换可能造成数据(丢失)溢出;
  • 浮点型强转成整型,直接丢掉小数部分,保留整数部分返回.

2.2.3 总结

  1. 什么是强制类型转换?
  • 默认情况下, 大范围类型的变量转小范围的变量会报错.
  • 可以强制将类型大的变量, 数据赋值给数据类型范围小的变量.
  1. 强制类型转换有哪些需要注意的
  • 可能会造成数据丢失.
  • 小数强制全换成整数是直接截断小数保留整数.

2.3 运算符(重点)

2.3.1 算数运算符

1. 基本的算术运算符
  • 基本的算术运算符
  • “+” 符号可以做连接符的
  • “+”符号与字符串运算的时候是用作连接符的,其结果依然是一个字符串。
    • “abc” + 5 —> “abc5”
int a = 5;
System.out.println("abc" + a);
System.out.println(a + 5);
System.out.println("itheima"+ a + 'a'); 
System.out.println(a + 'a' + "itheima"); 

  • 秘籍: +号左右两边只要有一边就字符串, +号就做连接符使用
2. 总结:
  1. 算数运算符有哪些?
  • (加)+ 、(减)-、 (乘)*、 (除)/、 (取余)%
  1. /(除) 需要注意什么,为什么?
    如果两个整数做除法,其结果一定是整数,因为最高类型是整数。

  2. +(加) 除了做基本数学运算,还有哪些功能?
    与字符串做+运算时会被当成连接符,其结果还是字符串。
    识别技巧:能算则算,不能算就在一起。

  • 案例:
package com.itheima.b_operator;

/*
算数运算符
    + 加法
    - 减法
    * 乘法
    % 取余
    / 除法 在Java中,两个整数相除,结果还是整数,其实就是商

注意事项:
    1. 如果想让结果是小数,那么必须让小数参与运算
    2. 目前我么不用浮点数做精确运算(后面使用java提供的类完成精确运算)
 */
public class Demo1 {
    public static void main(String[] args) {
        int a = 10;
        int b = 3;
        double c = 4.0;
        //1. 基本运算 , + - *  %
        System.out.println(a + b);  //13
        System.out.println(a - b);  //7
        System.out.println(b - a);  //-7
        System.out.println(a * b);  //30
        System.out.println(a % b);  //1

        //2. 两个整数相除,结果为整数,即 商
        System.out.println(a/b);    //2
        //3. 如果想让结果是小数,那么必须让小数参与运算
        System.out.println(a/c);    //2.5
        //4. 目前不用浮点数做精确运算(后面使用java提供的类完成精确运算)
        //如:0.1+0.2
        System.out.println(0.1+0.2);    //人为计算是0.3,但是计算机计算后结果会在0.3上下浮动
    }
}


### 2.3.2 自增自减运算符
#### 1. 自增自减运算符
- ![自增自减运算符
](image/自增自减运算符.png)
- 注意:++-- 只能操作变量,不能操作字面量的。

#### 2. 自增自减的使用注意事项
- ++--如果不是单独使用(如在表达式中、或者同时有其它操作),放在变量前后会存在明显区别
放在变量的前面,先对变量进行+1-1,再拿变量的值进行运算。 
```java
int a = 10;
int rs = ++a; //(先加再用)    

  • 放在变量的后面,先拿变量的值进行运算,再对变量的值进行+1、-1
int b = 10;
int rs = b++; //(先用再加)    

3. 总结
  • 1、自增、自减运算符是什么,有什么作用,需要注意什么?

    • ++、–;对当前变量值+1、-1
    • 只能操作变量,不能操作字面量
  • 2、自增、自减运算符放在变量前后有区别吗?

    • 如果单独使用放前放后是没有区别的。
    • 非单独使用:在变量前 ,先进行变量自增/自减,再使用变量。
    • 非单独使用:在变量后 ,先使用变量,再进行变量自增/自减。
4. 案列
package com.itheima.b_operator;

/*
自增 自减
    自增:++	放在某个变量前面或者后面,对变量自身的值加1
    自减:--	放在某个变量前面或者后面,对变量自身的值减1

注意事项:
    1. 如果变量单独使用,符号在前、在后没有区别
    2. 自增 自减 只能操作变量,不能操作字面量
    3. 如果变量参与操作
        符号在前:就先++, 后参与操作
        符号在后: 就先参与操作, 后++
    4. 打印也是一种操作,会按照第2条执行
*/
public class Demo4 {
    public static void main(String[] args) {
        int a=10;
        System.out.println(a++);    //10
        System.out.println(a++);    //11
        System.out.println(++a);    //13

        System.out.println("--------分割线-----------");

        int c=10;
        int d=5;
//        c: 11
//        d: 5
//        rs3: 10 + 12 - 4 - 5 + 1 + 12 = 26
        int rs3= c++ + ++c - --d - ++d + 1 + c--;
        System.out.println(c);      //11
        System.out.println(d);      //5
        System.out.println(rs3);    //26
        
    }
}

2.3.3 赋值运算符

1. 基本赋值运算符
  • 就是“=”,从右边往左看。
int a = 10;  // 先看“=”右边,把数据10赋值给左边的变量a存储。

2. 扩展赋值运算符
  • 扩展赋值运算符
  • 注意:扩展的赋值运算符隐含了强制类型转换。
3. 总结
  1. 赋值运算符有哪些?
  • 基本的赋值运算符:= (从右边往左看)
  • 扩展的赋值运算符:+=、-=、*=、/=、%=
  1. 扩展赋值运算符的作用是什么?有什么特点
  • +=可以实现数据的累加,把别人的数据加给自己。
  • 扩展的赋值运算符自带强制类型转换。
package com.itheima.b_operator;

/*
赋值运算符

    基本赋值运算符 =
        将=号右边的值赋值给左边的变量

    扩展赋值运算符 +=
        将符号两边的变量做加法,然后将结果再复制给等号左边
        a+=b   ---->  a = (a的类型)(a+b)

    经典面试题:
         已知: short s = 1;
         那么下面两种写法的结果是否一致:
         s+=1;
         s = s + 1;
 */
public class Demo5 {
    public static void main(String[] args) {
        //基本赋值运算符 =
        int a = 10;
        //扩展的赋值运算符:+=、-=、*=、/=、%=
        System.out.println(a+=2);   //12
        System.out.println(a);      //12
        System.out.println(a-=2);   //10
        System.out.println(a*=2);   //20
        System.out.println(a/=2);   //10
        System.out.println(a%=2);   //0

        short b=1;
        b+=2;       //3  b+=2;详细为  b = (short)b + 2;
//        b=b+2;    //报错, byte, short, char在运算时会先转换成int型,在计算

    }

}

2.3.4 关系运算符

1. 关系运算符
  • 关系运算符
  • 判断数据是否满足条件,最终会返回一个判断的结果,这个结果是布尔类型的值:true或者false。
  • 注意:在java中判断是否相等一定是“== ” ,千万不要把 “== ”误写成 “=”。

2.3.5 逻辑运算符

1. 逻辑运算符
  • 把多个条件放在一起运算,最终返回布尔类型的值:true、false。
  • 逻辑运算符
  • 逻辑运算符_2
  • 注意:在java中, “&” 、 “|”: 无论左边是 false还是 true,右边都要执行。
2. 总结
  1. 逻辑运算符有哪些,有什么特点?
  • & : 有一个为false、结果是false

  • &&: 一个为false、结果是false,但前一个为false,后一个条件不执行了

  • | : 有一个为true、结果是true

  • || :一个为true、结果是true,但前一个为true,后一个条件不执行了

  • ! :!false=true、 !true=false
    ^ :相同是false、不同是true。

  • 注意:实际开发中、常用的逻辑运算符还是:&& 、 || 、 !

  • 案例:

package com.itheima.b_operator;

/*
逻辑运算符: 把多个条件放在一起运算,最终返回布尔类型的值:true、false
    &	逻辑与	理解为并且	多个条件中有一个是false,结果就是false
    |	逻辑或	理解为或者	多个条件中有一个是true, 结果就是true
    !	逻辑非	取反
    ^	逻辑异或	相同为false,不同为true

短路逻辑运算符
    && 同&,但是一旦表达式有false,右边不再执行
    || 同|,但是一旦表达式有true,右边不再执行
 */
public class Demo7 {
    public static void main(String[] args) {
        int a = 1;
        //&	逻辑与	理解为并且	多个条件中有一个是false,结果就是false
        boolean b = 3 > 1 & 2 < 1;
        System.out.println(b);      //false
        boolean b2 = 3 > 1 & 2 > 1;
        System.out.println(b2);     //true
        boolean b3 = 3<1 & a++<1;
        System.out.println(b3);     //false
        System.out.println(a);      //2, 右边执行

        //|	逻辑或	理解为或者	多个条件中有一个是true, 结果就是true
        boolean b4 = 3>1 | 2>1;
        System.out.println(b4);     //true
        boolean b5 = 3<1 | a++<1;
        System.out.println(b5);     //false
        System.out.println(a);      //3, 右边执行

        //!	逻辑非	取反
        boolean b6= !(3>1);
        System.out.println(b6);     //false

        //^	逻辑异或	相同为false,不太为true
        boolean b7= 3 > 1 ^ 2 < 1;
        System.out.println(b7);     //true

        //短路逻辑与&&    同&,但是一旦表达式有false,右边不再执行
        boolean b8 = 3 > 1 && 2 < 1;
        System.out.println(b8);         //false
        boolean b9 = 3 > 1 && 2 > 1;
        System.out.println(b9);         //true
        boolean b10 = 3<1 && a++<1;
        System.out.println(b10);        //false
        System.out.println(a);          //3, &&左边不执行

        //短路逻辑或||    同|,但是一旦表达式有true,右边不再执行
        boolean b11 = 3>1 || 2>1;
        System.out.println(b11);     //true
        boolean b12 = 3<1 || 2>1;
        System.out.println(b12);     //true
        boolean b13 = 3<1 || a++<1;
        System.out.println(b13);     //false
        System.out.println(a);      //4, ||右边执行
        boolean b14 = 3>1 || a++>1;
        System.out.println(b14);     //true
        System.out.println(a);      //4, ||右边不执行
    }

}

2.3.6 三元运算符

1.三元运算符
  • 格式: 条件表达式 ? 值1 : 值2;
  • 执行流程:首先计算关系表达式的值,如果值为true,返回值1,如果为false,返回值2。
2. 总结
  • 案列:
  • 三元运算符_案例
package com.itheima.b_operator;

/*
三元运算符
    格式:
        数据类型 变量名 = 条件表达式 ? 表达式1 : 表达式2;
    执行流程:
        先判断条件表达式,如果成立,返回表达式1的结果; 如果不成立,返回表达式2的结果
*/
public class Demo8 {
    public static void main(String[] args) {
        //案例1: 使用三元运算符判断成绩score是否及格
        int score = 90;
        String s = score >= 60 ? "及格" : "不及格";
        System.out.println(score + "(成绩): " + s);

        //案例2: 使用三元运算符,判断两个整数中的最大值,并打印
        int a = 10;
        int b = 20;
        int max = a>b?a:b;
        System.out.println("a, b中最大值为: " + max);

        //案例3: 使用三元运算符,判断三个整数中的最大值,并打印
        int x = 10;
        int y = 30;
        int z = 20;
        int max2 = x>y?x:y;
        max2 = max2>z?max2:z;
        System.out.println("x, y, z中最大值为:" + max2);
    }
}

2.3.7 运算符优先级

  • 在表达式中,哪个运算符先执行后执行是要看优先级的,例如 “*、/” 的优先级高于”+、-”。
优先级运算符
1()
2!、-、++、–
3*、/、%
4+、-
5<<、>>、>>>
6<、<=、>、>=、instanceof
7==、!=
8&
9^
10|
12&&
13?:
14=、+=、-=、*=、/=、%/、&=
  • 看看Java是否存在优先级,大家以后需要注意优先级问题
  • System.out.println(10 > 3 || 10 > 3 && 10 < 3); // true

2.4 键盘录入(重点)

1. 需求
  • 键盘输入_需求
  • 键盘输入_需求_2
  • API (Application Programming Interface:
    应用程序编程接口)
    • Java写好的程序,咱们程序员可以直接拿来调用。
    • Java为自己写好的程序提供了相应的 程序使用说明书(API文档)。
  • 下载API文档:官方API文档
2. 分析
  • 键盘录入_分析
3. 代码实现:
package com.itheima.c_scanner;

import java.util.Scanner;
/*
键盘录入对象 Scanner (java写好的程序)
    1、导包(照抄):  Scanner是JDK中已经写好的一个类,我们要找到它,就要先导入它所在的包
    2、创建对象(照抄): Scanner类代表键盘扫描到的内容
    3、接收数(照抄): 可以从Scanner中接收整数、小数和字符串
*/
public class Demo1 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入你的年龄:");
        int age = sc.nextInt();
        System.out.println("用户的年龄是: " + age);
        System.out.print("请输入你的姓名: ");
        String name = sc.next();
        System.out.println("用户的姓名是: " + name);

    }
}

4. 总结:
  1. API是什么?API文档是什么?
  • 应用程序编程接口:Java写好的程序,咱们可以直接调用。
  • Java提供的程序使用说明书。
  1. Java程序中如何实现接收用户键盘输入的数据?
  • 使用Java提供的Scanner来完成,步骤如下:
  • 导包:import java.util.Scanner;
  • 创建扫描器对象: Scanner sc = new Scanner(System.in)
  • 等待接收用户输入的数据:
    • int age = sc.nextInt();
    • String name = sc.next();

  • 到此教程就结束了.
  • 转载: 请附上本文链接.
  • 如果文章对你有帮助, 可以点赞收藏一下, 以防下次需要可以快速找到.
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值