💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
>[success] # 全局变量 和 变量 1. 在类中的位置不同 * 成员变量:在类中方法外 * 局部变量:在方法、构造方法、语句块中定义的变量 2. 在内存中的位置不同 * 成员变量:在堆内存 * 局部变量:在栈内存 3. 生命周期不同 * 成员变量:随着对象的创建而存在,随着对象的消失而消失 * 局部变量:随着方法的调用而存在,随着方法的调用完毕而消失 4. 初始化值不同 * 成员变量:有默认初始化值,这就是为什么,初始化对象时候可以是空参构造函数 | 数据类类 | 默认值 | | --- | --- | | byte、short、int、long (基本类型) | 0 | | float、double (基本类型) | 0.0 | | boolean (基本类型)| false | | 类、接口、数组、String (引用类型) | null | * 局部变量:没有默认初始化值,必须定义,赋值,然后才能使用。 ***** ![](https://img.kancloud.cn/09/48/09480298f36f3ed6eac7936fa5a71402_983x375.png) >[success] # this * class 中的 **this** 指向当前**对象** * java的 **this** 可以省略,编译器会加上`this.`的前缀 ~~~ public class Person { int age; // 成员变量 String name; // 成员变量 void setInfo() { age = 12; // 可以省略this this.name = "11"; } public static void main(String[] args) { } } ~~~ * 当局部变量名与成员变量名相同时,在方法体中会优先使用局部变量(**就近原则**),若希望使用成员变量,则需要在成员变量的前面加上**this.的前缀**,明确要求该变量是成员变量 ~~~ public class Person { int age; String name; void setInfo(int age, String name) { // age = age; // 此时 age 是形参age 这行表示 形参age 赋值给形参的age this.name = name;// 需要 明确this 告诉形参name 赋值给对象的name 属性 } public static void main(String[] args) { } } ~~~ * **this关键字**除了可以通过this.的方式调用成员变量和成员方法外,还可以 作为 **方法的返回值** ~~~ public class Person { int age; String name; // 指定的返回值为当前类类型 Person getPerson() { return this; // 返回当前实列 } public static void main(String[] args) { } } ~~~ * 在**构造方法**的第**一行可以使用this()的方式**来调用本类中的其它**构造方法**,通过当前的构造方法去调用**本类**中的对应的构造方法,目的是:**代码复用**。 ~~~ public class Person { int age; String name; Person(int age) { this.age = age; } Person() { // 我调用有参的构造函数 this(10); } public static void main(String[] args) { } } ~~~ * **this**不能出现在静态方法中,**this**能出现在实例方法和构造方法中