类:类是一组共性的产物,是同一类事物的集中表现。
对象:是一种个性的体现,是个体的产物。
对象中的所有操作行为都由类决定,所以,在使用中只要是类定义出的操作对象都可以应用,而如果类没有定义出的操作,对象肯定无法使用。
类是对象的模板,对象是类的实例
在Java中可以使用class关键字来定义一个类,在类中有两大组成部分:属性(变量)、方法。
class Person{ // 定义类 String name ; // 表示一个人的姓名 int age ; // 表示一个人的年龄 public void tell(){ // 表示一个功能,说话 System.out.println("姓名:" + name + ",年龄:" + age) ; } }; |
在本程序中就定义出了一个类,里面有两个属性:name、age,和一个方法:tell()。在tell()方法将进行内容的输出。一个类定义完成之后肯定无法直接使用,需要依靠对象进行操作,那么下面给出对象定义格式:
· 类名称 对象名称 = new 类名称() ;
一旦有了对象之后就可以通过“对象.属性”或者是“对象.方法()”进行类的调用:
· 对象产生:Person per = new Person() ; 既然存在了关键字new,而且类又属于引用数据类型,那么肯定现在就开辟了相应的栈及堆内存空间,而且以上的代码可以拆分成两步:
|- 声明对象:Person per = null ; à 在栈内存中声明
|- 实例化对象:per = new Person() ; à 开辟对应的堆内存空间
而且一定要记住的是,如果一个对象没有被实例化而直接使用的话,将出现以下的问题:
Exception in thread "main" java.lang.NullPointerException |
那么,如果现在按照以上的规律产生第二个对象肯定是不会互相影响的,因为只要存在了关键字new就表示永远会开辟新的内存空间。
每一个对象拥有各自的内存空间,所以不会互相影响,而且可以发现一点,每一个对象中实际上保存的只是属性,并没有保存方法,因为所有的方法都是每个对象所共同拥有的,保存在全局代码区之中。
栈内存保存的是对堆内存的引用地址,而堆内存中保存的是每一个对象所拥有的属性,而全局代码区之中保存的是所有类中的方法,表示公共调用。
对象的引用传递:
在数组中本身也属于引用传递,而且发现所谓的引用传递指的就是一个堆内存空间,可以同时被多个栈内存所指向,那么类本身也是一样的,即:一块堆内存可以同时被多个对象所同时指向。