(Java)类与对象
一、类与对象的关系
二、类的定义
类是由属性和方法组成的
属性中定义类需要的一个个具体信息,实际上一个属性就是一个变量,二方法是一些操作的行为
class 类名称{
数据类型 属性;
.....
public 返回值的数据类型 方法名称(参数 1,参数 2...){
程序语句;
}
}
在类中的属性实际上也就是相当于一个个的变量,有时候也称为 Field(成员)
class Person{
String name;
int age;
public void tell(){
System.out.print("name: " + name + "age: " + age);
}
}
此处的方法并没有加上 static
关键字,这是因为此时定义的方法将要由对象调用,而不像之前那样与主方法定义在一个类中且由主方法直接调用
三、对象的创建及使用
类名 对象名称 = null; // 声明对象
对象名称 = new 类名(); //实例化对象,只要有关键字 new 就表示开辟新的堆内存空间
或者
类名 对象名称 = new 类名();
public class Test{
public static void main(String[] args) {
Person per = new Person(); // 创建并实例化对象
}
}
所有的对象名称都在栈内存中保存,而对象的具体内容则保存在对应的堆内存中,必须使用 new 关键字才能开辟堆内存空间,堆内存里保存的属性信息,此时由于per 对象刚刚被实例化完成,所以对象里面的属性内容都是默认值,字符串的默认值是 null,整数的默认值是0
在栈内存中实际上保存的是堆内存空间的访问地址
访问对象的属性或方法:
访问属性:对象名称.属性名
访问方法:对象名称.方法名()
public class Test{
public static void main(String[] args) {
Person per = new Person(); // 创建并实例化对象
per.name = "Java";
per.age = 30;
}
}
注意:
如果一个对象要被使用,则对象必须被实例化,否则程序会出现以下异常:
Exception in thread "main" java.lang.NullPointerException
at Test.main(Test.java:13)
只要使用了未实例化的对象,则肯定会出现此异常
四、创建多个对象
类属于引用数据类型,而且从数组的使用上也可以发现,引用数据类型是指一段堆内存空间可以同时被多个栈内存所指向。
public class Test{
public static void main(String[] args) {
Person per1 = null;
Person per2 = null;
per1 = new Person(); // 只实例化 per1 一个对象
per2 = per1; // 把 per1 的堆内存空间使用权给 per2
per1.name = "Java";
per1.age = 30;
per2.age = 33;
System.out.print("per1 对象中的内容:");
per1.tell();
System.out.print("per2 对象中的内容:");
per2.tell();
}
}
两个对象的输出内容是一样的,实际上所谓的引用传递,就是将一个堆内存空间的使用权给多个栈内存空间,每个栈内存空间可以修改堆内存的内容
引用传递的本质就是在于不同的栈内存空间将指向同一块堆内存(一个栈内存只能够保存一个堆内存空间的地址)
一个栈内存空间只能指向一个堆内存空间,如果想要在指向其他的堆内存空间,则必须先断开已有的指向才能分配新的指向
五、关于垃圾空间的释放
Java本身提供垃圾收集机制(简称 GC,Garbage Collection),会不定期的释放不用的内存空间,只要对象不使用了,就会等待 GC 释放空内存。
上一篇: 初学python
下一篇: 【Java】java 类与对象 学习简述