Java

成员变量、局部变量

常量——  被final关键字修饰   eg:final String a=null;

成员变量(全局变量):在变量定义部分定义的变量叫做类的成员变量,成员变量在整个类中都有效.

成员变量包括:类变量(静态变量),实例变量

 

类变量(静态变量)—— 是类中独立于方法之外的变量,用static修饰。;

类的静态变量在内存中只有一个,java虚拟机在加载类的过程中为静态变量分配内存,静态变量位于方法区,被类的所有实例共享。静态变量可以直接通过类名进行访问,其生命周期取决于类的生命周期。

 

实例变量——  没有static修饰,定义在主函数外    eg:Stringa;

实例变量取决于类的实例。每创建一个实例,java虚拟机就会为实例变量分配一次内存,实例变量位于堆区中,其生命周期取决于实例的生命周期。

 

局部变量:在方法体中定义的变量叫做局部变量,局部变量只在定义它的方法中有效.

 

Eg:

public class Temp {
final int b=2;//常量【值不可更改】
int t; //实例变量Static int age=10;//类变量
 public static void main(String args[]){
int t=1; //局部变量
 System.out.println(t); //打印局部变量
 Temp a= new Temp(); //创建实例
 System.out.println(a.t); //通过实例访问实例变量
 }
 }

成员变量与局部变量区别:

成员变量

1.成员变量有默认初始化值。

  基本类型   

   默认值    

byte

0

short

0

int

0

long

0L

float

0.0f

double

0.0d

char

'\u0000'空格

boolean

false

2.成员变量定义在类中,在整个类中都可以被访问。

3.成员变量随着对象的建立而建立,随着对象的消失而消失,存在于对象所在的堆内存中。

 

局部变量

1.局部变量没有默认初始化值 ,必须先声明赋值后才可以使用。

2.定义在局部范围内,如:方法内等,作用域只在所属的区域有效。

3.局部变量存在于栈内存中,作用的范围结束,变量空间会自动释放。

4.在使用变量时需要遵循的原则为:就近原则,先在局部范围找,有就使用;接着在成员位置找。

 

方法的重载

定义——在一个类中方法名相同,但参数列表不用,与是否具有相同的访问修饰符、是否有返回值、是否抛出异常无关。

参数列表不同包括:

1.      方法中有参数无参数

2.      参数类型不同

3.      参数个数不同

4.      当参数类型、个数相同时,顺序不同

构造函数

n  用于给对象进行初始化,是给与之对应的对象进行初始化,它具有针对性,函数中的一种。

特点:

1:该函数的名称和所在类的名称相同。

2:不需要定义返回值类型。

3:该函数没有具体的返回值。

所有对象创建时,都需要初始化才可以使用

注意:

1.      一个类在定义时,如果没有定义过构造函数,那么该类中会自动生成一个空参数的构造函数,为了方便该类创建对象,完成初始化。如果在类中自定义了构造函数,那么默认的构造函数就没有了。

2. 一个类中,可以有多个构造函数,因为它们的函数名称都相同,所以只能通过参数列表来区分。所以,一个类中如果出现多个构造函数。它们的存在是以重载体现的。

构造函数和一般函数区别

1:格式不同:

构造函数不存在返回类型,函数名与所在类的类名一致;

普通函数有返回类型,函数名可以根据需求进行命名。

2:调用时期不同:

构造函数在类的对象创建时就运行;

普通函数在对象调用时才会执行。

3. 执行次数不同

一个对象创建后,其构造函数只执行一次,就是创建时执行;

一个对象创建后,其普通函数可以执行多次,取决于对象的调用次数。

EG:

public class Demo{
   private int num=0;
 
//无参构造函数
Demo()
{
System.out.println("constractor_run");
}
 
//有参构造函数
Demo(int num)
{
System.out.println("constractor_args_run");
}
 
//普通成员函数
public void demoFunction()
{
System.out.println("function_run");
}}

构造函数的使用场景

构造函数是对新对象进行初始化,那么当开发中分析事物的时候,发现事物一出现就具备了某些特征时,就可以将其定义在构造函数中,这样方便快捷,也符合面向对象的编程思想。