java基础易忘知识整理
最近又又又开始从头接触java,虽然使用java 也有很长一段时间了,才发现自己有一些基础知识还是容易错还容易忘。借这个机会,记录一下
0.变量命名
java语言有着自己固定的命名规范,这也是比较基础的知识了。
- 以英文大小写字母、下划线“_”、或“$”开始的一个字符序列
- 数字不能作为第一个字符
- 变量名不能是java的关键字(还有goto)
- 变量名大小写敏感且长度没有限制
这是语言规定的了,但是我们在平常开发过程中命名规则会更加严格,下面参考阿里代码规范列举几条。
- 代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。
- 代码中禁止使用拼音与英文混用的方式,更不允许直接使用中文的方式
- 类名使用 UpperCamelCase风格,必须遵从驼峰形式,但以下情形例外:DO/ BO /DTO /VO / AO
- 方法名、参数名、成员变量、局部变量都统一使用 lowerCamelCase 风格,必须遵从驼峰形式。
- 常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚,不要嫌名字长。
- 抽象类命名使用 Abstract或 Base开头;异常类命名使用Exception 结尾;测试类命名以它要测试的类的名称开始,以
Test 结尾。 - 中括号是数组类型的一部分,数组定义如下:String[] args;
- POJO类中布尔类型的变量,都不要加is,否则部分框架解析会引起序列化错误。
- 包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词。包名统一使用单数形式,但是类名如果有复数含义,类名可以使用复数形式。
这些是一些强制性的命名规则,是不是比java中规则复杂多了。
有兴趣的可以看一看阿里代码规范。
1.数据类型
这里就说两个
-
long类型的定义时候需要加L。例如,Long a = 25252151513
-
数据类型的转换。
这是数据转换的顺序,byte,short,char之间不能转换。要是逆序转换的话,需要强制转换。
2.重载与重写
这个问题我 还经常忘记…
从网上找到一个比较好的总结,搬运过来。
方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载;重写发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法有相同的参数列表,有兼容的返回类型,比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常(里氏代换原则)。重载对返回类型没有特殊的要求,不能根据返回类型进行区分。
原文:https://blog.csdn.net/wintershii/article/details/80558739
3.成员变量
先看一段代码
public class Circle {
double r; //成员变量
double s; //成员变量
//这里进行赋值
r=5.5;
}
上面代码中,进行赋值是否正确呢?
答案当然会报错了。
这是因为,成员变量在堆栈中会有默认值,在声明中已经给定值了。再次赋值使用了语句,而类中只能有成员变量和方法不能有语句。
4.面向过程与面向对象的优缺点
面向过程
优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源,比如单片机、嵌入式开发、Linux/Unix等一般采用面向过程开发,性能是最重要的因素。
缺点:没有面向对象易维护、易复用、易扩展
面向对象
优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护
缺点:性能比面向过程低
5.int转String类型的方法以及效率
int转String类型有很多的方法
- String.valueOf(i);
- Integer.toString(i);
- i+" ";
当我们在平时使用的时候该用哪一个呢?看一下他们的效率吧
public class IntToString {
public static void main(String[] args) {
int a[] = new int[1000000];
String []b = new String[1000000];
for (int i = 0; i < a.length; i++) {
a[i] = i;
}
long t1 = System.currentTimeMillis();
for (int i = 0; i < a.length; i++) {
b[i] = String.valueOf(a[i]);
}
long t2 = System.currentTimeMillis();
for (int i = 0; i < a.length; i++) {
b[i] = Integer.toString(a[i]);
}
long t3 = System.currentTimeMillis();
for (int i = 0; i < a.length; i++) {
b[i]= a[i] + "";
}
long t4 = System.currentTimeMillis();
System.out.println("Stirng.valueOf()的时间为"+(t2-t1));
System.out.println("Integer.toStirng()的时间为"+(t3-t2));
System.out.println("i+''+的时间为"+(t4-t3));
}
}
运行结果是这样子的
Stirng.valueOf()的时间为703
Integer.toStirng()的时间为3673
i+''+的时间为3632
其实还是比较明显的,String.valueOf()的效率还是蛮高的。