public class CreateObject{
public CreateObject(){ //构造方法
System.out.println("创建对象");
}
public static void main(String args[]){ //主方法
new CreateObject(); //创建对象
}
}
其中使用new 创建对象,创建对象的同时自动调用了构造方法中的代码。
一个Book类的引用 Book book;
引用与对象关联 Book book=new book();
引用只是存放了一个对象的内存地址,可以说book是Book类的一个对象,实际上是book包含了Book对象的一个引用。
equals()与==的区别
equals()方法是String类中的方法,比较两个对象所指的内容是否相等
==运算符指的是比较两个对象引用的地址是否相等
对象的销毁
两种情况被虚拟机认为是垃圾
1.对象引用超过其作用范围
2.对象复制为null
收集并删除未引用的对象。可以通过调用"System.gc()"来触发垃圾回收,但并不保证会确实进行垃圾回收。JVM的垃圾回收只收集哪些由new关键字创建的对象。所以,如果不是用new创建的对象,可以使用finalize函数来执行清理。
回收机制
1.标记法:给对象进行计数,每当有引用时可加一,每当释放超过作用域时,就减一,由此得零就会被回收。(循环被引用的对象无法识别,会被回收)
2.根搜索算法,从根部进行搜索,去搜索所有可达对象,剩下的就是被回收的(内存会被分为一块一块,解决办法1.将存活的对象进行整理 2.将内存一分为二,这边存活的对象复制过去,另外一边空着,往复。)
继承
在继承中,子类没有权限调用父类中private的方法,只能调用父类中修饰为public或是protected的成员方法
重写就是在子类中将父类成员方法名保留,重写成员方法实现内容。其中,子类与父类的成员方法返回值、方法名称、参数类型以及个数完全相同,唯一不同的是方法实现内容,被成为重构。
注意:重写父类时,修改方法的修饰权限只能从小到大的范围改变 private protected public
在实例化子类对象时,父类的无参构造方法会被自动调用,但是有参构造方法不能被自动调用,只能利用super关键字来显示地调用父类的构造方法
使用向下转型时,必须使用显式类型转换,向编译器指明父类对象转换为哪一个类型的子类对象(四边形不一定都是正方形)
方法的重载
一个类中的构造方法,方法名相同但是形参不同构成重载。
int...a 看作int[]a
多态
无需在所有子类中定义执行相同功能的方法,避免重复代码的开发,同时只需要实例化一个继承父类的子类对象即可调用相同功能代码,只需要去维护父类中这个方法即可。
抽象类
只要类中有一个抽象方法,此类则被标记为抽象类。
非内部类不能被 声明为private 或是 protected
内存中所有的对象均放置在堆中,方法以及方法中的形参或局部变量放置在栈中。