Java笔记Day02

来源:互联网 发布:武汉优美网络是真的吗 编辑:程序博客网 时间:2024/04/30 19:26

计算机编程语言有很多种,但最本质的东西都是相同的。如果想要了解一个语言,无非就是几个方面:关键字、标识符、注释、常量和变量、运算符、语句、函数、数组。下面就说一下Java的这几个方面。

1. 关键字:Java挑选了一些特定的英文单词,并赋予其特殊的含义。如:class、inteface、public等等。

2. 标识符:标识符从字面上来看就是标识一件事物的符号,在Java中一般是变量名称、方法名称、类名称等等,由程序员自定义。Java标识符的定义要满足三个条件:(1)标识符由英文字母、数字、_、$组成(2)不能以数字开头(3)不能使用关键字。

3. 注释:Java当中的注释分为三种:单行注释、多行注释、文档注释。注释的作用包括:(1)注解说明(2)调试程序,确定问题点在哪段代码。另外文档注释的对象可是类、变量、方法,使用JDK提供的javadoc工具可以轻松提取文档注释的内容和被注释的对象内容,并生成类似JDK文档一样格式良好的说明文档,以便客户端程序员阅读使用。

4. 常量和变量:常量就是固定不变的量,变量是内存中的一块空间,有自己的名称和类型,其中的数据是变化的常量。不管是常量还是变量,都有自己的类型。Java提供的基本类型有八种,分别是:整数型(byte--1*8bit、shor-t-2*8bit、int--4*8bit、long--8*8bit)、小数型(float--4*8bit、double--8*8bit)、字符型(char--2*8bit)、布尔型(boolean)。

其中,Java中整数类型默认是int、小数类型默认是double。Java是一个强类型语言,一般来说不同类型的数据是无法进行运算的,但是数值类型除外。有时候参与运算的数据数值类型不同但是也能进行运算,是因为有自动类型提升和强制类型转换的支持。一个小的数据类型和一个大的数据类型进行运算,就会先将小的数据类型前面位数补全,提升为大的数据类型,然后进行运算,运算结果是大的数据类型。

特殊案例:

案例1:byte b = 3;

编译结果:

正常

执行结果:

正常

解释:

3在Java当中默认是int类型,因为3是一个常量,编译器可以对该数值大小进行判断,发现3在byte的表示范围之内,就放心大胆的放行了。在真正执行的时候,会只保留3的低八位bit,并赋值给变量b。

案例2:byte b1 = 3;

              byte b2 = b1 + 4;

编译结果:

不通过

执行结果:

解释:

首先第一句正常通过编译,第二句里由于b1是变量,对于b1+4这个数值大小无法进行判断,所以编译器提醒程序员右侧数据可能会超过byte的表示范围,即可能损失精度。

案例3:byte b1 = 3;

              byte b2 = 4;

              byte b = b1+b2;

编译结果:

不通过

执行结果:

解释:

前两句编译通过,问题就出在第三句。编译器发现b1和b2都是byte类型的变量,两个byte类型的数据加起来就有可能超过byte所能表示的数据范围,所以编译器报错,即可能丢失精度。

案例4:int  a1 = 3;

              int  a2 = 4;

              int  a = a1+a2;

编译结果:

正常

执行结果:

正常

解释:

为什么案例(4)跟案例(3)表现形式一样,编译执行结果却不同?因为int是Java中的默认整数类型,对于右侧的a1+a2编译器干脆就不检查是否会超过int的数据表示范围了,等真正运行的时候,如果右侧数据超过了int的数据表示范围,那么直接忽略高位强转为int类型。这就是Java对于默认数据类型的特殊处理方式。

案例5:char  c = 'a';

      syso(c+1);

编译结果:

正常

执行结果:

98

解释:

计算机最初是由老美发明的,计算机对于数据的表示就是一系列的 0 1 串,为了建立一个 0 1 串跟现实生活中文字的映射关系,就选取了一个 0 1 串的长度,既能表示足够的文字,又不会太长,最后选定16bit,即两个字节,现实生活中的字母、数字都对应到一个具体的 0 1 串,于是就确定了一张码表,这就是ASCII码表。计算机普及到中国,中国一看不支持中文这哪行,于是确定了码表gb2312,后来为了支持更多的中国文字不断扩展,后来有了GBK。其实,每个国家都有自己的码表,每个国家的码表基本都兼容ASCII码表,因为字母、数字基本每个国家都使用。Java里实际上内置的码表是unicode码表,这是一样国际码表,兼容了大多数国家的文字。如此说来,字符在unicode码表当中就是对应一个 0 1 串,二进制的 0 1 串就可以表示成一个数,就可以跟i数值类型的数据进行运算了。

5. 运算符

(1)算术运算符(+   -   *   /   %   ++   --)

特殊案例:

案例1:int  a = 3, b;

              b = a++;

              syso("a="+a);

              syso("b="+b);

编译结果:

正常

执行结果:

a=4

b=3

解释:

因为++在a后面,所以a要预留出最原先的值3参与其他运算(在这里是赋值运算),a++运算完毕a变为4,然后a预留的值3赋给b。

效果等同于:int a = 3,b,temp;

                        temp = a;

                        a++;

                        b = temp;

而如果++在a前面则不会有数据预留的情况。

(2)赋值运算符(=   +=   -=   *=   /=   %=)

特殊案例:

案例1:byte b = 3;

              b = b + 1;

编译结果:

不通过

执行结果:

解释:

首先第一句正常通过编译,第二句里由于b1是变量,对于b1+1这个数值大小无法进行判断,所以编译器提醒程序员右侧数据可能会超过byte的表示范围,即可能损失精度。

案例2:byte b = 3;

              b += 1;

编译结果:

正常

执行结果:

正常

解释:

面对+=一类的赋值运算符,编译器直接放行,等到执行的时候,如果右侧数据超过左侧数据类型的表示范围了,直接强转。




0 0
原创粉丝点击