关键词搜索

源码搜索 ×
×

(Java)类与对象

发布2019-10-25浏览578次

详情内容

一、类与对象的关系

在这里插入图片描述
在这里插入图片描述

二、类的定义

类是由属性和方法组成的
属性中定义类需要的一个个具体信息,实际上一个属性就是一个变量,二方法是一些操作的行为

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 就表示开辟新的堆内存空间
      
      • 1
      • 2

      或者

      类名 对象名称 = new 类名();
      
      • 1
      public class Test{
          public static void main(String[] args) {
              Person per = new Person(); // 创建并实例化对象
          }
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5

      所有的对象名称都在栈内存中保存,而对象的具体内容则保存在对应的堆内存中,必须使用 new 关键字才能开辟堆内存空间,堆内存里保存的属性信息,此时由于per 对象刚刚被实例化完成,所以对象里面的属性内容都是默认值,字符串的默认值是 null,整数的默认值是0
      在这里插入图片描述
      在栈内存中实际上保存的是堆内存空间的访问地址

      访问对象的属性或方法

      访问属性:对象名称.属性名
      访问方法:对象名称.方法名()
      
      • 1
      • 2
      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)
        
        • 1
        • 2

        在这里插入图片描述
        只要使用了未实例化的对象,则肯定会出现此异常

        四、创建多个对象

        类属于引用数据类型,而且从数组的使用上也可以发现,引用数据类型是指一段堆内存空间可以同时被多个栈内存所指向。

        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();
            }
        }
        
          8
        • 9
        • 10
        • 11
        • 12
        • 13
        • 14
        • 15

        在这里插入图片描述
        两个对象的输出内容是一样的,实际上所谓的引用传递,就是将一个堆内存空间的使用权给多个栈内存空间,每个栈内存空间可以修改堆内存的内容
        在这里插入图片描述
        引用传递的本质就是在于不同的栈内存空间将指向同一块堆内存(一个栈内存只能够保存一个堆内存空间的地址)

        一个栈内存空间只能指向一个堆内存空间,如果想要在指向其他的堆内存空间,则必须先断开已有的指向才能分配新的指向

        五、关于垃圾空间的释放

        Java本身提供垃圾收集机制(简称 GC,Garbage Collection),会不定期的释放不用的内存空间,只要对象不使用了,就会等待 GC 释放空内存。

        相关技术文章

        点击QQ咨询
        开通会员
        返回顶部
        ×
        微信扫码支付
        微信扫码支付
        确定支付下载
        请使用微信描二维码支付
        ×

        提示信息

        ×

        选择支付方式

        • 微信支付
        • 支付宝付款
        确定支付下载