Java面向对象入门

面向对象是Java编程的核心,它模拟真实世界中的对象和交互。通过类定义对象的属性和行为,然后实例化对象进行操作。例如,艾希是英雄类的一个实例,具有名字、位置和等级等属性。对象存储在堆中,而引用(如hero)存储在栈中,引用指向对象的内存地址。当多个引用指向同一对象时,修改属性会影响到所有引用。此外,数组作为对象属性时,其元素也会根据类型存储在相应区域。
摘要由CSDN通过智能技术生成

什么是面向对象

面向对象是Java的核心思想,也是我们生活中大家所习以为常的思想,只不过Java巧妙地把我们生活中的对象思想结合到了编程里,对象之间通过相互作用传递信息,实现程序开发。面向对象让我们可以更方便地开发,同时也更利于开发复杂的项目。

举个简单的例子来解释面向过程和面向对象的区别:

比如你要开车去厦门,面向过程方法打个不恰当比方:

你要打开车门,坐进车里,点火发动,不断控制油门和方向盘,跟随导航开到厦门。中间可能还涉及各种红绿灯停车,各种路况刹车,或者人累了休息会...甚至车该怎么启动,车里各部件如何运作等等...

面向对象方法打个不恰当的比方:

你有个“人”,有辆“车”,通过调用“人”对象的“驾驶的方法”,和“车”对象的“行驶的方法”,再将目的地设定为厦门,人就可以自动开车去厦门。

类和对象

Java中想要创建对象,需要先有对象的类,举个英雄联盟的例子,“艾希”是“英雄”这个类中的一个具体的对象,“技能”也是一个类,“魔法水晶箭”就是这个类中的一个具体对象。

有了类就可以创建该类的对象,Java中创建一个对象的语法是这样的:Hero hero = new Hero();

类名 对象名 = new 类名();

类中可以定义有成员属性,成员方法,一旦创建了一个该类的对象,那么该对象也拥有这些属性和方法。

对象调用属性和方法的方式:对象名.属性名 对象名.方法名

对象的内存布局

如图所示,写了一个Hero英雄类,这个类里面有名字属性,有位置属性,有等级属性。我们在main方法里写下左上角方框里那些代码,看看会发生什么。

  1. new这个操作会在堆中开辟一个对象空间,且该空间中有name属性、position属性、level属性各自的空间,最后会将这个对象空间的地址赋给栈中的hero这个对象名,hero就是这个对象的“引用”,指向这个对象空间,但hero不是这个对象本身,对象本身就在堆中。

  1. 分别调用hero的name属性和position属性,将“艾希”“下路”分别赋给它们。由于name和position的值是字符串类型,所以“艾希”“下路”会存放在方法区内常量池中,并且有各自的地址分别赋给对象空间中name属性和position属性的位置。

  1. 将15赋给level这个属性,由于level是int数据类型,所以存放在对象的空间中。

  1. 如果我们新建一个Hero类的变量名(即引用)hero1,令hero1 = hero;也就是将hero所指向的地址赋给hero1一份,因此hero1也指向这个对象空间。当hero1调用其中的属性并修改时,通过hero访问对象属性也能发现被修改,因为对象是引用类型,hero和hero1只是这个对象的不同“代号”而已。

  1. 如果Hero类中还有一个String类型的数组属性pos,那么我们在main方法中通过hero.pos = new String[3];创建一个数组赋给hero.pos属性,相应地,也会在堆内存中开辟一个数组的空间,通过地址的方式存在对象空间内。由于该数组是String类型数组,因此每个元素都是字符串类型,也会存在常量池中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值