值传递和引用传递
值传递和引用传递 值传递(pass by value)是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。 引用传递(pass…
final关键字有这是无法改变的或者终态的含义,可以修饰非抽象类,非抽象类成员方法和变量
注意:父类的private成员方法是不能被子类方法覆盖的,因此private类型的方法默认是final的
在设计时,如果该类不需要子类,类的实现细节不允许改变,确信这个类不会再被扩展
该类不允许子类覆盖该方法,设计为final方法的原因主要有:
final修饰变量有三种,静态变量,实例变量和局部变量
另外,final变量在定义的时候,可以先声明而不给定值,这种变量就是final空白,编译器确保final变量在使用之前被初始化,否则报错。
public void testFinal(){
final int a; //final 空白
final int b=4; //局部变量
a=5;
}
当参数为final时,你可以使用该参数,但是无法修改该参数的值
public void testFinal2(final int i){
// i++; i是final的,不允许修改
System.out.println(i);
}
static表示全局的或者静态的意思,用来修饰成员变量和成员方法,也可以形成静态代码块。
被static修饰的成员变量或者方法,独立于该类的任何对象,不依赖于特定实例,被所有实例共享,只要这个类被加载,JVM就可以根据类名在运行时数据区的方法区找到它们,因此static对象可以在任何对象创建之前访问。
static被private修饰,可以在本类中被访问,无法在其他类中使用,private表示访问限定,static表示可以不实例化就访问,以此类推。
按照是否静态,可以将类成员变量分为:
被类名或者实例调用,因此static方法中不能有this或者super关键字,不能访问非static方法或者变量,static方法必须被实现,独立于任何实例,不能是abstract的。
在JVM加载类时,就会执行该代码,可以有多个,且位置任意,JVM将按顺序依次执行这些代码块,每个代码块就执行一次。
static和final一起修饰成员变量或者成员方法,可以理解为“全局变量”
**对于变量:**表示一旦给值就不可修改(final属性),并且通过类名可以访问(static属性)
**对于方法:**表示不可覆盖(final属性),并且通过类名直接访问(static属性)
对于变量被final修饰不可修改,但对于一些容器类型(比如ArrayList,HashMap)的实例变量,不可以修改容器本身,但容器中存放的对象可以被修改的
值传递和引用传递 值传递(pass by value)是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。 引用传递(pass…
Java内存模型 为了屏蔽掉各种硬件和操作系统间访问内存的差异,以实现让Java程序在各种平台下都达到一致的并发效果,Java定义Java内存模型。 JMM是一种规范,规范了JVM与计算机内存是如何协同工作的。它规定了一个线程如何和何时可以看到其他线程修改过后共享变量的值,以及在必须时如何同步的访问共享变量。 堆是运行时动态分配内存的,存取速度较慢,…