指针的作用
- 使得不同区域的代码可以轻易共享内存数据,程序更加高效
- 构造链表二叉树等数据结构
- 通过指针不仅可以对数据本身还可以对数据所在的地址进行直接操作
Java
C | C++ | JAVA |
---|---|---|
面向过程 | C++ 进一步扩充和完善了 C 语言。面向对象 | 面向对象 |
提供指针 | 提供指针 | 不提供指针,增加了引用,程序内存更安全 |
面向过程因此没有继承这一说 | 多继承 | 单继承,但是接口可以多继承 |
C语言的函数库比较松散,只是把功能相同的函数放在同一个头文件中 | C++的函数库是有集成的很紧密 | 有内存自动释放机制,不需要手动释放无用内存 |
定义数组的方式
int[] a=new int[5];
int[] a=[1,2,3,4,5];
序列化
目标对象实现Serializable接口
把对象转换为字节序列的过程。
因为我们的对象不只是存储在内存中,还需要再网络中进行传输,并且保存之后还能恢复。
面向对象和面向过程
面向过程:分析解决问题的步骤,把要实现的功能视为一个从开始到结束的连续过程,逐步完成。
面向对象:分析参与问题的有哪些实体,与它们应有的属性和方法,让实体去执行相应的功能。
面向过程针对的是功能,性能更高。而面向对象针对的是功能背后的实体,易维护,易复用,易拓展。
基本数据类型
有8个,4个整数类型byte short int long(1,2,4,8),2个浮点类型float double(4 8),字符类型char(2),布尔类型 boolean(4)
除了布尔类型之外的其他7个类型,都可以看做是数字类型,它们相互之间可以进行类型转换。
访问修饰符
- private:在类本身内可见
- default: 在相同的包内可见
- protected:在相同的包内和所有的子类可见
- public:对所有类可见
自己的类→相同包的子类→子类→所有类
for循环 while循环 do while循环
for循环格式固定,控制次数方便。for循环括号内定义的变量仅仅在循环内可用,for循环适用提前知道循环总次数的场景。
while循环格式灵活,不在意控制次数。while的初始化表达式本来就在外面所以仍然可用。
while在循环的开始就判断下一个迭代是否应该继续。do/while在循环的结尾来判断是否将继续下一轮迭代。do/while至少会执行一次循环体。
面向对象三大特征
面向对象编程易维护,易复用,易拓展。
耦合度:类与类之间的关联程度
-
封装:通过private把一个属性或者方法进行私有化,封装细节。使用setget方法才能对它进行访问。提高可维护性
-
继承:子类可以拥有父类非私有的属性和方法,子类也可以有自己的属性和方法、也就是进行拓展。提升了代码的复用性
-
多态:“同一个行为”发生在“不同的对象上”会产生不同的效果
子类继承父类,并且重写方法,发生向上转型,父类引用指向子类对象,Animal a1 = new Cat();实现多态,提升了程序的拓展性
(子类转为父类,右边的当成左边的来用,说得通就可以转)
构造方法特点
无返回值,与类名相同
在实例化子类时会先调用父类的构造函数。因为子类继承父类之后,获取到了父类的属性和方法,而这些内容在使用之前必须先初始化,所以必须先调用父类的构造函数。
重载、重写
public void xx(int x){sout;}
重载就是在同一个类当中,
方法名相同,访问修饰符、返回值类型、参数列表不同(类型、个数、顺序),做出不同的处理。
重写(覆盖)就是当⼦类继承⾃⽗类的相同⽅法,
方法名相同,访问修饰符≥父类,返回值类型、方法名、参数列表相同。(重写之后抛出的异常只能更少)。但做出有别于⽗类的响应。
构造方法可以被重载,不能被重写。
抽象类、接口
- 继承:一个类只能继承一个抽象类,但可以实现多个接口
- 修饰符:接口中的方法不能被private修饰(因为定义接口的目的就是被重写)
- 方法:接口中的方法只能是抽象方法,只定义不实现;抽象类可以有非抽象方法。接口不能有构造方法、静态方法,抽象类可以有(接口不能被实例化)
- 变量:接口中变量只是public static final所修饰的,抽象类没有该限制
接口的好处
- JAVA不允许多继承,但是能够实现多个接口
- 通过接口可以实现多态,提升了程序的拓展性
线程创建的三种方法
方法一:编写一个线程类,继承Thread类,重写run方法
优点是简单方便,缺点是线程已经继承了Thread类,不能再继承其他类
方法二:编写一个线程类,继承Runnable接口,重写run方法
优点是仍可以继承其他类,缺点是编程复杂,如果要访问当前线程,则必须使Thread.currentThread方法
方法三:编写一个线程类,继承Callable接口,并且重写call方法
call方法作为线程执行体,并且有返回值