JavaSE基础——基础语法1:数据类型

JavaSE基础——基础语法1:数据类型

一、注释、标识符、关键字

  1. 注释

注释不会被执行,用于理解代码。

Java中注释有三种:

  • 单行注释:以//开头
  • 多行注释:以/*开头,以*/结尾,中间为多行注释内容。不能嵌套使用。
  • 文档注释:以/**开头,以*/结尾,配合Java.Doc使用,一般应用较少。

注释示例:

/*
程序:Hello World
日期:2021.02.17
作者:SHILIKNG
 */
//class类的名称要和文件名称一致,这里都是Hello
public class Hello {
    //public class static void 都是Java关键字
    public static void main(String[] args) {
        //输出一个hello world
        System.out.println("Hello World !");
        /*
        这是多行注释
        多行注释内容
        多行注释结尾
        */
    }
}
/**
 * 文档注释 
 * 文档注释与Java.Doc配合使用,使用较少
 * @Author:带功能的,可以被识别
 * @Description
 */
  1. 标识符及关键字

Java的所有组成部分都需要名字,类名、变量名以及方法名都被称为标识符。

  1. 不能用Java的关键字命名

  2. 所有的标识符都应该以字母(A-Z 或 a-z)、美元符($)或者下划线(_)开头。

  3. 首字符过后可以是大小写字母、美元符、下划线或数字等任何字符的组合

  4. 标识符是大小写敏感的。

  5. 可以使用中文或拼音命名,但不建议使用,可读性和通用性较差。

  6. 非法标识符举例:

    123abc(以数字开头)、-salary(以-开头)、#abc(以#开头)都是非法的

Java的关键字有:

abstractassertbooleanbreakbyte
casecatchcharclassconst
continuedefaultdodoubleelse
enumextendsfinal(最终值、不可改变的)finallyfloat
forgotoifimplementsimport
instanceofintinterfacelongnative
newpackageprivateprotectedpublic
returnstrictfpshortstaticsuper
switchsynchronizedthisthrowthrows
transienttryvoidvolatilewhile

二、数据类型

  1. 强类型语言与弱类型语言

  • 强类型语言

强类型定义语言,要求变量的使用要严格符合规定,所有变量必须先定义后使用

Java、.Net和C++等一些语言都是强制类型定义的,也就是说,一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个数据类型了

  • 弱类型语言

弱类型定义语言,与强类型定义相反,是一种变量类型可以被忽略的语言。

像VB,PHP等一些语言就属于弱类型语言。

//弱类型语言示例:
//VBScript是一种弱类型语言
a = '12' + 3 
//将字符串'12'和整数3进行连接,可以得到字符串'123',也可以将a看作整数123,不用进行显式类型转换
//其实a的类型没有变,VB的编译器智能地在白能量前加上了(int)或(clong)等类型转换关键字
  • 强类型语言和弱类型语言比较

强类型语言在速度上可能略逊色于弱类型语言,但是强类型语言带来的严谨性可以有效地帮助避免许多错误。

Java属于强类型语言。Java的数据类型分为基本类型和引用类型。基本类型包括整型、浮点型、字符类型、布尔类型四种。引用类型包括类、接口、数组等。

  1. 基本类型

基本类型包括整型、浮点型、字符类型、布尔类型四种。

2.1 整型

Java中整型的范围与运行Java的平台无关,是固定的。这与C++是不同的。

Java也没有无符号类型

  • byte:在内存里占8位,1个字节。表示范围为-128~127;
  • short:在内存里占16位,2个字节。表示范围-32 768~32 767;
  • int:在内存里占32位,4个字节。表示范围-2 147 483 648~2 147 483 647
  • long:在内存里占64位,8个字节。表示范围-9 223 372 036 854 775 808~9 223 372 036 854 775 807
2.2 浮点型
  • float:在内存里占32位,4个字节。
  • double:在内存里占64位,8个字节。
2.3 字符类型
  • char:在内存里占16位,2个字节。
2.4 布尔类型
  • boolean: 占1位,其值只有true和false两个值。
public class Demo01 {
    public static void main(String[] args) {
        //基本数据类型
        //整型
        int num1 = 10;      //最常用
        byte num2 = 10;
        short num3 = 30;
        long num4 = 30L;    //long类型的数字要在数值后面加上L
        //浮点型
        float num5 = 50F;   //float类型的数字要在数值后面加上F
        double num6 = 3.141592653589793238462643;   //浮点数默认是double型,因此float型需要在值的最后加F
        //字符型
        char name = 'A';
        char name2 = '中';
        //char name3 = '中国';    字符类型变量的值只能是一个字符
        //若需要多个字符一起,应该使用String,但String不是关键字,是类
        //布尔值
        boolean flag = true;
        //boolean flag = false;
        //一键格式化代码:Ctrl + Alt + L
    }
}
  1. 引用类型
3.1 类
3.2 接口
3.3 数组
  1. 数值类型转换

整型、浮点型、字符型数据可以混合运算,在运算中,不同类型的数据先转换位同一类型,然后进行运行算。因此,需要将一种数值类型转换为另一种数值类型。

各数值类型的级别如下:

低--------------------------------------------->高byte, short, char -> int -> long -> float -> double

转换说明:

  1. 不能对boolean类型的数据进行转换
  2. 不能把一种类的对象类型转换成不相关类的对象
  3. 由低级别到高级别的转换是可以自动进行的
  4. 由高级别到低级别的转换需要强制转换,强制转换语法为(目标类型)现有类型数据
  5. 转换过程中可能存在溢出(容量大的类型转为容量小的类型可能出现溢出)或精度丢失(比如int转向float或者浮点数转为整数)
  6. 由浮点数到整数的转换是通过舍弃小数得到的,而不是四舍五入。
//数值类型转换
public class Demo02 {
    public static void main(String[] args) {
        int num1 = 130;
        float num2 = 21;
        double num3 = 3.7;
        //强制转换后内存溢出
        byte num4 = (byte) num1; //由高级转向低级,使用强制类型转换
        System.out.println(num4);//由于byte的范围是-128~127,转换后将出现溢出
        System.out.println("------------------");
        //自动转换
        double num5 = num1;      //由低级转向高级,自动转换
        System.out.println(num5);
        System.out.println("------------------");
        //由浮点数向整数的转换
        System.out.println(num3);
        int num6 = (int) num3;
        System.out.println(num6);
        System.out.println((int)-3.2F);     //浮点数转向整数,采用的方式是去掉小数部分。不是四舍五入
        System.out.println((int)-45.8);
        System.out.println("------------------");
        //char类型的转换
        char c = 'a';
        System.out.println(c + 1);          //变量c的类型由char自动转换位int型
        System.out.println((char) (c + 1)); //由int转向char,强制转换
        System.out.println("------------------");
        //整数、浮点数的混合运算
        System.out.println(21.0 / 3);   //当有一个操作数为double类型,另一个数就会转换为double类型
        System.out.println(21f / 3);    //否则,当有一个操作数时float类型,另一个就会被转为float类型
        System.out.println(21L / 3);    //否则,当有一个操作数为long类型,另一个操作数就会被转为long类型
        System.out.println(21 / 3);     //否则,两个操作数都将被转为int型
        System.out.println("------------------");
        //操作比较大的数时的溢出问题
        int money = 10_0000_0000;       //java7的新特性,使用_作为数字的分割符,不影响数字的值
        int years = 20;
        int total1 = money * years;     //money和 years都是 int 型,结果也是int型
        System.out.println(total1);     //结果超出int表示范围,出现溢出
        long total2 = money * years;    //若仅是对结果选择long类型存储,结果还是溢出
        System.out.println(total2);     //原因在于两个int型计算结果仍是int,已经溢出了,然后才进行的类型转换
        long total3 = money * ((long)years);    //当有一个操作数为long时,结果就为long型
        System.out.println(total3);
    }
}
-------------------------
运行结果:
    -126
    ------------------
    130.0
    ------------------
    3.7
    3
    -3
    -45
    ------------------
    98
    b
    ------------------
    7.0
    7.0
    7
    7
    ------------------
    -1474836480
    -1474836480
    20000000000
  1. 扩展知识
5.1 字节
  • 位(bit):计算机内部数据存储的最小单位,11001100是一个八位二进制数。
  • 字节(byte):是计算机中数据处理的基本单位,习惯上用大写的B来表示。
  • 1 B(byte,字节) = 8bit(位)
  • 字符:指计算机中使用的字母、数字、字和符号。
    • 1 bit = 1 位;1 B = 8 bit;1 KB = 1024 B; 1 MB = 1024 KB; 1 GB = 1024 MB; 1TB = 1024 GB.
5.2 整数的进制

整数在计算机中有四种表示方式:二进制、八进制、十进制、十六进制。

一般为示区分,二进制表示时以0b0B开头,八进制以0开头,十进制最常用,正常书写。十六进制以0x0X开头。

public class Demo02 {
    public static void main(String[] args) {
        //整数扩展——进制
        //二进制以0b或0B开头标识;八进制以0开头标识;十进制正常书写;十六进制以0x或0X标识
        int i = 10; //正常书写,默认十进制
        int i1 = 010;   //以0开头,八进制书写
        int i2 = 0b10;  //以0b开头,二进制书写
        int i3 = 0x10;  //以0x开头,十六进制书写
        int i4 = 0x1a;  //十六进制中,0~9,10~15用a~f标识
        System.out.println(i);  //输出结果默认是十进值输出
        System.out.println(i1);
        System.out.println(i2);
        System.out.println(i3);
        System.out.println(i4);
    }
}
-----------------------------
运行结果:
    10
    8
    2
    16
    26
5.3 浮点数的精度

浮点数存在舍入误差,不能精确地表示数值。如果需要准确地表示数值,避免误差,应该使用JavaBigDecimal类。

最好完全避免使用浮点数进行比较!

public class Demo02 {
    public static void main(String[] args) {
        //浮点数扩展——精度丢失
        float f = 0.1F;                 //浮点数f为0.1
        double d = 1 / 10.0;            //浮点数d为0.1
        System.out.println(f ** d);     //实际相等,但输出false,表示结果不想等
        float d1 = 2222222222222222222f;//浮点数d1
        float d2 = d1 + 1;              //浮点数d1 + 1
        System.out.println(d1 ** d2);   //实际不相等,但输出结果为true,表示结果相等
        //浮点数存在舍入误差,不能精确地表示数值
        //如果需要准确地表示数值,避免误差,应该使用Java的BigDecimal类
        //最好完全避免使用浮点数进行比较!
        //最好完全避免使用浮点数进行比较!
        //最好完全避免使用浮点数进行比较!
    }
}
5.4 字符与字符编码

char类型用于表示单个字符。

对于字符的存储,计算机是采用字符的数值编码来实现的。不同系统有不同的数值编码集,比如美国的ASCII编码集、表示中文字符的GB118030编码等等。为了编码集的统一,出现了Unicode字集

Unicode字符集最开始是使用两个字节的数字来对字符进行编码,即有65536个字符的对应编码。Java采用的就是16位的Unicode字符集来表示字符。比如U+0041就是字母A的编码值。在JAVA中,char类型用UTF-16编码描述一个代码单元。

public class Demo02 {
    public static void main(String[] args) {
        //字符与字符编码
        //所有字符本质还是数字,Java使用Unicode字符集,每个字符编码使用2个字节(16)位存储
        char c1 = 'A';              //'A'表示一个字符,单引号括起表示字符,双引号括起表示字符串
        char c2 = '中';             //单引号和双引号是字符和字符串的书写形式
        System.out.println(c1);     //输出字符
        System.out.println((int)c1);//这里用到了类型转换,即将char类型转为int型输出,即得到了字符的编码值
        System.out.println(c2);
        System.out.println((int)c2);
        char c3 = '\u0061';         //\u0061表示是Unicode的编码值,这里以十六进制方式书写,和‘a’的含义等价
                                    //单引号的书写方式是字符编码值书写的简化,实际上是等价的
                                    //这里还用到了转义字符
        System.out.println(c3);     //输出字符
        System.out.println((int)c3);//输出字符的编码值
    }
}
-----------------------
运行结果:
    A
    6520013    //20013即中的字符编码值
    a
    97

对于上面程序中使用\u表示unicode代码单元的编码之外,还有一些不能通过键盘直接输入到程序中的字符。比如说直接敲击回车键并不能使字符串中包含一个换行符;比如要在字符串中使用单引号或者双引号(由于Java中已经定义了字符或字符串的书面书写用单引号或双引号,则字符串中的引号就会产生歧义)……

对于上述情况,可以使用转义字符。当使用到这些特殊字符时可以用对应的转义字符代替:

转义字符名称Unicode编码值
\b退格\u0008
\t制表符\u0009
\n换行符\u000a
\r回车\u000d
\“双引号\u0022
\‘单引号\u0027
\反斜杠\u005c
\f换页符\u000c
\u16进制Unicode字符

随着字符的扩展,现在的Unicode字符已经超过了655536个。16位的char类型已经不能满足需要。

Unicode的字符编码值(又称位代码点)分为17个级别,第一个代码级别是基本的多语言级别,代码点从U+0000~U+FFFF。其余十六个代码级别的代码点从U+10000~U+10FFFF,主要表示一些辅助字符。

UTF-16采用不同长度的编码来表示所有的Unicode代码点。对于基本的多语言级别,每个字符用16位表示,这16位通常被称为代码单元。对于辅助字符则采用一对连续的代码单元进行编码。

转载

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值