2021-03-23

Day02 数据类型、变量、操作符
1、数据类型
1.1、分类
在这里插入图片描述
1.2 整型案例
public class DT_01_Int {
/**

  • 十进制 : 非0开始
  • 八进制 : 0开始的数字
  • 十六进制 : 0x开始的数字
    • @Date 2021年3月23日
      */
      public static void main(String[] args) {
      // 使用int创建一个 32位大小的空间,并取名为 i_1 ,把29 放进去
      // 同域中,不能有相同的名字(同一个大括号中)
      int i_1 = 29;
      int i_2 = 027;
      int i_3 = 0xaf;
      // 向控制台打印数据,根据名字找到即可
      System.out.println( i_1 );
      System.out.println( i_2 );
      System.out.println( i_3 );

      // 这个123 是int类型,然后自动转换为 long类型
      // 因为 java中 整数 默认是整型int
      // 小数 默认是 双浮点 double
      long l_1 = 2147483647;
      // 这种 是直接创建long类型的值,不需要转换
      // 小写和大写的 L/l 都可以 建议大写,否则 l 和 1 不太好区分
      long l_2 = 9223372036854775807L;
      }
      }
      1.3 浮点型案例
      package _01_DataType;

/**

  • 小数默认是double

  • float声明方式,需要在值的后面追加 F/f

  • @Date 2021年3月23日
    */
    public class DT_02_Double {

    public static void main(String[] args) {
    // 1.4 就是double类型,不需要转换
    double d_1 = 1.41;

     // 强制类型转换为 float
     float f_1 = (float)1.42;
     
     // 直接赋值为 float类型的值 F/f
     float f_2 = 1.43F;
     System.out.println(d_1);
     System.out.println(f_1);
     System.out.println(f_2);
    

    }
    }

1.4 字符型案例
package _01_DataType;

/**

  • char是字符型,使用 ‘’ 英文单引号表示,有且只有一个数据

  • 占用2字节 16位 范围是 0~65535 没有负数

  • short 短整型 16位 -32768 ~ 32767

  • ASCII a 97 A 65 0 48

  • unicode 编码 \ uxxxx

  • 编码和解码不一致,就乱码

  • @Date 2021年3月23日
    */
    public class DT_03_Char {
    public static void main(String[] args) {
    char c_1 = ‘a’;
    char c_2 = ‘A’;
    char c_3 = ’ ';
    char c_4 = ‘中’;
    System.out.println(c_1);
    System.out.println(c_2);
    System.out.println(c_3);
    System.out.println(c_4);

     // 转移符, 把有意义字符串 转换为 无意义字符, 用 \ 表示 
     // 单引号中只能出现一个字符,那如果我们想用字符保存一个单引号 怎么办?
     // char c_5 = ''';
     char c_5 = '\'';
     char c_6 = '\\';
     System.out.println(c_5);
     System.out.println(c_6);
     
     // \r\n 换行, \s 空格 , \t 制表符 
     System.out.println('\r');
     System.out.println('\r');
     System.out.println('\t');
     
     // unicode编码
     char c_7 = '\u4E02';
     // /u4E00-/uFA29
     System.out.println(c_7);
    

    }
    }

1.5 布尔型案例
package _01_DataType;

/**

  • java中的boolean类型,值只有 true/false 不是 bool

  • 1 不能参与任何类型转换

  • 2 主要用于流程控制

  • 3 内存中,占用1字节, 0000 0000 表示false , 0000 0001 表示true

  • 4 布尔型表达式 : 结果为true/false的运算,比如 1 小于 2 结果为 true

  • @Date 2021年3月23日
    */
    public class DT_04_Boolean {

    public static void main(String[] args) {
    boolean flag = true;
    boolean flag1 = false;
    if(flag){
    System.out.println(“为真”);
    }else{
    System.out.println(“为假”);
    }
    }
    }

1.6 类型转换

/**

  • 1 boolean不参与转换

  • 2 低精度到高精度是自动转换,高精度到低精度是强制转换

  • 自动类型转换

  • byte -> short -> int -> long -> float -> double

  •  		 char ->
    
  • @Date 2021年3月23日
    */
    public class DT_05_DataChange {

    public static void main(String[] args) {
    byte b_1 = 123;
    short s_1 = 124;
    char c_1 = ‘c’;
    int i_1 = 88;
    long l_1 = 213;
    float f_1 = 1.5F;
    double d_1 = 1.4D;
    // byte -> short 可以
    short s_2 = b_1;

     // char -> short 不行
     // short s_3 = c_1;
    
     // short -> char 不行
     // char c_2 = s_1;
    
     // byte -> char 不行
     // char c_3 = b_1;
    
     // char -> int 可以
     int i_2 = c_1;
    
     // int -> char 不可以
     // char c_4 = i_1;
    
     // short -> int 可以
     int i_3 = s_1;
    
     // int -> long 可以
     long l_2 = i_1;
    
     // float -> long 不可以
     // long l_3 = f_1;
     // long -> float 可以
     float f_2 = l_1;
    
     // float -> double 可以
     double d_2 = f_1;
     
     // 强制转换,精度一定会丢失,数据可能出错,删除高位
     // (数据类型)
     int i_10 = 127;
     byte b_10 = (byte) i_10;
     System.out.println(b_10);
     // 0000 100000001
     }
    

    }

1.7 混合运算

/**

  • 1 boolean不参与转换

  • 2 低精度到高精度是自动转换,高精度到低精度是强制转换

  • 自动类型转换

  • byte -> short -> int -> long -> float -> double

  •  		 char ->
    
  • @Date 2021年3月23日
    */
    public class DT_05_DataChange {

    public static void main(String[] args) {
    // 混合运算,结果的类型为 运算中 最大的数据类型
    int result = 10 / 3 +1+‘c’;
    System.out.println(result);

     // 混合运算中, byte,short,int,char 四种中,任意一种或多种进行运算
     // 结果都是int
     byte b1 = 1;
     byte b2 = 2;
     short s1 = 1;
     char c1 = 'a';
     int result1 = b1+b2+s1+c1;
     
     // 小数问题,不要使用小数做判断
     double d1 = 0.1+0.2;
     // 0.30000000000000004
     System.out.println(d1);
    

    }
    }

  1. 变量和常量

2.1 常量/字面量/直接量
/**

  • 常量 : 在整个程序的生命周期中,值不可更改(从运行到结束)

  •  	1 final修饰的变量  final int i = 2;
    
  •  	2 字面量 也是常量,又叫直接量 , 比如直接打印 System.out.println(123)
    
  • 常量一般是 final 修饰的静态变量居多 , public static final int a = 2;

  • @Date 2021年3月23日
    */
    public class Var_01 {

    public static void main(String[] args) {
    final int i = 2;
    // final 修饰 不可更改
    // i = 3;
    System.out.println(i);
    // 直接量 不可更改(运行时)
    System.out.println(12345);
    }
    }

2.2 变量
package _02_Var;

/**
*

  • 变量 : 有名字的内存空间,可以通过名字找到它,更改它,访问它

  • 变量目的 : 通过名字即可找到,操作方便,可以重复使用

  • 变量声明 : 两步 数据类型 变量名;

  • 变量定义 : 三步 数据类型 变量名 = 值;

  •  数据类型划分内存空间,命名,赋值
    
  • 变量分类 :

  •  局部变量 : 方法中声明的变量
    
  •  静态成员变量 : 类体中使用static声明的变量
    
  •  成员变量 : 类体中没有static声明的变量
    
  • @Date 2021年3月23日
    */
    public class Var_02 {
    // 静态
    static int a = 2;
    // 成员
    int b = 3;

    public static void main(String[] args) {
    // 局部
    int i = 2;
    System.out.println(i);

     // 必须先声明 后使用
     // System.out.println(i1);
     int i1 = 2;
     int a;
     // 局部变量 没有默认值,不赋值 不能使用
     // System.out.println(a);
     
     // 同时声明多个变量
     int c=1,d=2,e=3;
    

    }
    }

2.3 命名规则
强制 : 大小写字母,数字,下划线,美元符号,数字不能开头,不能使用关键字和保留字
非强制 : 驼峰命名法,望文知义

文件名,变量名,方法名,类名,包名(文件夹名) 一切需要我们命名的地方,都要符合这个规则
2.4 作用域
/**

  • 一个 {} 就可以理解为一个独立的作用域

  • 变量向上找 第一个包含它的大括号 就是它的作用域

  • @Date 2021年3月23日
    */
    public class Var_03 {
    public static void main(String[] args) {
    int a = 1;
    if (true) {
    int i = 2;
    // 因为外面已经有了a了,并且a的作用域 在这里可以访问到
    // int a = 1;
    System.out.println(i);
    System.out.println(a);
    }
    // if 中的i 作用域 就在if中,这里访问不到
    // System.out.println(i);

     // 因为if中的i的作用域在if中,对于这里 等于是没有i的,所以可以再声明一个i
     int i = 22;
     System.out.println(i);
     System.out.println(a);
    

    }
    }

2.5 静态变量
/**

  • 静态变量 : 类体中,方法外 用static 修饰的变量 是静态变量

  • 有默认值,可以和局部变量同名

  •  整型 : 0  , 浮点 : 0.0 , 布尔型 : false , 字符型 : \u0000
    
  • 调用静态变量 : 变量所在的类名.静态变量名 , 如果调用当前类中的静态变量,类名可以省略

  • 如果和局部变量同名,则在该方法中,局部变量优先级高于静态/成员变量

  • @Date 2021年3月23日
    */
    public class Var_04 {
    static int age = 18;

    int xxxx = 2;

    public static void main(String[] args) {
    System.out.println(Var_04.age);
    System.out.println(age);
    int age = 20;
    // 同名 局部变量优先级高
    System.out.println(age);
    // 可以使用类名来区分同名的局部变量和静态变量
    System.out.println(Var_04.age);
    }
    }

  1. 操作符
    3.1 算符运算符
  • , - , * , / , %
    ++ , – 优先级 大于加减乘除
    单目 > 双目 > 三目
    public class Operator_01 {

    public static void main(String[] args) {
    // 局部变量
    int a = 10, b = 3;
    System.out.println(a + b);
    System.out.println(a - b);
    System.out.println(a * b);
    System.out.println(a / b);
    System.out.println(a % b);

      // ++ : 把空间中的值取出, +1 后,再放回去
      int k = 100;
      // k = k + 1;
      k++;
      // k++ 和 ++k 如果都是单独出现的(不参与混合运算),没有任何区别
      ++k;
      System.out.println(k);
    
      // 初始化为100
      k = 100;
      //++在变量前面时,先做运算后赋值
      // ++在变量后面时,先做赋值后运算
      // k = k++ + 1;
      k = k++ + k;
      System.out.println(k);
    
      int w = 10;
      w = w++ * w;
      System.out.println(w);
    
      int x = 10;
      int y = ++x + 1;
      // 12
      System.out.println(y);
      // 11
      System.out.println(x);
    
      int p = 2;
      p = 2 + p++ + ++p + p++ + ++p;
      // p = 2 + 2 + 4 + 4 + 6; p = 6
      System.out.println(p);
    
      int z = 10;
      z = 10 + z++ + ++z + (10 * z++) + ++z;
      // z = 10 + 10 + 12 +(10*12) + 14; z = 14
      // 166
      System.out.println(z);
      
      byte b1 = 1;
      b1++;
      b1 = (byte) (b1+1);
      System.out.println(b1);
    

    }
    }

3.2 位运算符
/**

  • 位运算符 :

  •  &  位与 , 两把都为true,结果才是true
    
  •  | 	位或 ,一边为true,结果就是true
    
  •  !	位非,取反,真就是假,假就是真
    
  •  ^	位异或,两边不一样 就是true
    
  •  && 短路与,且
    
  •  ||  短路或
    
  •  ~ 按位非 , 比如 0 ,二进制是 0000 0000  ~0 之后 就是 1111 1111(补码 ) 1111 1110 (-1 反码)  1000 0001 (取反 源码)
    
  •  >> 右移运算(考虑符号位,符号位不变) 8 >> 3,最右边删除以为,最左边补 符号位(正数补0,负数补1)
    
  •  		8/2^3
    
  •  << 左移运算(考虑符号位,符号位不变) , 同上, 8 << 3  = 8 * 2^3
    
  •  >>> : 右移运算(不考虑符号位),正数 和 >> 一样,  负数也是最左边补0(不考虑符号位)
    
  • @Date 2021年3月23日
    */
    public class Operator_02 {

    public static void main(String[] args) {
    // 如果 & 两边是数字,转换为二进制,然后每位进行比较,都是1,取1,都是0,取0,不一样取0
    // 与运输 结果不会超过两个数中的最小的一个
    // 1000 1010 , 1,0,0,0
    System.out.println(8 & 10);
    // false
    System.out.println( 1<2 & 2>3);
    // true
    System.out.println( 1<2 | 2>3);
    // false
    System.out.println(!true);
    // true
    System.out.println(true ^ false);
    // false
    System.out.println( 1<2 && 2>3);
    // true
    System.out.println( 1<2 || 2>3);
    // 测试 && 和 &
    int a = 10, b = 10;
    boolean flag = a > b && a>b++;
    System.out.println(b);

     System.out.println(~1);
     System.out.println(-1 >>> 1);
    

    }
    }

3.3 关系运算符
/**

  • 关系运算符,返回都是boolean(true/false)

  • , < , >= , <= , == , !=

  • == : 基本类型 比较值,引用类型 比较地址

  • @Date 2021年3月23日
    */
    public class Operator_03 {

    public static void main(String[] args) {
    int a = 10 , b = 11;
    System.out.println(a == b);
    System.out.println(a >= b);
    System.out.println(a > b);
    System.out.println(a <= b);
    System.out.println(a < b);
    System.out.println( a != b);
    }
    }

3.4 赋值运算符
/**

  • 赋值运算符

  • = : 右边的赋值给左边

  • += : 左边和右边相加,再赋值给左边

  • /= : 左边除以右边,结果赋值给左边

  • -=

  • *=

  • %=

  • i++ ; 等价于 i = i +1;

  • i+=2 ; 等价于 i = i + 2;

  • 虽然是等价关系,但是 ++ 和 += 这些 会进行自动强制类型转换,比如 i 是byte类型,则 i+1 结果为int类型, i = i+1需要强制类型转换

  • 而 ++ 和 += 就不需要强制类型转换,数据该出错还是出错,就等于帮我们自动强制转换了而已

  • @Date 2021年3月23日
    */
    public class Operator_04 {

    public static void main(String[] args) {
    int a = 10;
    a += 10;
    // 20
    System.out.println(a);
    a -= 5;
    // 15
    System.out.println(a);
    a *= 5;
    // 75
    System.out.println(a);
    a /= 15;
    // 5
    System.out.println(a);
    a %= 2;
    // 1
    System.out.println(a);

     byte b1 = 127;
     // 报错 需要强制转换 , 因为 byte,short,char,int 任意一种或多种进行运算,结果都是int值
     // b1 = (byte)(b1 +1) ;
     // 虽然数据还是会出错,但是不用强制转换了
     b1++;
     b1+=2;
     System.out.println(b1);
    

    }
    }

3.5 字符串拼接符
/**

  • 字符串拼接符 : + ,用于把多个字符串拼接成一个字符串

  • 只要左右有一个字符串,则 + 就是字符串连接符

  • 若两边都是数字,则+为 加和运算

  • @Date 2021年3月23日
    */
    public class Operator_05 {

    public static void main(String[] args) {
    // 字符串类型
    String name = “张三”;
    System.out.println(name);
    int a = 10;
    int b = 11;
    System.out.println(“a+b=”+a+b);
    System.out.println(“a+b=”+(a+b));
    System.out.println(a+"+"+b+"="+(a+b));
    }
    }

3.6 三目运算符/三元运算符
/**

  • 三目运算符又叫三元运算符

  • 语法 : boolean表达式 ? 真语句 : 假语句;

  • boolean表达式 : 运算结果为boolean类型即可

  • @Date 2021年3月23日
    */
    public class Operator_06 {

    public static void main(String[] args) {

     int a = 5;
     int b = 4;
     int c = a++ - --b * ++a / b-- >> 2 % a--;
     // int c = -2 >> 2; a=6 b=2
     System.out.println(c);
    
     int i = 1 < 2 ? 1 : 2;
     System.out.println(i);
    
     if (1 < 2) {
     	i = 1;
     	// 可以写任何代码
     } else {
     	i = 2;
     }
    

    }
    }

3.7 优先级

  1. 流程控制
    4.1 顺序结构
    正常编码,从上往下,从左到右执行即可

4.2 分支结构
根据业务逻辑,某些代码在某种情况下执行
或者是根据不同的情况执行不同的代码
技术栈 : if…else … switch

4.2.1 If
4.2.1.1 单分支

/**

  • 单分支 :

  •  有不执行情况,比如boolean表达式为false
    
  •  if( boolean表达式 ){
    
  •  	java代码;
    
  •  } 
    
  • @Date 2021年3月23日
    */
    public class IF_01 {

    public static void main(String[] args) {
    // 又不执行情况
    if(1>2){
    System.out.println(“原来1小于2”);
    }
    }
    }
    4.2.1.2 双分支
    /**

  • 双分支,有且只有一个分支执行

  •  if( boolean表达式 ){
    
  •  	为真的代码;
    
  •  }else{
    
  •  	为假的代码;
    
  •  }
    
  • @Date 2021年3月23日
    */
    public class IF_02 {

    public static void main(String[] args) {
    if (1<2) {
    System.out.println(“原来1小于2”);
    }else{
    System.out.println(“原来1大于2”);
    }
    }
    }

4.2.1.3 多分支
/**

  • 多分支 : 只会有一条分支执行,有一条执行之后,整个分支结束

  • 1 有不执行情况

  •  	if( boolean表达式 ){
    
  •  		真语句;
    
  •  	}else if( boolean表达式 ){
    
  •  		真语句;
    
  •  	}else if(......){
    
  •  	}
    
  • 2 没有不执行情况

  •  	if( boolean表达式 ){
    
  •  		真语句;
    
  •  	}else if( boolean表达式 ){
    
  •  		真语句;
    
  •  	}else if(......){
    
  •  	}else{
    
  •  	}
    
  • @Date 2021年3月23日
    */
    public class IF_03 {

    public static void main(String[] args) {
    int a = 2 ;
    int b = 3;
    // 多条分支符合条件,也只有一条执行(最先符合条件的执行)
    // 都不符合条件,则都不执行,所以有不执行情况
    if (b < a) {
    System.out.println("===");
    }else if (b <= a) {
    System.out.println("—");
    }

     // 如果以else结尾 能够保证必须有一条分支执行
     if (b < a) {
     	System.out.println("===");
     }else if (b <= a) {
     	System.out.println("---");
     }else{
     	System.out.println("..............");
     }
    

    }
    }

4.2.1.4 特殊情况
public class IF_04 {

public static void main(String[] args) {
	
	// 若 分支只有一条语句,则{} 可以省略
	if (true)
		System.out.println("1111");
	
	if(true)
		System.out.println(222);
	else
		System.out.println("111111");
	
	if(true)
		System.out.println(222);
	else if(false)
		System.out.println("111111");
	else if(false)
		System.out.println("=========");
}

}

4.2.2 Switch
4.3 循环结构
重复执行某些代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值