Java 对象中变量属性的初始化时机与内存控制
来源:互联网 发布:网页小游戏源码 编辑:程序博客网 时间:2024/06/10 20:15
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方法已经结束,但这个线程还存活。
0 0
- Java 对象中变量属性的初始化时机与内存控制
- java中实例变量的初始化时机
- Java 变量初始化时机
- Java类变量的初始化时机
- Java静态变量初始化时机
- java中初始化对象变量的方法
- java中构造函数中变量初始化时机
- 类中属性初始化时机
- 面向对象_final修饰变量的初始化时机
- 五、JAVA中类的探究-类变量的初始化时机
- 类变量的初始化时机
- 实例变量的初始化时机
- 实例变量的初始化时机
- 类变量的初始化时机
- 实例变量的初始化时机
- 静态变量初始化的时机
- Java静态变量初始化及构造函数的执行顺序与执行时机分析
- Java 静态变量、静态代码块初始化的时机
- linux中怎么解压.tgz与.tar.gz文件
- JZOJ 4.22 2132——【2017.4.21普及】架设电话线
- Leveraging weak learners via adaptive boosting(AdaBoost)
- 部分电脑在linux下开关机啪啪响以及插耳机有电流声的解决方法
- python 字符串
- Java 对象中变量属性的初始化时机与内存控制
- vi与vim的区别
- Cocos2d-x坐标系介绍
- BZOJ 3470: Freda’s Walk
- 【linux】为ubuntu添加PATH环境变量
- C++剑指offer_面试题11_数值的整数次方(*)
- java 找出小于数字N的所有素数
- 两行代码的并查集
- Linux GCC常用命令