标签:理解 stat 代码 子类 默认 地址 静态变量 object类 传递
Java通过[类型 变量名]的方式声明了一个变量。
当我们声明一个变量的时候,相当于在内存中为它指定了一个地址,通过变量我们可以访问到它代表的这块内存空间。
我们可以理解成,变量里存的就是它代表的这块内存空间里存储的值。
int a;// 这时只声明了一个变量,还没有初始化,Java是不能使用未初始化的变量的。
int b = 10;// 在声明变量的同时对它进行初始化。
Object c = new Object();// 声明了一个对象类型的变量,并通过new操作符创建了一个Object类型的实例,并将这个实例的引用赋给了变量c。
Java中的变量,根据作用域不同,可以分为三类:
如果不对变量进行初始化,Java不会给局部变量指定默认值,对静态变量和实例变量会指定初始值。
数值型为0,布尔型为false,引用型为null。
这里首先明确一个概念。
方法签名里的参数叫做形参,它们相当于只声明而没有初始化的变量。
调用方法时,括号里的参数叫做实参。
调用方法的过程。
有这么一句话,对于学习Java的人来说是比较熟悉的。
基本类型传递值,类类型传递引用。(引用是什么?就是地址啊,通过它可以访问对象啊。)
打个比方,声明一个变量,相当于开了个房(咳!咳咳咳!)。
基本类型的变量,存进去的就是个娃娃(0101这种二进制数);而类类型呢,存进去的是一个钥匙(地址)。
当把变量当做实参传递给方法的时候,基本类型给了你一个娃娃的复制品,而类类型给了你一把复制的钥匙。实际上它们给你的都是他们房间里放的东西的复制品。(也就是变量内存中存的数据的拷贝)
对于基本类型来说你用的只不过这些房间里东西的复制品,所以,这些房间里方的东西该是什么还是什么。这就是为什么对于基本类型来说,在方法中怎么操作形参的值,都不会影响到外边实参的值。
再说说类类型哈,你拿到复制好的钥匙,去开了那个房间的门,发现里边是个美女......然后你改变了这个房间里的状态,当有人用房间里的钥匙开了这个房间的门之后,看到的肯定是你改变后的状态呀。这就是为什么当我们传递一个类类型给方法时,方法内部修改这个对象的属性时,会影响实参所代表的对象的原因。
有人说,我在方法内部再创建一个对象给形参,会不会影响外面的实参呢?当然不会,你只不过是换了一把钥匙而已,不影响实参房间中存的那把钥匙。
有点乱,总结下:
在Java中有静态变量和实例变量。
静态变量的初始化可以在声明变量的同时初始化,也可以在静态代码块中初始化。这时会根据声明的顺序执行。
public static int a = 10;
static {
a = 20;
}// 最终a = 20
static {
b = 20;
}
public static int b = 10;// 最终b = 10
实例变量的初始化同理,不过比静态变量多一个在构造方法中初始化。构造方法是最后执行的,所以会以构造方法中的值为准。
如果引入继承的话,执行的顺序为
因为Java会先加载类,此时执行静态代码块中的内容。再执行父类的创建,最后执行子类的创建。
标签:理解 stat 代码 子类 默认 地址 静态变量 object类 传递
原文地址:https://www.cnblogs.com/keathBlog/p/12844919.html