变量可大致分为局部变量和成员变量。局部变量分为形参、方法内的局部变量和代码块内的局部变量(后两者必须显示初始化),作用时间短暂,它们都被储存的方法的栈内存中。类内定义的变量被称作成员变量,根据有无被static关键字修饰分为非静态变量(实例变量)和静态变量(类变量)。
Static只能修饰在类里定义的成员部分,包括成员变量、方法、内部类、初始化块、内部枚举类,不能修饰外部类,不能修饰局部变量、局部内部类。
从语法角度来看,程序可以在3个地方对实例变量执行初始化:
l 定义实例变量时指定初始值;
l 非静态初始化块中对实例变量指定初始值;
l 构造器中对实例变量指定初始值。
当经过编译处理之后,它们都将被提取到构造器中,在为变量分配内存之后。
同理,对静态变量的初始化经过编译后都将被提取到静态初始化块中,在为变量分配内存之后。
构造器只是负责对Java对象实例变量执行初始化,在执行构造器代码之前,该对象所占的内存空间已经被分配下来,保存的是空值。
子类构造器执行中既没有super调用,也没有this调用,系统将会在执行子类构造器之前,隐式调用父类无参数的构造器。
当变量的编译时类型和运行时类型不同时,通过该变量访问它引用的对象的实例变量时,该实例变量的值由声明该变量的类型决定。但通过该变量调用它引用的对象的实例方法时,该方法行为将由它实际所引用的对象来决定。
Java继承在处理成员变量和方法时是有区别的。
当程序创建一个子类对象时,系统不仅会为该类中定义的实例变量分配内存,也会为其父类中定义的所有实例变量分配内存,即使子类定义了与父类中同名实例变量。
对于一个使用final修饰的变量而言,如果定义该final变量时就指定初始值,而且这个初始值可以在编译时就确定下来,那么这个final变量将不再是一个变量,系统会将其当成“宏变量”处理。也就是说,所有出现该变量的地方,系统将直接把它当成对应的值处理。
如果final变量的赋值表达式是直接量、基本的算数表达式或字符串连接运算,没有访问普通变量,调用方法,Java编译器就会将其当成“宏变量”处理。
如果父类某个方法使用的final修饰符进行修饰,那么这个方法将不可能被它的子类访问到,因此这个方法也不可能被它的子类重写。
分享到:
相关推荐
50.java内存分配.zip50.java内存分配.zip50.java内存分配.zip50.java内存分配.zip50.java内存分配.zip50.java内存分配.zip50.java内存分配.zip50.java内存分配.zip50.java内存分配.zip50.java内存分配.zip50.java...
JAVA内存分配原理 Java 程序运行时的内存结构分成:方法区、栈内存、堆内存、本地方法栈几种。
Java内存分配原理精讲,针对每行代码的运行原因进行深层次的讲解!
详细讲解了Java中内存的分配情况,对学习Java有很大的帮助。
Java内存分配与管理是Java的核心技术之一,今天我们深入Java核心,详细介绍一下Java在内存分配方面的知识。一般Java在内存分配时会涉及到以下区域: ◆寄存器:我们在程序中无法控制 ◆栈:存放基本类型的...
深入Java核心_Java内存分配原理精讲深入Java核心_Java内存分配原理精讲深入Java核心_Java内存分配原理精讲深入Java核心_Java内存分配原理精讲
文档中介绍了: 寄存器 栈 堆 静态域 常量池 帮助java学习者从本质上理解java的运行机制。
Java内存分析
Java内存分配与管理是Java的核心技术之一,之前我们曾介绍过Java的内存管理与内存泄露以及Java垃圾回收方面的知识,今天我们再次深入Java核心,详细介绍一下Java在内存分配方面的知识。一般Java在内存分配时会涉及到...
Java有几种存储区域? java内存分配 Java内存模型 Java内存分配实例解析 String 常量池问题 堆(Heap)和非堆(Non-heap)内存 堆内存分配 非堆内存分配
本文将由浅入深详细介绍Java内存分配的原理,以帮助新手更轻松的学习Java。这类文章网上有很多,但大多比较零碎。本文从认知过程角度出发,将带给读者一个系统的介绍。
关于java内存分配的讲述。JAVA 文件编译执行与虚拟机(JVM)介绍
java内存分配和String类型的深度解析Java开发Java经验技巧共12页.pdf.zip
java中内存分配
JAVA内存分配与管理.doc
本文大致介绍了:JAVA内存分配与管理是Java的核心技术之一。
简单介绍java内存分配情况
深入java核心,了解java内存分配原理...