Java基础整理--Java标识符、数据类型与字符编码

本文在接着上文介绍完Java简介相关的知识点后,介绍Java基础中的标识符、变量与数据类型等基础内容。

前言

  1. javadoc注释
    java中的注释有三种,分单行注释,普通多行注释和javadoc注释。单行注释和普通多行注释不用多说,javadoc注释是比较专业的注释,该注释会被javadoc.exe工具解析提取并生成帮助文档。
    /**
     * javadoc注释
     * javadoc注释
     * javadoc注释
     * @param args
     */
  1. 类体和方法体
    类体为类中的用 {} 括起来的部分,方法体为方法中的用 {}括起来的部分
  2. 程序入口
    在一个Java文件中可以定义多个Class,并且不一定非要有public class;但若定义了一个public class则该类名要和文件名相同,并且只能有一个public class;在该文件的每个class中都可以编写main方法,都可以设定程序入口,要执行x.class中的main方法,则执行java x;在多个类中,要运行某一个类,则该类中必须有一个程序入口,即main函数

标识符

  1. 什么是标识符?
    在java源程序中,凡是程序员有权利自己命名的单词都是标识符。
    标识符在EidtPlus编辑器当中以黑色字体高亮显示
  2. 标识符可以标识什么元素?
    类名、方法名、变量名、接口名、常量名…
  3. 标识符的命名规则
    注意:命名规则是语法,不按语法来编译器会报错
  • 只能以“数字、字母、下划线、美元符号”组成
  • 不能数字开头
  • 严格区分大小写
  • 关键字不能做标识符
  • 理论上无长度限制,但最好不要太长
  1. 标识符的命名规范
    注意:规范不属于语法,没有遵循规范编译器不会报错,但在实际开发中也是必须遵循的
  • 命名遵循“见名知意”的原则,如,String username, password
  • 遵守驼峰命名方式,如,UserService,CustomerService
  • 类名、接口名首字母大写,后面每个单词首字母大写
  • 变量名、方法名首字母小写,后面每个单词首字母大写
  • 常量名:全部大写

字面值

  1. 什么是字面值?
    字面值就是数据,数据在显示世界中是分门别类的,在计算机编程语言当中也是有类别的,包括整数型字面值(10,100),浮点型字面值(3.14),布尔型字面值(true, false),字符串型字面值(“abc”, “中国人”),字符型字面值(‘A’, ‘人’)
    在这里插入图片描述
  2. 字面值占用的内存空间
    相同的字面值占用不用的内存空间,因此后面引出了变量的概念,在变量中内存空间得到重复的使用。

变量

  1. 分类
    成员变量:方法外、类的内部定义的变量
    局部变量:方法或语句块内部定义的变量
  2. 变量声明和使用
    对于局部变量而言,必须先声明,再赋值,才能访问
    如定义int i; 程序执行到这里,内存空间并没有开辟出来,变量 i 并没有初始化,所以赋值之前是无法访问的。
    在这里插入图片描述

数据类型

  1. 数据类型的作用
    不同数据类型的数据占用空间大小不同,数据类型的作用是指导JVM在运行程序的时候给该数据分配多大的内存空间
  2. 基本数据类型
    Java中的基本数据类型包括四大类八小类:
    第一类:整型
    byte, short, int, long
    第二类:浮点型
    float, double
    第三类:布尔型
    boolean
    第四类:字符型
    char
  3. 基本数据类型占用空间情况
    按上面的顺序,记为:1, 2, 4, 8, 4, 8, 1, 2 【单位:字节】
  4. 取值范围
类型 字节数 取值范围
byte 1 [-128~127], 2^7-1
short 2 [-32768~32767],2^15-1
int 4 [-2147483648~2147483647],2^31-1
long 8 ~
float 4 ~
double 8 ~
boolean 1 [true, false]
char 2 [0, 65536],2^16

字符编码

  1. 何为字符编码?
  • 在八种基本数据类型当中,byte, short, int, long, float, double这七种数据类型计算机表示的比较容易,因为底层是数字,在十进制和二进制数字之间存在一种固定的转换规则;但char属于现实时间中的文字,不存在任何转换关系。
  • 为了让计算机可以表示显示世界当中的文字,我们需要进行人为的干涉,需要人负责提前制定好“文字”和“二进制”之间的对照关系,这种对照转换关系被称为:字符编码。
  1. ASCII码
    计算机最初只支持英文,最先出现的字符编码是ASCII码
    ‘a’ - - -> 97 【0110 0001】
    ‘A’ - - -> 65
    ‘0’ - - -> 48

按照ASCII编码:‘a’ - - -> 0110 0001
按照ASCII解码:‘0110 0001’ - - -> ‘a’

  1. 为什么会出现乱码
    当解码和编码采用不是同一套对照表(字符编码),则出现了乱码问题
  2. ISO-8859-1
    随着计算机的发展,后来出现的一种编码方式,是国际化标准组织ISO制定的,这种编码方式支持西欧语言(德语、法语、西班牙语、葡萄牙语等),向上兼容ASCII码,仍然不支持中文,这种编码方式是ISO-8859-1,又被称为latin-1
  3. GBK
    随着计算机向亚洲发展,计算机开始支持中文、日文、韩文等国家文字,其中支持简体中文的编码方式:
    GB2312 < GBK < GB18030(字典厚度)
    支持繁体中文的编码:大五码 < big5 >
  4. unicode编码
    后来出现的一种编码方式,统一了全球所有的文字,容量较大,这种编码方式叫做:unicode编码
    unicode编码方式有很多具体的实现:
    UTF-8(较多使用)、UTF-16、UTF-32
    java语言源代码采用的是unicode编码方式,所以“标识符”可以用中文
    nativie2ascii
    JDK中自带的native2ascii.exe程序能够将文字转换为unicode编码,运行该程序输入要转换的文字,即可得到unicode编码,如‘中’对应的编码为\u4e2d
    char c = ‘\u4e2d’; System.out.println( c ); //打印输出汉字 ‘中’

转义字符

  1. 转义字符含义
    反斜杠在java语言中具有转义的作用。在转义字符中,并非定义一个字符串而是定义的一个字符。
    char c = ‘\n’; 相当于换行符(回车键)
    char c = ‘\t’; 相当于制表符(tab键)
    char c = ‘\’’; 相当于单引号
    char c = ‘\u4e2d’; 表示转换为unicode编码
    char c= ‘\\’; 相当于反斜杠(将具有特殊意义的 \ 转为普通含义的 \,若只写一个反斜杠会报未结束的字符错误,因为 \’ 会把斜杠后面的单引号转义为不具有特殊含义的普通单引号,从而左边的单引号缺少了结束的单引号字符,编译报错)

整数类型

  1. Java语言中的“整数型字面值”被默认当做 int类型来处理,要让这个整数型字面值被当做long类型来处理的话,需要在“整数型字面值”后面添加 l/L,建议使用大写的L。
  2. Java语言中的整数型字面值有三种表示方式:
    第一种方式:十进制【默认的方式】常用
    第二种方式:八进制【在编写八进制整数型字面值的时候需要以0开始】
    第三种方式:十六进制【在编写十六进制整数型字面值的时候需要以0x开始】
  3. 类型转换
    小容量转大容量为自动类型转换,大容量转小容量为强制类型转换
    自动类型转换:如,long x = 456; //因为456整数型字面值被当做int型,占4个字节,而x为long类型,占8个字节,会发生自动类型转换;
    强制类型转换:如,int y = (int) 445L; //因为445L为long类型,y为int类型,将大容量转换为小容量的处理方式是将左边的二进制砍掉【所有的数据强转都是这样完成的】

强制类型转换原理:
以int x = (int)128L;为例,因为128L为long类型,占8个字节
所以原始数据表示为00000000 00000000 00000000 00000000 00000000 00000000 00000000 10000000
砍掉左边四字节:00000000 00000000 00000000 10000000

  1. 当一个整数字面值没有超出byte, short, char的取值范围,这个字面值可以直接赋值给byte,short,char类型的变量。这种机制SUN是允许的,目的是为了方便程序员的编程。

浮点类型

  1. 在Java语言中的“浮点型字面值”被默认当做double类型来处理,要想该字面值被当做float类型来处理,需要在字面值后面添加f/F。
  2. double和float在计算机内部二进制存储的时候存储的都是近似值。计算机的资源是有限的,要用优先的资源存储无限的数据(如无限循环的小数)只能存储近似值。

布尔类型

  1. 在Java语言中boolean类型只有两个值,true、false,没有其他值。不像C语言当中,0和1可以表示假和真。
  2. 在底层存储的时候boolean类型占用1个字节,因为实际存储的时候false底层是0,true底层是1。

基本数据类型的转换规则

  1. 八种基本数据类型当中除布尔类型之外剩下的7种类型之间都可以相互转换
  2. 小容量向大容量转换,称为自动类型转换,容量从小到大排序:
    byte < short < int < long < float < double
               char <
    注:任何浮点型不管占用多少字节,都比整数型容量大
    char和short可表示的种类数量相同,但是char可以取更大的正整数
  3. 大容量转换成小容量,叫做强制类型转换,需要加强制类型转换符,程序才能编译通过,但是在运行阶段可能会损失精度,所以谨慎使用。
  4. 当整数字面值没有超出byte,short,char的取值范围,可以直接赋值给byte,short,char类型的变量。
  5. byte,short,char混合运算的时候,各自转换成int类型再做运算。
  6. 多种数据类型混合运算,先转换成容量最大的那种类型再做运算。

运算符

运算符类型 取值
算数运算符 +,-,*,/,++,- -,%
关系运算符 <,<=,>,>=,==,!=
布尔运算符 &&,||,&, |, !,^
位运算符 &, |, ~,^,>>,>>>,<<
赋值类运算符 =,+=,-=,*=,/=,%=
字符串连接运算符 +
条件运算符 ? :
其他运算符 instanceof ,new

逻辑运算符
& 逻辑与, | 逻辑或,&& 短路与,|| 短路或
位运算符
& 按位与(真真为真,真假为假)
| 按位或(假假为假,其余全真)
^ 按位异或(不同为真,相同为假)
~ 按位非 (真则假,假则真)
>> 右移
>>> 右移,左边空出的位以0填充
<< 左移

        //逻辑与和短路与
        //逻辑与
        int x = 10;
        int y = 8;
        System.out.println( x < y & ++x < y);// false
        System.out.println(x);// 11

        //短路与
        int a = 10;
        int b = 8;
        System.out.println( a < b && ++x < y); //false
        System.out.println(a);// 10
  • 从某种角度来看,短路与更智能。由于后面的表达式可能不执行,所以执行效率较高。这种方式在实际的开发中使用较多。短路与比逻辑与使用的多。短路与更常用
  • 但是,在某些特殊的业务逻辑中,要求运算符两边的算子必须全部执行,此时必须使用逻辑与,不能使用短路与,使用短路与可能导致右边的表达式不执行。
  • 短路与:第一个表达式为false,发生短路与;短路或:第一个表达式为true,发生短路或。

运算符优先级列表
在这里插入图片描述
赋值运算符

  1. 扩展的赋值运算符能够进行强制类型转换
byte b = 10; //没有超出byte类型可以直接赋值
b = b + 5; //混合运算时各自转成int再做运算,b+5为int型,b为byte型,编译报错,需要进行强制类型转换

//扩展的赋值运算符
byte x = 10;
x += 5;//编译正确,等同于x = (byte)(x+5),不等于x = x + 5;

连接运算符

  1. +运算符在java语言中有两个作用:加法运算求和,字符串的连接运算
  2. 当“+”运算符两边的数据都是数字的话,一定是进行加法运算
  3. 当“+”两边的数据只要有一个数据是字符串,一定会进行字符串连接运算,并且连接运算之后的结果还是一个字符串类型
  4. 在一个表达式当中可以出现多个“+”,在没有添加小括号的前提下,遵循自左向右的顺序依次运算(可以做加法运算,也可以做字符串连接运算)

猜你喜欢

转载自blog.csdn.net/shao_yc/article/details/106533272