java变量

本文详细介绍了Java中的变量类型,包括成员变量和局部变量的区别与初始化过程。重点解释了局部变量的作用域、生命周期及其存储位置,同时深入探讨了成员变量的初始化顺序及如何在类中正确地声明和使用这些变量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、java程序的变量大体可以分为:成员变量、局部变量

局部变量:

1、形参:在方法签名中定义的局部变量,由方法调用者负责为其赋值,随方法的结束而消亡。

2、方法内的局部变量:在方法内定义的局部变量,必须在方法体内对其进行显式初始化。这种类型的局部变量从初始化完成后开始生效,随方法的结束而消亡。

3、代码块内的局部变量: 在代码块内的局部变量,必须在代码块内对其进行显式初始化。这种类型的局部变量从初始化完成后开始生效,随方法的结束而消亡。

 

它们作用的时间很短,被存储在方法的栈内存中。

 

成员变量:

1、类变量(静态变量):使用static修饰

2、实例变量(非静态变量):没使用static修饰

 

表面上看,java类里定义成员变量不需要先后顺序,但实际上,java要求定义成员变量时必须采用合法的前向引用。换句话说,当你使用某个引用时,该引用应当指向某一内存空间。类变量先于实例变量被初始化。

 

在同一个JVM内,每个类只对应一个class对象。因此,同一个JVM内的一个类的类变量只分配一块内存空间。而对于实例变量来说,该类没创建一个实例,就需要为实例变量分配一块内存空间。

 

大部分时候会把类和对象严格的分开,但从另外一个角度看,类也是对象。所有类都是Class的实例。每个类初始化后,系统都会为该类创建一个对应的Class实例。程序可以通过反射来获取某个类所对应的Class实例。

例如,要获取Person类对应的Class实例,通过Person.class,或者Class.forName("Person"),来获得。

 

二、变量的初始化

实例变量初始化:

1、可以在定义实例变量时指定初值

2、可以在非静态初始化代码块中对实例变量进行初始化

3、可以在构造器中对实例变量指定初值

 

其中第1、2种方式比第3种方式先执行,而第1、2种方式的执行顺序则跟它们在源程序中的顺序有关。

public class VariableDemo {
	public static void main(String[] args) {
		Person per = new Person("阳光的味道3",3);
		System.out.println(per.name);
		System.out.println(per.age);
	}
}
class Person{
	//在定义实例变量时指定初值
	int age = 1 ;
	//在非静态初始化代码块中对实例变量进行初始化
	{
		int age = 2 ;
		System.out.println("执行了非静态代码块");
	}
	String name = "阳光的味道1";
	//在构造器中对实例变量指定初值
	Person(String name , int age ){
		this.name = name ;
		this.age = age ;
		System.out.println("执行了构造器");
	}
}
/*out:
	执行了非静态代码块
	执行了构造器
	阳光的味道3
	3*/

 

类变量的初始化:

1、可以在定义类变量时初始化

2、可以在静态初始化代码块中初始化

 

执行顺序与代码顺序相同。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值