java基础易错知识整理

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

  • 数据类型的转换。

java基础易错知识整理_第1张图片

这是数据转换的顺序,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()的效率还是蛮高的。

你可能感兴趣的:(java,java,java基础)