书写注释是一个非常好的习惯
关键字:
java的所有组成部分都需要名字。类名、方法名、变量名都被称为标识符。
java是一门强类型语言:强类型语言要求变量的使用严格符合规定,所有变量必须先定义后才能使用。(安全性高)
弱类型语言:不要求变量的使用严格符合规定,所有变量不必先定义后才能使用。如javascript
java的数据类型
其中long类型一般在数后加个L来表示区分,float类型要加F来区分。
String不是关键字,是一个类;
32位的电脑只能用36位的cpu,最大内存只支持到4G,和寻址能力直接挂钩,而64位的电脑可以支持128G;
整数扩展:
进制:
浮点数扩展:
float类型和double类型相同的小数可能是不相等的如:
float f=0.1f; double b=0.1; System.out.println(f==b);//输出结果为flase System.out.println(f);//输出结果为0.1 System.out.println(b);//输出结果为0.1
如果float足够大,值+1和以前相等
float t=90811111112542358855655476f; double k=t+1; System.out.println(t==k);//输出结果为true
究其原因,是因为浮点数能表示的字长是有限的,离散的,一般会存在舍入误差,其结果只是个约数,接近但不等于。
因此,不能使用float来表示银行等和钱的业务,因为存在误差。
最好完全避免使用浮点数来进行比较。
要表示银行的业务,可以用BigDecimal数学工具类来操作。
字符扩展:
1.字符可以强转成int,所有的字符本质上还是数字,有编码表和其对应。
2.转义字符:
\u:转义为Unicode编码表示的方法(16进制):如
char c5='\u0061'; System.out.println(c5);//16进制的0061=十进制的97,所以输出a
\t:水平制表符
\n:换行
布尔扩展:
boolean flag=true; if (flag){} if (flag=true){}//与上行代码等价
java是强类型语言,所以有些运算需要用到类型转换。
运算过程中,不同的数据类型要先转换成同一种类型的才能计算,由低到高自动转,由高到低强转(会损失数据)
转换分强制类型转换和自动类型转换
注意点:
int money=10_0000_0000;//java7的新特性,中间加‘—’可以更清晰 int b=20; long total; total=b*money; System.out.println(total); //输出结果为-1474836480,究其原因是因为b和money都是int类型的,它们的积也是int类型,超过了int类型的最大值,所以数据会溢出
下面的例子就没问题了
int money=10_0000_0000; int b=20; long total; total=(long)b*money; System.out.println(total);
变量:可以变化的量
java是一种强类型语言,每个变量都要声明其类型。
java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域。
注意:
变量的作用域:
1. 类变量:加static关键字来定义,和实例变量差不多,可用类名直接调用。 2. 实例变量:在方法体外、类内部创建的变量,需要使用对象来调用,可以不初使化,输出类型的默认值。 3. 局部变量:局部变量是指在一个方法体中有效,跳出这个范围就无效了。
常量:初使化后不能再改变值,不会变动的值。
所谓常量可以被理解为一种特殊的变量,它的值被设定后,在程序运行过程中不允许被改变。
常量一般全用大写。
修饰符不区分顺序:如下两行代码是一样的
static final double PI=3.14; final static double PI=3.14;
变量的命名规范:(类首字母大写,变量和方法名首字母小写,并遵循驼峰命名法原则,常量大写或加下划线)
算数运算符:+ - * / % ++ --
赋值运算符:=
关系运算符:> < >= <= == != instanceof
逻辑运算符:&& || !
位运算符: & | ^ ~ >> << >>>
条件运算符: ? :
扩展赋值运算符:+= -= *= /=
long a=12312142124123123L; int b=12; short c=43; byte d=19; System.out.println(a+b);//long System.out.println(c+b);//int System.out.println(d+c);//int
println参数值的整形类型最小是int型,所以short类型和byte类型的和为int类型。
++ --
//短路运算,与运算中如果第一个就是false,后面就不在判断了 int c=4; boolean d=c<4&&(c++<4); System.out.println(d); System.out.println(c);//输出4,可见c++并没有执行
A=0011 1100 B=0000 1101--------------------A&B=0000 1100 //与运算:全是1才得1,其他得0A|B=0011 1101 //或运算:全是0得0,否则为1A^B=0011 0001 //异或:相同为0,不同为1~B =1111 0010 //非:取反
实例:
Integer a=0b0011_1100; Integer b=0b0000_1101; System.out.println(Integer.toBinaryString(a)); System.out.println(Integer.toBinaryString(b)); System.out.println(Integer.toBinaryString(a&b)); System.out.println(Integer.toBinaryString(a|b)); System.out.println(Integer.toBinaryString(a^b)); System.out.println(Integer.toBinaryString(~b)); 输出: 111100 1101 1100 111101 110001 11111111111111111111111111110010
//<<:左移>>:右移>>>:无符号右移 /* * 0000 0001 :1 * 0000 0010 :2 * 0000 0011 :3 * 0000 0100 :4 * ... * 0000 1000:8 * ... * 0001 0000:16 * *从上面可以看出,左移一位是*2,右移一位是/2 * 面试题:如何用最快的方法算出2*8 * 2*8=2*2*2*2=16 * 由2左移3位就可以了,如下代码 * */ public static void main(String[] args) { System.out.println(2<<3); } //>>:带符号右移。正数右移高位补0,负数右移高位补1。>>>:无符号右移。无论是正数还是负数,高位通通补0。
如果输出的东西是字符串与数值用“+”连接,一般会直接转换成字符串类型,下面的情况除外,""空字符串在后面会先将前面的相加在拼接。
//字符串连接符+ int a=10;int b=20; System.out.println(""+a+b);//输出1020 System.out.println(a+b);//输出30 System.out.println(a+b+"");//输出30
为了更好的组织类,java提供了包机制,用于区别类名的命名空间(可以看成是一个个的文件夹)
一般利用公司域名倒置作为包名:如com.baidu.www
用import来导入包,可以用*通配符来批量导入
用javadoc命令生成jdk文档,编辑好源文件,用javadoc命令可以生成jdk文档,-encoding UTF-8和_charset UTF-8 是设置编码格式和字符集,防止中文乱码。
用idea生成JDK文档: