关于面向对象,对于学习过Java这门语言的我们来说,可能已经是一个老生常谈的问题了,今天在看到Python面向对象的时候,有了一些新的认识,分享一下~
我们都知道,Python这门语言在设计之初,就已经是一门面向对象的语言了,这点与Java面向对象的思想极为相似,但是既然是两门语言,肯定是有不同的地方,下面我们接着来看!
演示代码-1
a = 1
print(id(a), type(a))
测试结果-1
3127235537552 <class 'int'>
这时一段简短的Python代码,对于学过Python的小伙伴们来说,我们都知道,在Python这门语言中,不需要声明数据类型,直接赋值即可!
在Python中,变量是对象的引用,因为变量存储的是对象的地址,变量通过地址引用了对象
所以,我们可以根据上面这句话理解这个代码中,数字 1 是对象,而a是变量,变量a存储对象 1 的地址来达到引用对象的目的!( 当然也可以创建一个类,来理解这些 )
变量位于:栈内存
对象位于:堆内存
对比Java中的面向对象
演示代码-2
public class Obj{
public static void main(String[] args) {
int a = 1;
Integer a2 = 2;
Integer a3 = new Integer(3); // 装箱
System.out.println(a);
System.out.println(a2.getClass());
System.out.println(a3.getClass());
}
}
产生错误,证明 a 不是对象数据类型
测试结果-2
1
class java.lang.Integer
class java.lang.Integer
Java是双类型系统,包含基本数据类型和对象数据类型,所以对于Java来说,上面的演示代码中,a 并不是对象,只是Java中的基本数据类型,只有值,没有id;a2、a3 是对象,是Java中的对象数据类型,有Class。
基本数据类型位于:栈内存
对象数据类型位于:堆内存
由于①和②两部分的代码比较相似,两门编程语言思想又都是面向对象,所以在区分上还是比较容易混淆的。
结论:<1> ① 中的 1 是对象,a 是变量引用对象(Python)
<2> ② 中的 1 是数值,a 是变量且只有值(Java)