Java 对象的引用
说明
- 类的描述是公共特征,类必须通过对象才可以使用
- 声明对象指的是未开辟堆的内存对象,如果直接是使用此对象,会出现"NullPointerException",对象可以通过关键字 new 来进行堆内存空间的开辟,
有了堆内存引用的对象才称为实例化对象
- 堆内存保存的是对象中所有属性的内容,而栈内存保存的是堆内存的地址数值(为了简单理解,才称栈内存保存的是对象名称)
- 垃圾空间指的是没有任何栈内存指向的堆内存空间,会被
GC(垃圾回收机制)
不定时进行回收
class Book{
// 这种是没有封装性
// 由于没有使用 private 关键字来修饰变量所以下面的代码可以直接给 类赋值
String title;
double price;
public void getInfo(){
System.out.println("图书名称:"+ this.title + ",价格为:"+ this.price);
}
}
public class Test {
public static void main(String[] args) {
// 分别创建两个 Book 实例, 使用new关键字会开辟一个新的 堆内存空间
Book bookA = new Book(); // bookA 一个栈内存,指向 new 开辟的内存空间
Book bookB = new Book(); //
bookA.price = 89.8;
bookA.title = "Java 开发"; // 给 booA 这个对象赋值,
bookB.price = 69.8;
bookB.title = "JSP 开发"; // 给 booB 这个对象赋值
bookA.getInfo();
bookB.getInfo();
// 将 bookA 的地址引用,赋值给 bookB,此时 bookB 之前的赋值会被覆盖,然后之前的值会被视为 垃圾,会被 GC 回收
bookB = bookA;
bookB.price = 100.1; // 此时 bookA 和 bookB 都是指向同一个 堆内存空间, bookB的值改变,那么 bookA 的信息也就会跟着变化
bookA.getInfo(); // 图书名称:Java 开发,价格为:100.1
}
}
Java构造器
构造方法与普通方法的区别
- 构造方法是在实例化新对象(new)的时候只调用一次
- 普通方法是在实例化对象产生之后可以随意调用多次
在实际工作之中,构造方法的核心作用:在类对象实例化的时候设置属性的初始化内容。构造方法是为了属性初始化准备的。
对象的声明以及实例化的区别
class Book{
public Book(){
System.out.println("*************");
}
}
public class Test {
public static void main(String[] args) {
Book book = null; // 声明
book = new Book(); // 实例化
}
}
匿名对象
既然有了构造方法的概念,其实就可以根据此方法使用匿名对象。之前定义都是属于有名对象,所有的对象都给了一个名字。但是这个名字真正使用的时候调用的肯定是堆内存空间。即:真实的对象都保存在了堆内存空间之中,如果没有栈指向的对象就被称为
下面省下了 Book 类,以及 Book 的构造器和 getter 与 setter 方法。
public class Test {
public static void main(String[] args) {
// 没有名声一个栈对象的名字指向,Book 就是一个匿名对象
new Book("Java 开发", 200).getInfo();
}
}
由于匿名对象没有其他对象对其引用,所以只能使用一次,使用过后,就会被视为垃圾,等待 GC 回收