Java 对象中变量属性的初始化时机与内存控制
2017-04-25 21:00
375 查看
Java 对象与内存控制
1.java变量可以分成员变量和局部变量
局部变量:随入栈活,出栈消亡,存储在栈中形参: 在方法签名中定义:void (int a){} ,在调用时初始化
方法体内局部变量: 必须显示初始化
代码块中的局部变量:必须显示初始化
成员变量(field)
没有使用static修饰的叫实例变量or非静态变量,属于该类的对象实例,对象
使用static修饰的叫类变量or静态变量,属于类本身。
tips:就如在main方法中实例变量必须实例对象才能调用,而类变量可以直接调用
2. 实例变量的初始化的时机
a.定义的实例变量的指定初始值b.非静态初始化中对实例变量指定初始值
c.构造器对实例变量的初始值
其中a,b早与c执行,a,b执行顺序与源程序排列顺序相同,每new一个实例对象就要在堆区开辟一个新区域存放实例变量
3.类变量的初始化时机
当加载一个类的时候,是按照a,找到变量在内存中分配内存,并按类型默认附初值null,0,0.0,false
b,按顺序加载静态代码块代码块和要赋值的静态变量
c,按顺序加载普通代码块和要赋值的实例变量
d,构造器执行
public class Dtest {
public static void main(String[] args) {
System.out.println(D.D_STATIC.c);
D d = new D(2.8);
System.out.println(d.c);
}
}
class D{
final static D D_STATIC = new D(2.8); //在执行这一步D_STATIC=new D(2.8) 的时候,i 和c 都只是分配内存并默认附默认值null,0.0,0.0,所以执行的时候i=0.0。
static double i = 20;
// 在a 附值0.0 ,在b赋值20.0
double c;
//只在a执行
public D(double a){
c= i-a;
}
}
public class C {
{
gender = "famale";
name = "Java";
System.out.println("staticname=" + this.name);
System.out.println("staticgender=" + this.gender);
}
String name;
String gender = "male";
public static void main(String[] args) {
C c = new C();
System.out.println("name=" + c.name);
System.out.println("gender=" + c.gender);
}
}
final 关键字的使用
在final修饰的变量,不管他是类变量,实例变量还是局部变量,只要定义该变量指定了初始值,在编译后就不能在被修改。(1.)
final 可以修饰变量 : 在赋值以后不能在修改值
final 可以修饰方法 : 被final修饰的方法不能被重写
final 可以修饰类 : 被final修饰的类不能派生出子类
(2.)
final 对实例变量的初始化值可以在
a,在定义的时候赋值
b,在非静态初始化代码块指定值
c,在构造器初始
(3.)
final 对类变量的初始化可以在
a,在定义的时候赋值
b,在静态代码块中指定初始值
(4.)
在内部类中要调用外部的局部变量,需要将局部变量定义成final,因为可以出现该变量的值随意改变从而将引起混乱,因此java编译器要求所有的被内部类访问的局部变量必须使用final修饰。 如: new Thread(){ } ,main方法已经结束,但这个线程还存活。
相关文章推荐
- java对象和内存的控制深入浅出
- Java内存结构、类的初始化、及对象构造过程
- java对象中继承和变量初始化顺序浅析
- java内存控制和变量问题
- 尚硅谷第四课0722班 java-特殊流程控制 -数组元素的默认初始化-数组操作常见问题-Java内存的结构
- 关于JAVA中变量的初始化及类属性的默认值问题
- Java - Static和Final修饰类属性变量及初始化
- JAVA学习.JAVA对象构建内存理解&静态方法和变量的理解和使用.
- (二)Java对象与内存控制
- Java中创建对象时,初始化成员变量的代码的执行顺序
- Java类属性和对象属性的初始化顺序
- Java进阶---对象与内存控制(一)
- JAVA之1.封装一类三角形对象Triangle,该类对象具有三条边的属性,具有初始化三角形的功能、修改边长的功能、判断三条边能否构成三角形的功能、求周长的功能、求面积的功能。
- java:浅谈数组与对象的内存控制
- java的对象、对象句柄、变量等在内存的分布
- Java内存结构、类的初始化、及对象构造过程
- Java类中类属性和对象属性的初始化顺序
- 【疯狂Java_突破程序员基本功的16课】charpt2 对象与内存控制
- 关于JAVA中变量的初始化及类属性的默认值问题
- [Java] Java类属性和对象属性的初始化顺序