2019-3-8 java基础篇第二天

今日目标

1.理解基本的数据类型之间的转化
2.了解常用运算符
3.掌握java中的方法概念,以及使用
4.了解基本的流程控制语言。

1. 数据类型

Java程序中要求参与的计算的数据,必须要保证数据类型的一致性,如果数据类型不一致将发生类型的转换


2019-3-8 java基础篇第二天_第1张图片
图片.png

1.1自动转换

一个 int 类型变量和一个 byte 类型变量进行加法运算,运算结果,变量的类型将是 int 类型,这就是出现了数据类型的自动类型转换现象。
自动转换:将取值范围小的类型 自动提升为 取值范围大的类型 。
从上图中的位数我们看到,int的位数大于byte,因此最终的结果会转换为int

public static void main(String[] args) {
    int i = 1;
    byte b = 2;// byte x = b + i; // 报错//int类型和byte类型运算,结果是int类型 
    int j = b + i;
    System.out.println(j);
转换原理图如下

byte 类型内存占有1个字节(8位),在和 int 类型运算时会提升为 int 类型 ,自动补充3个字节(3*8位),因此计算后的结果还是 int 类
2019-3-8 java基础篇第二天_第2张图片
图片.png

同理 当我们用int和double变量进行运算的时候,最终得到的必然会是double类型

转换规则:

前面提过其规则是范围小的类型向范围大的类型提升, byte、short、char 运算时直接提升为 int。8大基本类型的总体规则如下

byte、short、char‐‐>int‐‐>long‐‐>float‐‐>doub

在学习这里的时候不要死记,记住他们的大小关系既可。

1.2 强制转换

现在知道了小类型可以自动的转化为大的类型,那么反过来呢。将一个小数赋值给int,我们将会看到编译失败。
其主要原因就是double 类型内存8个字节, int 类型内存4个字节。 1.5 是 double 类型,取值范围大于 int 。可以理解为 double 是8升的水壶, int 是4升的水壶,不能把大水壶中的水直接放进小水壶。此时我们就要用到强制转化类型
转换格式:

数据类型 变量名 = (数据类型)被转数据值;
将 1.5 赋值到 int 类型,
代码修改为:

// double类型数据强制转成int类型,直接去掉小数点。
int i = (int)1.

同理,当一个 short 类型与 1 相加,我们知道会类型提升,但是还想给结果赋值给short类型变量,就需要强制转换。

public static void main(String[] args) {
//short类型变量,内存中2个字节
short s = 1;
/*出现编译失败s和1做运算的时候,1是int类型,s会被提升为int类型s+1后的结果是int类型,将结果在赋值会short类型时发生错误short内存2个字节,int类型4个字节必须将int强制转成short才能完成赋
*/
    s = s + 1;//编译失败
    s = (short)(s+1);//编译成功

转换原理图


2019-3-8 java基础篇第二天_第3张图片
图片.png

需要注意的是:

  • 浮点转成整数,直接取消小数点,可能造成数据损失精度。
  • int 强制转成 short 砍掉2个字节,可能造成数据。

1.3AscII编码

在计算机的内部都是二进制的0、1数据,如何让计算机可以直接识别人类文字的问题呢?就产生出了编码表的概念。
编码表 :就是将人类的文字和一个十进制数进行对应起来组成一张表.


2019-3-8 java基础篇第二天_第4张图片
图片.png

2 运算符

2.1算数运算符

2019-3-8 java基础篇第二天_第5张图片
图片.png

前面的加减乘除都比较简单,我们来看最后的自增和自减
++ 运算,变量自己增长1。反之, -- 运算,变量自己减少1,用法与 ++ 一致。
独立运算:变量在独立运算时, 前++ 和 后++ 没有区别 。变量 前++ :例如 ++i 。变量 后++ :例如 i++
混合运算:和其他变量放在一起, 前++ 和 后++ 就产生了不同。
变量 前++ :变量a自己加1,将加1后的结果赋值给b,也就是说a先计算。a和b的结果都是2

b=++a;

变量 后++ :变量a先把自己的值1,赋值给变量b,此时变量b的值就是1,变量a自己再加1。a的结果是2,b的结果是1

b=a++;

2.2 赋值运算符

2019-3-8 java基础篇第二天_第6张图片
图片.png

因为这些比较简单就不做过多解释

2.3 比较运算符

2019-3-8 java基础篇第二天_第7张图片
图片.png

两个数据之间做比较,返回值为booblean值

2.4 逻辑运算符

2019-3-8 java基础篇第二天_第8张图片
图片.png

2.5 三元运算符

三元运算符格式:
数据类型 变量名 = 布尔类型表达式?结果1:结果2
三元运算符计算方式:
布尔类型表达式结果是true,三元运算符整体结果为结果1,赋值给变量。
布尔类型表达式结果是false,三元运算符整体结果为结果2,赋值给变结果2

3.方法

  • 方法:就是将一个功能抽取出来,把代码单独定义在一个大括号内,形成一个单独的功能
    定义格式:
    修饰符 返回值类型 方法名 (参数列表){
    代码...return;
    }
    定义格式解释:
  • 修饰符: 目前固定写法 public static 。
  • 返回值类型: 目前固定写法 void ,其他返回值类型在后面的课程讲解
  • 方法名:为我们定义的方法起名,满足标识符的规范,用来调用方法。
  • 参数列表: 目前无参数, 带有参数的方法在后面的课程讲解。
  • return:方法结束。因为返回值类型是void,方法大括号内的return可以不写。有返回值时必须写返回值。

3.1方法的调用

如果在main方法中调用,可以直接写方法名字。

public static void main(String[] args) {
    //调用定义的方法
   method();
}
//定义方法,被main方法调用
public static void method() {
    System.out.println("自己定义的方法,需要被main调用运行")
}
注意事项:
  • 方法必须定义在一类中
  • 方法外方法不能定义在另一个方法的

4.流程控制

一个代码的执行时按照相应的顺序,我们在编写代码的时候必然需要控制相关代码的顺序来完成我们的逻辑。

4.1顺序执行。

所谓顺序执行就是根据代码所写一行一行从上到下执行,不会有翻转到前面执行的情况。

public static void main(String[] args){
//顺序执行,根据编写的顺序,从上到下运行
    System.out.println(1);
    System.out.println(2);
    System.out.println(3);
}

4.2判断语句

  • if语句
  第一种格式: 
    if(关系表达式){
        语句体
    }
执行流程:
  • 首先判断关系表达式看其结果是true还是false
  • 如果是true就执行语句体
  • 如果是false就不执行语


    2019-3-8 java基础篇第二天_第9张图片
    图片.png
public static void main(String[] args){
    System.out.println("开始");
    // 定义两个变量
    int a = 10;
    int b = 20;//变量使用if判断
    if (a == b){
    System.out.println("a等于b");
    }
    int c = 10;
    if(a == c){
    System.out.println("a等于c");
    }
    System.out.println("结束")
  • if...else
    if(关系表达式) {
      语句体1;
      }else {
      语句体2
    }
执行流程:
  • 首先判断关系表达式看其结果是true还是false
  • 如果是true就执行语句体1
  • 如果是false就执行语句2


    2019-3-8 java基础篇第二天_第10张图片
    图片.png
  • if..else if...else
if (判断条件1) {
执行语句1;
} else if (判断条件2) {
执行语句2;
}
...
}else if (判断条件n) {
执行语句n;
} else {
执行语句n+1;
}
执行流程:
  • 首先判断关系表达式1看其结果是true还是false
  • 如果是true就执行语句体1
  • 如果是false就继续判断关系表达式2看其结果是true还是false
  • 如果是true就执行语句体2
  • 如果是false就继续判断关系表达式…看其结果是true还是false…
  • 如果没有任何关系表达式为true,就执行语句体n+1


    2019-3-8 java基础篇第二天_第11张图片
    图片.png

4.3 选择语句switch

格式:

switch(表达式) {
case 常量值1:语句体1;break;
case 常量值2:语句体2;break;
                ...
default:语句体n+1;break
执行流程:
  • 首先计算出表达式的值
  • 其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束。
  • 最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束。
注意:一定要有break语句,要不然会进入后不出来的,程序只会遇到break才会停止case。在switch语句中,如果case的后面不写break,将出现穿透现象,也就是不会在判断下一个case的值,直接向后运行,直到遇到break,或者运行完整体switch结束。
2019-3-8 java基础篇第二天_第12张图片
图片.png
switch语句中,表达式的数据类型,可以是byte,short,int,char,enum(枚举),JDK7后可以接收字符

4.4循环语句for,while,do---while

  • for循环语句格式
for(初始化表达式①; 布尔表达式②; 步进表达式④){
              循环体
}
执行流程:
  • 执行顺序:①②③④>②③④>②③④…②不满足为止。
  • ①负责完成循环变量初始化
    -②负责判断是否满足循环条件,不满足则跳出循环
    -③具体执行的语句
    -④循环后,循环条件所涉及变量的变化


    2019-3-8 java基础篇第二天_第13张图片
    图片.png
  • while循环语句格式
初始化表达式①
while(布尔表达式②){
循环体③
步进表达式
}
执行流程
  • 执行顺序:①②③④>②③④>②③④…②不满足为止。
  • ①负责完成循环变量初始化。
  • ②负责判断是否满足循环条件,不满足则跳出循环。
  • ③具体执行的语句。
  • ④循环后,循环变量的变化情况


    2019-3-8 java基础篇第二天_第14张图片
    图片.png
  • do...while循环
初始化表达式①
do{
循环体③
步进表达式④
}while(布尔表达式②)

#######执行流程

  • 执行顺序:①③④>②③④>②③④…②不满足为止。

  • ①负责完成循环变量初始化。

  • ②负责判断是否满足循环条件,不满足则跳出循环。

  • ③具体执行的语句
    -④循环后,循环变量的变化


    2019-3-8 java基础篇第二天_第15张图片
    图片.png
  • for 和 while 的小区别:
    1.控制条件语句所控制的那个变量,在for循环结束后,就不能再被访问到 了,而while循环结束还可以继续使用,如果你想继续使用,就用while,否则推荐使用for。原因是for循环结束,该变量就从内存中消失,能够提高内存的使用效率。
    2.在已知循环次数的时候使用推荐使用for,循环次数未知的时推荐使用while
    两种跳出循环的方式:

  • break
    使用场景:
    主要用于终止switch或者循环

  • 在选择结构switch语句中

  • 在循环语句中

  • 离开使用场景的存在没有意义

  • continue
    使用场景:
    结束本次循环,继续下一次的,多用在for循环

注意:一定要在循环的时候设置出口,否则会死循环,例如你在while(true)这样永远无法跳出while循环

4.5嵌套调用

简单总结就是for循环里面还有一个for循环。

  • 嵌套循环格式
for(初始化表达式①; 循环条件②; 步进表达式⑦) {
      for(初始化表达式③; 循环条件④; 步进表达式⑥) {
            执行语句⑤;
      }
}
  • 嵌套循环执行流程:
  • 执行顺序:①②③④⑤⑥>④⑤⑥>⑦②③④⑤⑥>④⑤⑥
  • 外循环一次,内循环多次。

打印5*8的矩形

public static void main(String[] args) {
//5*8的矩形,打印5行*号,每行8个//外循环5次,内循环8次
for(int i = 0; i < 5; i++){
    for(int j = 0; j < 8; j++){
      //不换行打印星号
      System.out.print("*");
    }
//内循环打印8个星号后,需要一次换行
    System.out.println();
  }  
}

你可能感兴趣的:(2019-3-8 java基础篇第二天)