一、局部变量与成员变量
局部变量
定义:在方法内定义的变量成为局部变量
作用域:从变量定义开始到方法结束
注意:
1.局部变量只能在当前方法中使用,其他地方不可以使用
2.局部变量如果没有使用,只是定义的话并不会报错,但是如果有引用必须需要进行初始化才可以
3.局部变量没有默认值,所以使用前必须初始化
成员变量(全局变量):
定义:在方法之外,类定义的变量成为成员变量
作用域:整个类体都可以访问
注意:
成员变量有默认值,系统会根据变量的数据类型默认的给默认值
int的默认值为0,boolean的默认值为false,引用类型的默认值为null
局部变量与成员变量的区别:
–声明位置不同 类中 方法中
–作用范围不同:当前类的方法 当前方法
▪不同的方法中即使有同名的局部变量,没有关系,互不影响,建议相同
–内存存放的位置的:栈内存中 堆内存中
–成员变量有默认值;局部变量没有默认值
二、引用类型
▪Java语言中除基本类型之外的变量类型都称之为引用类型。
▪Java中的对象和数组是通过引用对其操作的.
–引用可以理解为一种受限的指针
–指针是可以进行不整数做加减运算的,两个指针之间也可以进行大小比较运算和相减运算。引用不行,叧能进行赋值运算。
–引用就是一个变量或对象的别名(引用的本质是一个对象);指针是一个段内存空间的地址(指向存储一个变量值的空间或一个对象的空间)
三、内存分析
▪栈:
–存放:局部变量
–先进后出,自下而上存储
–方法执行完毕,自动释放空间
▪堆:
–存放new出来的对象
–需要垃圾回收器来回收:System.gc()
▪方法区:
–存放:类的信息(代码)、static变量、字符串常量等.
四、构造方法
构造方法:
在创建对象的时候默认会调用构造方法,在堆中进行存储,主要目的是为了对成员变量进行初始化操作
语法:
修饰符:4个,后面再讲(public、protected、[default]、private)
返回值:构造方法没有返回值
方法名:构造方法的名称必须和类名保持一致
参数列表:和普通方法一样
方法体:主要是为成员变量进行初始化操作
注意:
1、当程序中没有显示的声明一个构造方法的时候,系统会给你一个默认的不带任何参数的空构造方法来供你创建对象使用
2、当你在程序中显示的声明了一个非空的构造方法,那么java编译器就不会再给你那个空参的构造方法了,
但是这时候你又想用空参的构造方法,那么只有再定义一个构造方法了
3、一个类中可以有多个构造方法
重载(overload):在一个类中可以有多个同名的方法,但是要求方法的参数列表不同
三方面的不同:
1、参数个数不同
2、参数类型不同
3、参数顺序不同
注意:
一般都需要使用构造方法的重载,因为成员变量可能会有很多个,但是我们只需要对部分成员变量进行初始化操作
public class Temp {
//属性(成员变量,全局变量)
String name;
int age;
public Temp(){
System.out.println("空构造方法被执行了... ...");
}
//定义一个构造方法
public Temp(String tname,int tage){
System.out.println("Teacher(String name,int age)被执行了... ...");
name = tname;
age = tage;
}
public Temp(int tage,String tname){
}
public Temp(int tage){
}
public void test(String name,int age){
}
public void test(int age,String name){
}
public static void main(String[] args) {
//创建对象
Temp temp1 = new Temp();
temp1.name = "小鑫鑫";
temp1.age = 18;
System.out.println(temp1.name);
System.out.println(temp1.age);
Temp temp2 = new Temp("张飞",20);
System.out.println(temp2.name);
System.out.println(temp2.age);
}
}
