类对象的格式
类名 标识符(变量名/对象的引用)= 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!
公众号 全战开花
获取更多技术干货
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。