类名 标识符(变量名/对象的引用)= new 类名();
public class Tool { public static double Sum(double [] scores){ double sum=0.0; for( int i = 0; i<scores.length;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(); } }
首先JVM运行一个class文件时,使用类加载器先将Demo类加载到方法区,然后main方法压栈(入栈)。
·在栈中运行main方法,当jvm看到Phone时,会自动把Phone类加载到方法区;当看到局部变量p时,会在栈中开辟一块空间;当看到new Phone()时,会在堆内存中开辟空间,并将堆内存中的对应地址0x123赋值给p;还会拿到方法区的地址值指向方法区。
·在main方法中运行到给对象p的属性赋值时,通过地址去堆内存中找到相应属性并赋值,运行p.sendMessage()这一步时,也是根据地址值去堆内存中找到相应的对象,再用对象去方法区中找到sendMessage()方法,然后将sendMessage()方法压到栈中(入栈),调用完毕sendMessage()方法会出栈。
·main方法运行结束后会出栈。
通过以上步骤描述,我们可以理解,在栈内存中运行的方法,遵循"先进后出,后进先出"的原则。变量p指向堆内存中的空间,寻找方法信息,去执行该方法。
对象调用方法时,根据对象中方法标记(地址值),去类中寻找方法信息。这样哪怕是多个对象,方法信息只保存一份,节约内存空间。
引用类型作为参数,传递的是地址值。
成员变量:直接定义在类中的变量--直接定义在类的变量。
局部变量:定义在类中局部位置(函数中)的变量--直接定义在函数的变量。
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.从初始值上看:
匿名对象:没有名字的对象;
匿名对象,就是创建对象后,不将引用赋值给任何变量;
匿名对象虽然没有那个变量持有它的引用,但是对象创建出来的时候,自己是知道自己的引用,这个时候可以使用它;
如果一个对象只需要作为参数被使用一次,就可以定义为匿名对象,好处是在那行代码执行结束后,不会继续占有内存空间;
开源项目地址: https://github.com/371854496/...
java学习资料: https://github.com/371854496/...
各位觉得还阔以的话,点下Star,分享不易,thank you!
获取更多技术干货