先把上次没讲完的接上~~
基础程序分析
例如:
包
关键字:package
包路径和磁盘上的目录是对应的,在磁盘上创建相应的目录有两种方式,第一种是手动创建包对应的目录,当然这种方式是不可取的,太麻烦!第二种是带包编译,编译时指令:
-d 后面跟的是生成目录的路径,此处为“.”,表示在当前目录下创建包目录。
现在有了包之后,运行时指令也有所不同,没有包的时候运行指令为java 类名,但是现在需要加上类的全限定名,指令为:java 包名.类名
包的引用
关键字:import 后面跟的是完整的类名(全限定名)
作用是声明如果该程序中用到Scanner类的话就去这个路径去找,这样一来就不用在每次使用类的时候都写全限定类名了。可以使用*作为通配符,比如:
这样一来,就包含了java.util包下的所有类,但是不包含子包。但是有些类是不用导包的,比如String类,它是属于java.long包下,因为这些类太常用,几乎每次都要写,所以编译器就默认提供了"java.long.*"
编程习惯
为了提高程序的可读性所以需要遵循一些编程习惯
1.注释
//单行注释
/* */多行注释
/** */多行注释 配合javadoc工具使用,指令:javadoc -d doc Hello.java
2.缩进
同级代码左对齐,每行一句代码
每进入一个代码块{}缩进一次
3.标识符语法:
字母,数字,下划线,货币符号,数字不能开头
不能使用关键字和保留字(goto const)另外还有三个不能使用true ,false ,null
大小写敏感
没有长度限制
习惯:
1)望文生义
2)大小写
类名:单词首字母大写
变量名/方法名:首个单词小写,后面的单词字母大写
包名:全小写
常量名:全大写
整数基本数据类型
1.byte 1B -128~127
2.short 2B -32768~32767
3.int 4B
4.long 8B
重点解释为什么byte的长度为-128~127
一个字节占八个比特位,第一个位是符号位,符号位为0表示正值,1表示负值,比如说
这里负数的表示使用到了“补码”,补码的原则是:按位求反,末位加一;首先将00000101按位求反为111111010,然后末位加一,变成了11111011。计算机是只会做加法的,无论是加减乘除,计算机都会转换为加法来处理,比如说12-5,计算机会将其转换为12+(-5)来处理,12的二进制00001100,-5的二进制11111011,二者做加法为100000111,但是现在变成了九位,但是一个数据单元只有八位,所以最前面的一位就会被舍弃掉,结果就是00000111,转换为十进制就是7。使用补码的好处就是便于将减法转为加法。
接着说为什么byte可以表示的最大值是127,总共是八位,除去第一位是符号位,还剩下七位,能表示的最大数就是01111111,这个数的十进制就是127,最大值+1就等于最小值。01111111+00000001=10000000,结果的符号位1,表示这个数为负数,所以要按位求反,末位加一,按位求反之后:01111111,末位加一之后:01111111+00000001=1000000,十进制为128,但由于是负数,所以是-128。
字面值
什么是字面值,比如int a=10;那么这个10就是字面值。
如果字面值是以0开头,例如int a =010,表示的是8进制。
如果以0x开头,int a=0x10,表示16进制。
如果以0b开头,int a=0b10,表示2进制(java1.7版本之后才有)。
需要注意的是,在二进制中八位表示一个字节,但是在十六进制中两位表示一个字节,比如1010 0101换成十六进制为A5。
当定义byte x = 10;的时候,编译器会先将字面值当作int类型的处理,然后在降级为byte,但是存在一个问题,当定义long x = 30_0000_0000时,编译器又要把字面值当作int类型处理,但是这个值是超出int所能表示的最大范围的,这个时候编译就会出错,所以为了避免这种情况的发生,在定义long类型的时候,在字面值的后面加上一个“L“,这就是等于告诉编译器,不要把这个值当作int值处理,这就是一个long类型的!
运算符
+ - * / % = += -= *= /= %= ++ --
需要注意的是11/5并不会等于5.5,而是等于5,为什么?
当两个数进行运算的时候,比如参加运算的数为A,B,编译器会判断A和B的数据类型,然后根据它们的数据类型为结果值开辟一个空间,系统默认的数据类型为int,如果AheB的数据类型比int小,则结果的数据类型为int,如果A和B的数据类型比int大,那么结果的数据类型取最大的那个。暂时讨论的都是整数,不考虑浮点数,两个int值做除法,结果也是int类型的,虽然结果是5.5,但是存为int值时,会将小数点之后的值舍弃掉。
位运算符移位运算符
无符号右移如果是针对正值,效果与右移是一样的,负值时则不一样。
异或运算的应用:
1.假如说一个数组中有1001个数,每个数都有一个与它相同的数成对出现,唯独一个数是没有相同的数与它匹配的,如何找出这个数,
方法:将数组中的所有数一起求异或,a^b^a=a^a^b=0^b=b
2.有两个值a,b,如何在不使用第三个变量的情况下将a,b的值互换
方法1,使用异或,a=a^b b=a^b a=a^b
方法2,a=a+b b=a-b a=a-b
3.加密的运用
将所有数据与一个数(这个数就是秘钥)求异或,解密时,再与这个秘钥做一次异或。
领取专属 10元无门槛券
私享最新 技术干货