java中使用面向对象_java中的面向对象

类对象的格式

类名 标识符(变量名/对象的引用)= new 类名();

public class Tool {

public static double Sum(double [] scores){

double sum=0.0;

for( int i = 0; i

sum+=scores[i];

}

return sum;

}

}

Tool tool = new Tool();

sum1=tool.Sum(scores)

面向过程和面向对象的区别

1.关注点不同:

面向过程:关心的是事件中的每一步功能怎么做;

面向对象:关心的是事件中的每一步功能有没有什么对象已经实现好了,然后直接拿来使用

2.效率不同:

面向过程:因为自己要参与每一步的实现,所以效率比较慢;

面向对象:因为大多数都是调用别人已经实现好的功能,所以效率比较高;

3.开发质量:

面向过程:因为是自己一步步实现的,大多数情况会有地方出现问题;

面向对象:因为大多数都是调用别人写好的功能,而这些功能一般都进过大量的验证,质量有保证;

4.使用范围不同:

面向过程:适合解决需求简单的问题;

面向对象:更适合解决复杂的需求;

面向对象是基于面向过程的;

面向对象代码例子:

public class Car {

String color;

void run(){

System.out.println(color+"颜色的车在行驶");

}

}

class Test{

public static void main(String[] args){

Car car = new Car();

car.color="红";

car.run();

}

}

一个对象调用一个方法内存图

ed5928fb8b83ec054a487729d45397ea.png

首先JVM运行一个class文件时,使用类加载器先将Demo类加载到方法区,然后main方法压栈(入栈)。

·在栈中运行main方法,当jvm看到Phone时,会自动把Phone类加载到方法区;当看到局部变量p时,会在栈中开辟一块空间;当看到new Phone()时,会在堆内存中开辟空间,并将堆内存中的对应地址0x123赋值给p;还会拿到方法区的地址值指向方法区。

·在main方法中运行到给对象p的属性赋值时,通过地址去堆内存中找到相应属性并赋值,运行p.sendMessage()这一步时,也是根据地址值去堆内存中找到相应的对象,再用对象去方法区中找到sendMessage()方法,然后将sendMessage()方法压到栈中(入栈),调用完毕sendMessage()方法会出栈。

·main方法运行结束后会出栈。

通过以上步骤描述,我们可以理解,在栈内存中运行的方法,遵循"先进后出,后进先出"的原则。变量p指向堆内存中的空间,寻找方法信息,去执行该方法。

两个对象调用同一个方法内存图

cdbf7d31200c3e3c9d38efe9aa25a799.png

对象调用方法时,根据对象中方法标记(地址值),去类中寻找方法信息。这样哪怕是多个对象,方法信息只保存一份,节约内存空间。

一个引用,作为参数传递到方法中内存图

e6c5b52e1803e29fa58478bf51dc50e3.png

引用类型作为参数,传递的是地址值。

局部变量和成员变量

成员变量:直接定义在类中的变量--直接定义在类的变量。

局部变量:定义在类中局部位置(函数中)的变量--直接定义在函数的变量。

public class test {

int a = 10;//成员变量

public static void main(String[] args ){

int a =100;//局部变量

System.out.println("a:"+a);//100

}

}

区别

1.从定义的位置上:

局部变量:函数里面

成员变量:直接定义在类中

2.从内存上看:

局部变量:栈内存中

成员变量:堆内存中

3.从生命周期(指的是从分配空间到回收空间)上看:

局部变量:随着函数进栈执行,开始分配空间;函数之行结束出栈,空间被回收

成员变量:随着创建对象开始分配空间;随着对象的空间变成垃圾空间被回收而被回收;

4.从使用范围上:

局部变量:仅限于定义它的局部范围里面(比如函数中)

成员变量:整个类中

5.从初始值上看:

局部变量:没有默认值,使用前必须先要初始化

匿名对象

匿名对象:没有名字的对象;

匿名对象,就是创建对象后,不将引用赋值给任何变量;

匿名对象虽然没有那个变量持有它的引用,但是对象创建出来的时候,自己是知道自己的引用,这个时候可以使用它;

匿名对象的应用

如果一个对象只需要作为参数被使用一次,就可以定义为匿名对象,好处是在那行代码执行结束后,不会继续占有内存空间;

开源地址

各位觉得还阔以的话,点下Star,分享不易,thank you!

公众号 全战开花

获取更多技术干货

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值