标签:
这里提几个个人感觉需要注意的细节,具体的内容推荐随便看本java书籍
一、标识符
1.标识符命名规则:
1)字母、下划线、美元符号或者数字组成
2)字母、下划线、美元符号开头(不能是数字)(面试喜欢考这两点)
3)大小写敏感,长度无限制
4)不能和关键字、保留字重名
2.约定一般采用驼峰规则,并且是见名知意
3.注意命名不能够有关键字 所有关键字,都是小写字母
二、基本数据类型
byte,short ,int,long,char; boolean ;float,double
需要注意的是:
1)整型默认使用int, 浮点型默认使用double
比如要写一个长整形long 的数,需要显式地写成 1000L (后面加个L,虽然写小写l也可以,但是推荐写大写L)
要写一个float类型的浮点数,显式写成 1.23F
2)关于金融的行业对于数据精度要求很高的,一般会使用BigInteger和BigDecimal来表示整型和浮点型
3)char类型
java中的char底层采用unicode,英文是两个字节16位,一个汉字也是两个字节,也就是说 ‘a‘ ,‘中‘ ,对于java中的char来说是一样长的
(虽然有些编码里面说的一个中文字符是两个英文字符长度,但是在unicode下面,他们长度相同,都是两个字节)
三、操作符
1.赋值 = , 注意的是引用类型传递地址,基本类型传递值。
2.算术运算符:+、-、*、/、%等
注意的是进行整型运算底层采用的是int来进行, 比如
short s1,s2 = 1;
s2++;
s1=s2;//这里会报错,因为s++的时候,会自动将short类型转为int类型,然后赋值的时候左边卫short类型,右边实际上变成了int类型
3.关系运算符
注意对象的比较,不能随便用"=",而且说到"="就不得不提"equals",这里提两点
1)
1 public class A {} 2 3 public class Test { 4 5 public static void main(String[] args) { 6 7 A a1 = new A(); 8 9 A a2 = new A(); 10 11 System.out.println(a1 == a2); //false 12 13 System.out.println(a1.equals(a2));//false 14 15 } 16 17 }
第一个为false,因为比较的实际上是地址,两个对象,地址不同
第二个也为false,可能你已经了解对象比较要用equals方法,但是这里A对象并没重写equals方法,那么就会调用Object的equals方法,Object的equals方法实际上还是在比较地址
2)
1 public class Test { 2 3 public static void main(String[] args ) { 4 5 String s1 = "hello"; 6 7 String s2 = "hello"; 8 9 System.out.println(s1 == s2); //true 10 11 System.out.println(s1.equals(s2));//true 12 13 } 14 15 }
String虽然是对象类型,但是它很特殊,java里面有String池,创建第一个hello的时候放入String池,第二次创建s2的时候JVM首先去找String池,发现已经有"hello"了,就直接让s2也指向s1这个对象。
如果想创建另一个"hello",需要这么写:new String("hello");
(关于设计String池,原因之一也是java最开始出的版本里面,String就是常量,这是JVM为了效率考虑的一次优化,后面详细介绍String的时候还会讲到StringBuilder,StringBuffer,它们则是java对于字符串操作的第二次优化)
4.逻辑运算符 &, | ,! 注意两点
1)a&&b 如果前一个为false ,则后一个不会执行;如果a||b ,第一个为true,第二个不会执行了;
而a & b 第一个为false,第二个也会执行;a|b 第一个为true,第二个也会执行。(这面试挺喜欢考的)
2)熟悉二进制操作的话
比如 01 & 11 结果为 01 , 01 | 11 结果为11 , 这里是按照与或非的原则,每个位置进行计算的。现实中碰到要这么做的情况很少。这是按位操作。
3)指数计算
1.39E9f = 1.39*10^9 用的比较少
4)移位操作(需要点二进制的知识来理解)
左移 <<
右移 >>
无符号右移 >>> 用的比较少,一般只是在进行2的倍数操作时候用
而且移位操作,short,byte等执行之前,系统会自动转换成为int ,然后再移位
比较推荐的一种用法,就是当放大2的n次方的时候 ,可以 t<<n 这么写 , 左移一位相当于乘以2 ,右移一位相当于除以2 , 这个操作速度更快(这是装B利器)。
5)三元操作符
a?b:c
如果a为true则执行b,a为false执行c
6)截取
Math.random() 四舍五入
Math.ceil() 升截
Math.floor() 降截
7)基本数据类型之间的自动转换
容量小的自动转换成为容量大的
布尔类型和其他类型之间不能互相转换(这个和c++不同,比如 if(1)在c++中可以,在java中不行)
byte,short,char>int>long>float>double
byte,short,char之间不会相互转化,他们三者发生计算,首先变成int
(整型运算,底层就是以int,所以小容量的这三个进行运算,在运算前,就被系统自动变为int)
四、控制流程语句
1.循环
while,do-while,for , 注意do-while循环会比while多执行一次(这个面试常考)
比如:
1 public class Test { 2 public static void main(String[] args) { 3 int i=0; 4 while(i<2) {//执行2次 5 i++; 6 System.out.println("dd"); 7 } 8 9 int j=0; 10 do {//执行3次 11 j++; 12 System.out.println("dd"); 13 }while(j<2); 14 } 15 }
2.谨记一个原则,别过多使用if、else, 超过5个加注释(为更好维护)
3.switch语句 ,这个记得加break控制
虽然jdk版本出来都快版本9了,但是关于switch的和枚举配合使用的貌似使用不普遍,见下例:
1 enum Spe { 2 NOT,YES 3 } 4 5 public class Test { 6 public static void main(String[]args) { 7 Spe s = Spe.NOT;//枚举类型的值,本身也是这个枚举类型 8 switch(s) {//s的位置放入一个枚举类型 9 case NOT: System.out.println("not");break; 10 case YES: System.out.println("yes");break; 11 } 12 } 13 }
标签:
原文地址:http://www.cnblogs.com/kaiguoguo/p/4676701.html