• 02 数据类型_变量_运算符_表达式


    1.2 八大基本数据类型

    Java是一种强类型语言,每个变量都必须声明其类型。

    为什么存在字符集?什么是字符编码?

    计算机只认识0/1 => 请问字符‘h’如何存在到计算机中。

    比如 0110 0001=> ‘a’

    ascii => 把英文 <=> 二进制代码

    1010 => 中

    gbk字符集,包含了简体、繁体中文,目前的主流win7/win10都是gbk编码。

    1.3 进制转换

    【1】 二进制->十进制
    1 0 1 0 => 0*20+1*21+0*22+1*23

    6 1 2 0 => 0*80+2*81+1*82+6*83

    【2】 十进制->二进制

    1.4 八大数据类型 

    1.4.1 整

    三种表示法

    十进制 990

    八进制 0开头的数字 015017

    十六进制 0x开头的数字 0x150x0

     

    整形根据其内存的长度又细分为byteshortintlong

    byte 占用内存8二进制位(bit),一个字节

     

    一个字节最小的数 0000 0000 => 0

    一个字节最大的数是 1111 1111 => 255

    ð 一个字节表示的数据分为是[0,255]可以表示256状态。

     

    short 内存中的2字节 => [0,216-1] => [0,65535] =>[-32768-32767]

    Java语言的整型常数默认为int型,声明long型常量可以后加L

    1.4.2 浮点型

    浮点型表示小数浮点型根据其精度分为单精度(float双精度类型(double).

    单精度可以精确到6-7位

    双精度可以精确到15-16位。

     

    两种表示法(C)


    浮点数值默认为double类型。要将其变为float类型,需要在后面增加F/f.    如:  3.14F(As)

    浮点型注意(A)

    [1]浮点数存在舍入误差 1.0计算机中可能0.99999999999999898.. 

    [2]浮点型不能用于比较  1.0 不一定等于 1.0 、0.1f 不一定等于 1.0/10

    1.4.3 字符型

    [1]通过单引号(’’)起来的单个字符char表示;通过双引号(“ ”)起来的单个或者多个字符称为字符串,String表示。

    [2] char 类型用来表示在Unicode编码表中的字符,2个字节。

    问题:搞清楚字符集和字符编码的关系?

    char类型也可以用于存储转义字符

    \n \r区别

    \n 换行

    \r 把光标调至行首

    1.4.4 Boolean 布尔类型

    Boolean类型表示两种状态,一种是true表示真,一种是false表示假,主要用于逻辑判断。

    Boolean类型用一个二进制位存储可以。

    1.5 变量

    1.5.1 变量概念和内存表现

    程序运行过程中,值可以发生变化的量。变量本质上是一块内存空间。

    public class Test02{
    
    public static void main(String[] args){
    
    // 需求:求一年后的收入
    
    int money;
    
    money = 1000;
    
     
    
     
    
    // 利率 声明和赋值合二为一。
    
    double rate = 0.05;
    
    double result = 0.0;
    
     
    
    // 表达式的计算
    
    result = money + money * rate;
    
    System.out.println(result);
    
     
    
    }
    
    }

     

    1.5.2 变量的声明

    [1]声明变量

    [2]赋值。声明和赋值可合二为一

    [3]使用变量

    public class Test03{
    
    public static void main(String[] args){
    
     
    
    float score = 98.5f;
    
    String name = "张三";
    
    char gender = '男';
    
     
    
    System.out.println(score);
    
    System.out.println(name);
    
    System.out.println(gender);
    
     
    
    }
    
    }

    标识符的命名规则

    [1]变量名可以由字符、数字、_、$组成

    [2]首字母不能是数字。

    [3]不能java关键字

    变量命名的规范:

    [1] 驼峰命名法。首字母小写,后续具有单个意义的单词首字母大写。

    [2] 见名知意。

    1.6 局部变量和实例变量

    1.6.1 局部变量

    局部变量在方法或者在语句块({})声明的变量统称为局部变量

     

    java是强类型语言,存在作用域(scope)概念,

    [1]作用域用{}表示。一个{}就是一个独立的作用域。作用域可以嵌套。

    [2]如果要访问一个变量,首先在该变量所在作用域查找,如果找不到,查找该作用域的父作用域依次类推,直到找到为止。在查找的过程中形成了一个链,这个链称为作用域链(scope chain)

    局部变量一定要先声明后初始化

     

    1.6.2 实例变量

    实例变量: 方法外部、类的内部定义的变量

    实例变量如果不自行初始化,他会自动初始化成该类型的默认初始值。

    八大基本数据类型的默认值

    数值型变量初始化成00.0

    字符型变量的初始化值是16位的0

    布尔型默认是false

    1.7 常量

    程序运行过程中,值可以发生变化的量。常量本质上是一块内存空间。常量final修饰。

    只能被初始化一次!

    public class Test07{
    
    public static void main(String[] args){
    
    // 常量的声明
    
    //final int count = 53; // 只能在此初始化一次。
    
    //count = 60;
    
     
    
    final int count;
    
    count = 53;
    
     
    
    System.out.println(count);
    
    }
    
    }

    什么时候使用常量呢? 

    常量用于声明一个固定的值。final float pi = 3.14;

    需求:求半径5的圆的面积

    public class Test08{
    
    public static void main(String[] args){
    
    int r = 10;
    
    final double PI = 3.14;
    
     
    
    double area = 0.0;
    
    area = PI * r * r;
    
    System.out.println(area);
    
    }
    
    }


      

    标识符命名规范

    所有变量、常量、方法、类名:见名知意

    变量、方法名:

    首字母小写和驼峰原则

    run(), runRun(),  age     ageNew   monthSalary

    常量:

    大写字母和下划线:MAX_VALUE

    类名:

    首字母大写和驼峰原则:  Man, GoodMan

    1.8 运算符

    1.8.1 赋值运算符

    变量  =         => 右边的值赋值给变量表示的内存空间。

    int count = 10;

    1.8.2 算术运算符

    +-*

    /  整除。如果/运算符两边的表达式是整数,结果一定是整数。如果/两边的表达式有一个为浮点数,结果就是浮点数。

    %  求/ a % b 表示求a/b的余数。

    public class Test10{
    
    public static void main(String[] args){
    
     
    
    int a = 3;
    
    int b = 10;
    
    int c = a % b; //
    
     
    
    // 需求:
    
    int ts = 12764; // 单位是s => _时_分_秒
    
    /*
    
    int h = ts / 3600;
    
    int m = (ts - h * 3600) / 60;
    
    int s = ts - h*3600 - m*60;
    
    System.out.println(h);
    
    System.out.println(m);
    
    System.out.println(s);
    
    */
    
     
    
    int h = ts / 3600;
    
    int m = ts % 3600 / 60;
    
    int s = ts % 60;
    
    System.out.println(h);
    
    System.out.println(m);
    
    System.out.println(s);
    
     
    
    // %谁就一定不会超过谁
    
    }
    
    }


    ++--: 

    a++/a--:a先参与运算,运算完成后自加/1

    public class Test11{
    
    public static void main(String[] args){
    
     
    
    int a = 10;
    
    // a++;
    
     
    
    // int b = a++;
    
     
    
    int b = a++ + a++;
    
     
    
    System.out.println(a);
    
    System.out.println(b);
    
    }
    
    }

      

    ++a/--a:a在参与运算前就自加/1

    public class Test12{
    
    public static void main(String[] args){
    
     
    
    int a = 10;
    
    //++a;
    
     
    
    // int b = ++a;
    
     
    
    // int b = ++a + ++a;
    
     
    
    System.out.println(a);
    
    System.out.println(b);
    
    }
    
    }


    1.8.3 关系
    运算符 

    > >= < <= == !=

    关系运算符的结果是true或者false

    1.8.4 逻辑运算符

    &&(与) 并且

    两边的表达式必须为boolean,表达式运算结果也是boolean值。

    运算法则

    t && t => t

    t && f => f

    f && t => f

    f && f => f

    总结:&& 两边的表达式只要有一个为false,结果为false

    && 是短路运算,如果第一个表达式为false,第二个表达式不做任何运算。

    public class Test14{
    
    public static void main(String[] args){
    
     
    
    int a = 20;
    
    int b = 10;
    
     
    
    boolean r1 = (a<b) && (++a == 21);
    
    System.out.println(a);
    
    }
    
    }

      

    ||(或) 或者

    两边的表达式必须为boolean,表达式运算结果也是boolean值。

    运算法则

    t || t => t

    t || f => t

    f || t => t

    f || f => f

    总结:|| 两边的表达式只要有一个为true,结果为true

    ||是短路运算,如果第一个表达式为true,第二个表达式不做任何运算。

    !()  取反

    !t = f

    !f = t

    1.8.5 位运算符(C)

      &|^~ >><<>>> 运算符都应用于二进制位的运算

    & 位 

    1 & 1 = 1

    1 & 0 = 0

    0 & 1 = 0

    0 & 0 = 0

    1011

    & 1001

    -----------

    1001

    | 位或

    1 | 1 = 1

    1 | 0 = 1

    0 | 1 = 1

    0 | 0 = 0

    1011

    | 1001

    -----------

    1011

    >> n 右n,左边0填充

    << n,右边0填充

    10 => 0000 1010 >> 2 => 000000 10 => 2

    10 => 0000 1010 << 2 => 0010 1000 => 40

    1位 相对于除以2

    1位 相对于乘以2

    1.8.6 三目条件运算符

    public class Test16{
    
    public static void main(String[] args){
    
     
    
    // 求两个数大小
    
    // (boolean)? m : n
    
    int max = 0;
    
    int a = 10;
    
    int b = 20;
    
     
    
    max = (a>b)?a:b;
    
    System.out.println(max);
    
    }
    
    }


    1.8.7 拓展
    运算符 

    += -= *= /= %=
    a += n => a=a+n;  => 步

    a -= n => a=a-n;  => 步

    a *= n => a=a*n;  => 倍

    a /= n => a=a/n;  =>

    a %= n => a=a%n;

    1.8.8 字符串连接符

    + 有两层含义

    如果表达式都是数值类型,进行加法运算。

    如果表达式有一个为字符串,进行字符串连接运算。

    1.8.9 运算符优先级

    多个运算符组合运算时,一定搞清楚谁先进行运算?

    总结

    [1] ()优先级最高

    [2] 赋值运算符优先级最低

    [3] 只要想让谁先计算,加().

    [4] 运算符有运算方向,赋值运算符从R to L.

    1.9 控制台输入A)

    // 【1】导包
    
    import java.util.Scanner;
    
    public class Test02{
    
    public static void main(String[] args){
    
    // 【2】创建一个控制台输入对象
    
    Scanner sc = new Scanner(System.in);
    
    System.out.println("请输入java成绩:");
    
    // 【3】接收用户输入的整数
    
    int javaScore = sc.nextInt();
    
    System.out.println("java score:"+javaScore);
    
    }
    
    }

      

    1.10 类型转换

    1.10.1 自动类型转换

    程序中,存在

    [1] 容量小的数据类型可以自动转换为容量大的数据类型.

    [2] 类型相兼容(数值型,char和整形相兼容) => 字符本质上整形

     
    
    public class Test05{
    
    public static void main(String[] args){
    
    // 可以编译
    
    double a = 10.0f;
    
    System.out.println("a="+a);
    
     
    
    byte b = 10;
    
    int c = b;
    
    System.out.println("c="+c);
    
     
    
    // 特殊情况1:尽量规避
    
    int d = 20;
    
    float e = d;
    
    System.out.println("e = " + e);
    
     
    
    // 特殊情况2:整数-> 自动转化成char类型
    
    char f = 'a';
    
    System.out.println(f);
    
     
    
    // 不能发生自动类型转换
    
    int i = "aaaa";
    
    }
    
    }

    jvm类型转化的优化 

    可以将整型常量直接赋值给byte, short, char等类型变量,而不需要进行强制类型转换,只要不超出其表数范围

    byte a = 200;

    表达式计算结果类型自动转换(偏移)

    1.10.2 强制类型转换

    java中可以把一个数据类型强制转换成另外一个数据类型。在转换过程可能存在精度丢失丢失信息。

    public class Test06{
    
    public static void main(String[] args){
    
     
    
    // 丢失精度
    
    float pi = 3.14f;
    
    int a = (int)pi;
    
    System.out.println("a = " + a);
    
     
    
     
    
    char c = 'a';
    
    char d = (char)(c + 1);
    
    System.out.println("d = " + d);
    
     
    
    // 丢失信息
    
    int e = 300;
    
    byte f = (byte)e;
    
    System.out.println("f = "+f);
    
    }
    
    }

    注意:

    强制类型转换使用过程中,一定要规避丢失信息的情况

    本文作者:___mouM
    声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。
    版权说明:本文版权归作者和博客园共有,欢迎转载。但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利.
  • 相关阅读:
    手动封装 时间选择器(只显示时分)
    页面跳转问题-button 确定提交按钮
    java String类型转 java.sql.time类型
    Mysql 时间处理
    微信-商城商品的图文/商品链接分享(后台数据合成图片+二维码生成)
    np.nan 1.0 2.0 df.apply
    pandas math.isnan
    df.apply
    pandas多条件行数据筛选
    pandas cumsum/sum calc percentage
  • 原文地址:https://www.cnblogs.com/aknife/p/10784289.html
Copyright © 2020-2023  润新知