JavaSE第02篇:Java基础语法之变量、数据类型

本篇将会从上一篇的第一个Java程序开始,详细讲解Java的基础语法。

由于Java基础语法内容比较丰富,为了更加高质量的、有节奏的、阶段性的讲解,我们后续将会陆续展开多篇文章讲解。

本篇文章将会详细地主要讲解Java基础语法之常量变量数据类型数据类型转换

第一章:注释和关键字

在JavaSE第01篇时,我们写了第一个Java程序如下:

public class HelloWorld{
    public static void main(String[]args){
        System.out.println("Hello World!");
    }
}

接下来,我们将会认识到Java中的注释关键字

1.1-注释 (理解)

注释,顾名思义,就是解释。

就像我们学习文言文时,文言文的译文就是注释。

image

在编程中,注释对代码解释和说明文字,可以提高程序的可读性,因此在程序中添加必要的注释文字十分重要。

注意:程序在执行时,不会执行注释的内容。

Java中的注释分为三种:

  1. 单行注释
  2. 多行注释
  3. 文档注释(后续文章会详细讲解)

单行注释:单行注释的格式是使用 //,从 // 开始至本行结尾的文字将作为注释文字。

public class HelloWorld{
    public static void main(String[]args){
        // 在命令窗口,输出“Hello World”。 单行注释
        System.out.println("Hello World!");
    }
}

多行注释:多行注释的格式是使用/**/将一段较长的注释括起来。

public class HelloWorld{
    /*
        多行注释
        main方法
        这是java程序执行的入口
    */
    public static void main(String[]args){
        System.out.println("Hello World!");
    }
}

文档注释:档注释以 /** 开始,以 */ 结束。

关于文档注释,后续文章我们会详细讲解。

1.2-关键字 (理解)

关键字,顾名思义,具有特殊含义的字词

就像月光宝盒穿越时的咒语一样,只有念波若波若蜜这个咒语才能穿越有效 。

在编程中,我们使用编程工具编程时,可以发现有些代码的颜色比较别致,如publicclassstatic等,这些代码词就是关键字,它们是java程序中必须存在的字词,若缺失它们,代码将会无效。

在Java编程中,关于关键字,有很多,我们后续将会逐一的认识它们。

注意:关键字的字母全部小写。

第二章:常量和数据类型

万事万物,从程序的角度来看其实就是数据

比如:我们微信聊天发送的文字、图片、语音、视频等对于计算机来说就是数据,我们上网购物所看到的商品的价格、评论、数量等对于计算机来说也是数据,我们玩的游戏如“王者荣耀”或吃鸡中的游戏人物的皮肤、生命值、攻击力、武器等对于计算机来说也是数据。

image

2.1-常量 (记忆)

常量:计算机程序运行时不会被程序修改的量(数据)。

Java中的常量分类:

常量类型 说明 举例
字符串常量 双引号括起来字符(可以包含0个、一个或多个) 如:""、"HelloWorld"、"你好"
整数常量 整数数字 如:-2、0、10
小数常量 带有小数点的数字 如:3.14、99.9
布尔常量 布尔值,表示真假,有且仅有两个值true和false 如:true,false
字符常量 单引号括起来的一个字符 如:'1','a','好'
空常量 一个特殊的值,空值,值为null 如:null

除空常量外,其他常量均可使用输出语句直接输出。

public class Constant{
    public static void main(String[]args){
        // 字符串常量
        System.out.println("Hello World!");
        // 整数常量
        System.out.println(100);
        // 小数常量
        System.out.println(3.14);
        // 字符常量
        System.out.println('a');
        // 布尔常量 true也是关键字
        System.out.println(true);
        // 布尔常量 false也是关键字
        System.out.println(false);
        // 空常量 null 也是关键字,不能被输出,否则编译错误
        // System.out.println(null);
    }
}

2.2-数据类型(记忆)

数据类型,顾名思义,就是数据的种类。

数据为什么要区分类型呢?

因为它们有不同的特点,适用于不同的地方。我们可以根据不同的需要,而选择类型。

比如:

  • 我们在用程序表达一个人的身高、体重、拥有多少财富时,可以用整数或小数表示;
  • 我们用程序表达一个商品介绍时,可以用字符串来表示;
  • 我们在用程序表达一个判断时(比如:10大于4吗?),可以布尔值true或false来表达结果。
  • ......

在Java中数据类型有哪些?

Java是一个强类型语言,Java中的数据必须明确数据类型。在Java中的数据类型包括:

  1. 基本数据类型

  2. 引用数据类型

本篇文章我们先学习基本数据类型,后续我们会讲解引用数据类型。

计算机存储单元

我们知道计算机是可以用来存储数据的。

但是无论是内存还是硬盘,计算机存储设备的最小信息单元叫“位 (bit)”,我们又称之为“比特位”,通常用小写的字母”b”表示。而计算机中最基本的存储单元叫“字节(byte)”,

通常用大写字母”B”表示,字节是由连续的8个位组成。

除了字节外还有一些常用的存储单位,其换算单位如下:

  • 1B(字节) = 8bit

  • 1KB = 1024B

  • 1MB = 1024KB

  • 1GB = 1024MB

  • 1TB = 1024GB

Java中的基本数据类型

数据类型 关键字 内存占用 取值范围
整数类型 byte 1个字节 -128~127
short 2个字节 -32768~32767
int(默认) 4个字节 -2的31次方到2的31次方-1
long 8个字节 -2的63次方到2的63次方-1
浮点类型 float 4个字节 负数:-3.402823E+38到-1.401298E-45
正数: 1.401298E-45到3.402823E+38
double(默认) 8个字节 负数:-1.797693E+308到-4.9000000E-324
正数:4.9000000E-324 到1.797693E+308
字符类型 char 2个字节 0-65535
布尔类型 boolean 1个字节 true,false

注意:

  • e+38表示是乘以10的38次方,同样,e-45表示乘以10的负45次方。

  • 在java中整数默认是int类型,浮点数默认是double类型。

第三章:计算机的组成

3.1-本章介绍(了解)

为了更好地理解后续知识,我们需要简单了解计算机的组成部分,及一个程序从开发到运行的过程中,计算机的不同的硬件做了什么事情。

3.2-计算机的组成部分(了解)

计算机由两部分组成:

  • 软件
  • 硬件

软件

  • 系统软件
    • macOS
    • linux
    • windows
  • 应用软件
    • QQ
    • 微信
    • 浏览器
    • ...

硬件

计算机由很多硬件组成,其中包括有硬盘、内存、cpu、屏幕、摄像头等等。我们重点来了解以下硬件的作用:

  • 硬盘
    • 存储数据,长久存储数据,计算机关机或重启时,数据依然存在。
  • 内存
    • 存储数据,临时存放程序运行中的数据,计算机关机或重启时,内存中的数据会被释放。
  • cpu
    • 处理指令、执行操作、控制时间、处理数据,比如:计算 1 + 1,cpu会计算出结果 2

3.3-软件和硬件的关系(了解)

image

第四章:变量

4.1-为什么需要变量(理解)

需求:在命令窗口中连续输出10个数字6,实现代码如下:

public class HelloWorld{
    public static void main(String[]args){
        System.out.println(6);
        System.out.println(6);
        System.out.println(6);
        System.out.println(6);
        System.out.println(6);
        System.out.println(6);
        System.out.println(6);
        System.out.println(6);
        System.out.println(6);
        System.out.println(6);
    }
}

需求变更:将输出的数字6更改为数字7。

此时,我们会通常会把代码中10个地方输出的数字6更改为数字7。

问题:我们可以发现,这样操作比较麻烦(若有100个地方输出6,那岂不是要更改100个地方)。

分析:若能有一个暂存位置(标记),存放要输出的数字,若需要更改时直接修改暂存位置(标记)的数据即可。

image

我把这个暂存数据的位置称为变量

总结:在计算机中,程序运行需要对数据进行处理,而程序中的数据在运行时会存储在内存中,编程中需要频繁操作内存中的数据,为了方便操作,程序中需要通过变量名作为标识符来操作内存中相关的数据。

image

4.2-什么是变量(理解)

变量就是在内存中所分配给数据的一块空间。同时内存会为该空间指定一个内存地址。

程序中可以通过变量名操作内存中的数据,操作包括两方面。

  • 读取数据
  • 修改数据
image

为了便于理解,我们可以把内存理解为宾馆,把内存中的一块空间理解为一个房间,把房间里的物品理解为数据,把房间的门牌号理解为内存地址,把房卡理解为变量名。

必须用房卡,才能进出宾馆中的指定门牌号房间,使用房间里的物品。

image

4.3-变量的定义和使用(记忆)

定义变量

基本格式:数据类型 变量名 = 数据

public static void main(String[] args) {
        /* 基本格式:数据类型 变量名 = 数据 */;
        int age = 10;
        /* 其他格式: 先定义,后赋值 */
        int num1;
        num1 = 10;
        /* 其他格式:批量定义赋值 */
        int a = 10,b = 20,c = 30;
}

使用变量

使用方式:在程序中,直接调用变量名即可。可以通过变量名多次调用内存中数据。

public static void main(String[] args) {
        /* 定义变量 */;
        int age = 10;
        /* 调用变量 */
        System.out.println(age); // 输出结果:10
        System.out.println(age); // 输出结果:10
}

4.4-使用变量注意事项(记忆)

  1. 同一对花括号中,变量名不能重复。

  2. 变量在使用之前,必须初始化(赋值)。

  3. 定义long类型的变量时,需要在整数的后面加L(大小写均可,建议大写)。因为整数默认是int类型,整数太大可能超出int范围。

  4. 定义flfloat类型的变量时,需要在小数的后面加F(大小写均可,建议大写)。因为浮点数的默认类型是double, double的取值范围是大于flfloat的,类型不兼容。

public class Variable{
    public static void main(String[]args){
        //【常见问题1:变量使用之前未赋值】
        int a;
        // System.out.println(a); // 错误:在使用变量时,必须初始化变量值,变量必须赋值。
        a = 10;
        System.out.println(a);
        
        //【常见问题2:变量名不能重复】
        // boolean a = true;      // 错误:变量名已经定义
        // System.out.println(a);
        
        //【long类型数据值后加L】
        long num1 = 3333333333333333L;
        System.out.println(num1);
        
        //【float类型数据值后加F】
        float num2 = 3.14f;
        System.out.println(num2);
    }
}

4.5-标识符的命名规则和规范(记忆)

标识符是用户编程时使用的名字,用于给类、方法、变量、常量等命名。

Java中标识符的组成规则:

  • 由字母、数字、下划线“_”、美元符号“$”组成,第一个字符不能是数字。

  • 不能使用java中的关键字作为标识符。

  • 标识符对大小写敏感(区分大小写)。

Java中标识符的命名规范:

  • 小驼峰式命名:变量名、方法名首字母小写,从第二个单词开始每个单词的首字母大写。

  • 大驼峰式命名:类名每个单词的首字母都大写。

  • 另外,标识符的命名最好可以做到见名知意

第五章:数据类型转换

5.1-数据类型转换(理解)

自动转换(隐式)

  • 特点:不需要特殊的代码处理,会自动转换。

  • 规则:针对数字和字符,范围小的类型会自动转换为范围大的类型。

    • 代码:

      public static void main(String[] args) {
              /* 字节类型 */
              byte a = 10;
              /* 整型 */
              int b = a;
              // 结果:字节类型10会自动转换为int类型
      }
      

强制转换(显式)

  • 特点:需要特殊代码处理

  • 格式:(要转换的数据类型)数据

  • 代码:

    public static void main(String[] args) {
            /* 大范围数据无法自动转换为小范围数据 */
            // int a = 20;
            // byte b = a;  
            // 结果:编译错误
            
            /* 强制转换 */
            int a = 20;
            byte b = (byte)a;
            // 结果:转换成功
     }
    
  • 注意事项:

    • 事项:

      1. 强制转换可能会造成数据溢出。
      2. 强制转换可能会丢失精度。
    • 代码:

      public static void main(String[] args) {
              /* 数据溢出 */
              int a = 130;
              byte b = (byte)a;
              System.out.println(b);
              // 运行结果:-126
              // 原因:130超出了byte表示范围
      
              /* 丢失精度 */
              double pai = 3.14;
              int c = (int)pai;
              System.out.println(c);
              // 运行结果:3
              // 丢失了0.14
      }
      

5.2-其他注意事项(了解)

char类型的数据转换为int类型是按照码表中对应的int值进行计算的。比如在ASCII码表中,'a'对应97。

int a = 'a'; 
System.out.println(a); // 将输出97

整数默认是int类型,byte、short和char类型数据参与运算均会自动转换为int类型

byte b1 = 10; 
byte b2 = 20; 
byte b3 = b1 + b2; // 第三行代码会报错,b1和b2会自动转换为int类型,计算结果为int,int赋值给byte需要强制类型转换。 
// 修改为: int num = b1 + b2; // 或者: byte b3 = (byte) (b1 + b2);
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342