此文章只针对本人的学识水平来总结的一些关于本人需要注意的遗漏点。
一、String,StringBuffer,StringBuilder这三者的比较
1、可变性
String 不可变
StringBuffer和StringBuilder可变
2、线程安全性
String不可变,所以是线程安全的
StringBuffer也是线程安全的,其内部是用synchonized进行同步
StringBuilder是线程不安全的
二、访问权限
| 当前类 | 同一包 | 子孙类 | 其他包 | |
|---|---|---|---|---|
| pulbic | ✔ | ✔ | ✔ | ✔ |
| protected | ✔ | ✔ | ✔ | ✖ |
| friendly | ✔ | ✔ | ✖ | ✖ |
| private | ✔ | ✖ | ✖ | ✖ |
三、抽象类
抽象方法必须放在抽象类里,而抽象类里不一定只有抽象方法(即可以有实例方法)
抽象类不能被实例化,如果要使用抽象类必须先要继承抽象类,再实例。
四、接口
接口的成员(字段+方法)默认都是pubic,并且不能够定义为private或者protected
接口的字段默认都是static和final的。
五、重写(overwrite)和重载(overload)
1、首先要分清楚,这两个都分别发生在什么当中。
重写发生在子类继承父类中,并要声明和父类当中完全相同的一个办法
重载发生在同一个类中。
2、重写的限制
为了满足里式替换原则,重写有有以下两个限制:
子类方法的访问权限必须大于等于父类方法;
子类方法的返回类型必须是父类方法返回类型或为其子类型。
使用 @Override 注解,可以让编译器帮忙检查是否满足上面的两个限制条件。
3、重载的限制
存在于同一个类中,指一个方法与已经存在的方法名称上相同,但是参数类型、个数、顺序至少有一个不同。
应该注意的是,返回值不同,其它都相同不算是重载。
六、toString()
默认返回 ToStringExample@4554617c 这种形式,其中 @ 后面的数值为散列码的无符号十六进制表示。
七、初始化顺序
存在继承的情况下,初始化顺序为:
父类(静态变量、静态语句块)
子类(静态变量、静态语句块)
父类(实例变量、普通语句块)
父类(构造函数)
子类(实例变量、普通语句块)
子类(构造函数)
八、java与C++的区别
Java 是纯粹的面向对象语言,所有的对象都继承自 java.lang.Object,C++ 为了兼容 C 即支持面向对象也支持面向过程。
Java 通过虚拟机从而实现跨平台特性,但是 C++ 依赖于特定的平台。
Java 没有指针,它的引用可以理解为安全指针,而 C++ 具有和 C 一样的指针。
Java 支持自动垃圾回收,而 C++ 需要手动回收。
Java 不支持多重继承,只能通过实现多个接口来达到相同目的,而 C++ 支持多重继承。
Java 不支持操作符重载,虽然可以对两个 String 对象执行加法运算,但是这是语言内置支持的操作,不属于操作符重载,而 C++ 可以。
Java 的 goto 是保留字,但是不可用,C++ 可以使用 goto。
Java 不支持条件编译,C++ 通过 #ifdef #ifndef 等预处理命令从而实现条件编译。
此篇文章是从https://github.com/CyC2018/CS-Notes/blob/master/notes/Java%20%E5%9F%BA%E7%A1%80.md总结归纳,如需其他基础知识的注意点,可进入此链接查看。