第2章 变量、数据类型、运算符

课程回顾

java虚拟机的内存结构图:
在这里插入图片描述

变量

变量的概念

计算机最初的功能是用来计算弹道导弹的飞行轨迹,二战期间,德国V2导弹威力很大;在运算过程中就会产生大量的中间过程数据,包括基础的数据也要存储到计算机才可以进行计算。问题:数据存储在哪里?

冯诺依曼计算机体系结构:
在这里插入图片描述

计算机计算过程中的数据存储在存储器: 内存;

输入设备: 键盘、鼠标、摄像头、麦克风

输出设备: 显示器、音响、打印机、投影仪等等

存储设备: 主存储器( 内存 ),辅助存储器( 硬盘、优盘、光盘、移动硬盘等等 )

处理设备: 中央处理器 CPU, 第一部分运算器,做算术运算、关系、逻辑运算;第二部分是控制器:控制计算机设备有序的运行。

我们在计算机计算过程中,程序运行过程中数据存储在内存中。
在这里插入图片描述

内存条是有大小的:4G内存、8G内存、16G内存等等。内存是空间的概念,4G内存相当于我们授课的地点: 海天假日酒店。我们在入住海天假日酒店的时候,其实就相当于数据入驻内存的过程。

数据存储入驻酒店
内存地址: 物理地址:0xAAff0000
变量名称 money: 空间的概念,哪一个物理地址
房间编号: 813房间
money = 1000;就是把1000这个数字存储到money位置入驻
1000 存储的数据入驻的旅客
数据的类型: 目的是合理的利用内存空间双人间、单人间、总统套房

C 语言是直接操作内存的,所以经常出现内存地址错误。

物理地址不容易记忆的,就像813房间的物理是哪里?上电梯—8楼—出电梯左拐-----再左拐----直走到尽头—左首边的房间。同理计算机中的物理地址也是不容易记忆的;我们可以定义一个逻辑地址,逻辑名称而已。

在计算机中,这个逻辑地址就成为变量名称。

酒店为什么分各种房间类型: 双人间、单人间、总统套房; 目的是合理的、高效利用空间。

计算机也是把数据进行了分类,目的合理的利用有限的内存空间。

变量的声明

如何向内存申请空间呢? 这就是变量的声明。

语法:

数据类型   变量名称  =  初值;  ---所有的符号都是英文的
数据类型   变量名称;          ---没有初值
数据类型   变量1,变量2,变量3;  ---我们一次申请3个房间

案例1:

public class Demo1{

    public static void main(String [] args){
        int money = 1000; //定义变量并赋值
        int age ;         //先定义变量
        age = 28;         //再赋值,特别是变量的值需要运算之后才知道具体数据
        int num1, num2, num3;//一次定义多个变量
        System.out.println("年龄:" + age);
       	
        money = money + 2000;//先从房间里去除1000,再加上2000放到房间里;3000
        System.out.println("工资:" + money);
    }

}

注意的问题: 变量在使用之前必须先赋值。

变量的命名规范

生活中我们的名字也不是随意定义的: 孔繁玉; 孔子第74代传人。

首字符: 孔是姓氏

第二个字符: 繁 我的辈分,孔繁森,孔令辉,我的孙子辈,孔祥熙我的儿子辈; 曾庆红,父辈

孔孟曾颜: 四个家族的辈分是一样的,孟子、颜回

第三个字符: 玉 名字;温润如玉。

但是在元朝末期,汉人是最低级的种族,朱元璋的小名朱重八、爸爸朱五四;爷爷朱初一、曾祖父朱四九;汉人都没有起名的权利。值得佩服的一个人,从一个农民、和尚奋斗到皇帝。

计算机变量的命名规范:

  • 首字符必须是字母
  • 剩余字符可以是字母、数字、下划线
  • 变量名称区分大小写 name和Name不一样
  • 变量名不能重复定义
  • 多个单词: 驼峰命名 shopEmployee
  • 望文生义:用对应的英语单词,不允许出现中英文混合的;jifen 积分;不允许

参考一本电子书: 阿里巴巴java开发规范。

数据类型

最简单的分类: 数值类型和非数值类型;

数值类型: 123,100,3.14

非数值类型: “abc” “白眉鹰王” “2020-07-16” “男” “女”

另一种分法:基本数据类型和引用数据类型
在这里插入图片描述

如下表是8种基本数据类型;每个数据类型的占用内存空间的大小和存储的范围如下:
在这里插入图片描述

最常用的: int表示整型数据类型,double表示浮点型类型,boolean布尔类型true、false

int表示的范围是21亿,但是如果存储马云的财富,int不够了;身价千亿这个必须使用Long长整型的。

1byte = 8 bit 8个二进制位: 01011111

1kb = 1024byte

1mb = 1024kb

1gb =1024mb

1tb =1024gb

1zb = 1024tb

1pb = 1024zb

基本数据类型

8种基本数据类型:

整型: byte,short,int,long

浮点型: float,double

字符类型: char

布尔类型: boolean

引用数据类型

引用数据类型包括三种

  • class定义的 String是引用数据类型
  • interface定义的接口类型
  • 数组 String[] args 是一个引用类型的数组。

运算符

赋值运算符

赋值运算符: = 表示的意思是把等号右边的数据赋值给左边的变量。

public class Demo2{

    public static void main(String [] args){
        //小明的成绩80,小强的成绩和小明的相同
        int ming = 80; //小明的成绩
        int qiang = ming;//把小明的成绩赋值给小强
        System.out.println("小明的成绩:"+ming);
        System.out.println("小强的成绩:"+qiang );
    }

}

算术运算符

  • 基本运算符:加 + 减 - 乘 * 除 / 余 %
  • 复合运算符: += 、 -= 、*=、/=、%=
public class Demo3{

    public static void main(String [] args){
        //需求: 河南医疗队去武汉支援抗疫 45 天;问:去了多少周零几天。
       int days = 45; //定义天数
       int weekOfDay = 7;  //定义一周几天

       int week = days / weekOfDay;
       int day  = days % weekOfDay;
       System.out.println("一共"+week+"周,剩余"+day+"天.");
    }

}

关系运算符

关系运算符是用来比较两个数;姚明的身高超过迪丽热巴 , 真的, 用true表示

老师的财富小于马云的财务: money < mayunMoney 结果true;

月亮的体积 > 地球的体积 假的, 用 false表示

//六种关系运算符
>  >=
<  <=
== !=

案例:

public class Demo4{

    public static void main(String [] args){
       double yaoHeight  = 2.26;//姚明的身高
       double rebaHeight = 1.70;//热巴的身高
       System.out.println("姚明身高大于迪丽热巴的身高: " + (yaoHeight > rebaHeight) );

       int moon = 3500;//月球的体积
       int earth = 8800;//地球的体积
       boolean result =  moon > earth;  //月球的体积大于地球的体积
       System.out.println("月球的体积大于地球的体积:" + result);
    }

}

逻辑运算符

三种运算符:

  • 逻辑与 && ;表示并且,必须所有的条件都是true结果才为true
  • 逻辑或 || ; 表示或者, 只要有一个条件为true;结果就是true
  • 逻辑非 ! ; 表示取反, true变成false, false变成true

案例:

public class Demo5{

    public static void main(String [] args){
        //大宝期末考试成绩,如果语文成绩大于90分,数学成绩100分,英语成绩大于95分奖励一个iPad
        int chinese = 83;
        int english = 96;
        int math    = 100;
        boolean b1 = chinese > 90 && math  == 100 && english > 95;  
        System.out.println("是否奖励iPad平板电脑:" + b1);

        //大宝期末考试成绩,如果语文成绩或者数学成绩或者英语成绩有一个100分奖励一个iPad
        boolean b2  = chinese == 100 || math == 100 || english == 100;
        System.out.println("是否奖励iPad平板电脑:" + b2);

        //取反操作
        boolean b3  = ! (chinese > 90);  // chinese <= 90
        System.out.println("语文成绩不大于90分:" + b3);
    }

}

三元运算符

三元运算符: 表达式1 ? 表达式 2 : 表达式3;

如果表达式1成立结果是表达式2的值,否则就是表达式3的值。

案例:

public class Demo6{

    public static void main(String [] args){
        //比较两个数的大小
        int num1 = 100; 
        int num2 = 90;

        int num3 = num1 > num2 ? num1 : num2;
        System.out.println("num1和num2中较大的数据是:" + num3);
    }

}

移位运算符

//语法
>> 右移位
<< 左移位
//移位操作的是二进制位。   

在这里插入图片描述

直接操作的是二进制位,效率最高的。

案例

package com.liqi.demo1;

public class Demo {
    public static void main(String[] args) {
        int num1 = 100;
        int num2 = 100 >> 2;
        System.out.println(num2);
        System.out.println(100 << 2);
        String s = Integer.toBinaryString(num1);//转换成二进制数
        System.out.println("100的二进制数据:"+s);
    }
}

总结运算符的优先级

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值