成员变量
:在方法体外,类体内声明的变量称为成员变量;不以static修饰的是实例变量,以static修饰的为类变量局部变量
:在方法体内部声明的变量称为局部变量成员变量 | 局部变量 | |
---|---|---|
声明的位置 | 直接声明在类中 | 方法形参或内部、代码块内、构造器内等 |
修饰符 | 四种权限修饰符、final等 | 不能用权限修饰符修饰、可以用final修饰 |
初始化 | 有默认初始化 | 没有默认初始化,必须显式赋值 |
内存加载位置 | 堆空间或静态域内 | 栈空间 |
当一个对象被创建时,会对其中各种类型的成员变量自动进行初始化赋值。除了基本数据类型之外的变量类型都是引用数据类型。
成员变量类型 | 初始值 |
---|---|
byte | 0 |
short | 0 |
int | 0 |
long | 0 |
float | 0.0 |
double | 0.0 |
char | 0或写为'\u0000'(表现为空) |
boolean | false |
引用数据类型 | null |
先看一下如下代码:
- public class Person {
- public static void main(String[] args) {
- Person p1 = new Person();
- p1.age = 20;
- p1.name = "cabbage";
- Person p2 = new Person();
- p2.age = 12;
- }
- private String name;
- private int age;
- }
- 复制代码
内存解析图:
简单解析一下:以p1对象引用为例,当我们创建该对象时,成员变量就会放在堆空间中,先是默认初始化值null
、0
,之后通过对象.属性
的赋值方式把属性值分别改为:cabbage
、20
。
先看如下代码:
- public class Person {
- public static void main(String[] args) {
- Person[] people = new Person[2];
- people[0] = new Person();
- people[0].name = "cabbage";
- people[0].age = 20;
- System.out.println(people[0].toString());
- System.out.println(people[1]);
- }
- private String name;
- private int age;
- @Override
- public String toString() {
- return "Person{" +
- "name='" + name + '\'' +
- ", age=" + age +
- '}';
- }
- }
- 复制代码
内存解析图:
简单解析一下:因为是对象数组,所有初始值每个默认值都是null,当给people[0]创建对象时,会在堆空间中开辟一个空间用来储存成员变量name、age;对象赋值的过程与对象内存解析的方式一样。
运行结果:
1、方法的声明:
2、返回值类型:有返回值 vs 没有返回值
“return 数据”
只能“return;”表示结束此方法的意思
3、return关键字的使用:
递归方法
含义:
同一个类、方法名一样、形参列表(个数、类型、顺序)不同下列方法都构成了重载:
- public class Person {
- private String name;
- private Integer age;
- public void one() { }
- public void one(Integer age) { }
- public void one(String name) { }
- public void one(String name, Integer age) { }
- public void one(Integer age, String name) { }
- }
- 复制代码
我们再来看看可变个数的形参:
- public class Person {
- public static void main(String[] args) {
- Person person = new Person();
- person.one("one","two","three");
- }
- public void one() { }
- public void one(String... names) { }
- }
- 复制代码
数据类型 ... 变量名
最后来看看方法形参的传递机制:值传递
形参
:方法定义时,声明的小括号内的参数
实参
:方法调用时,实际传递给形参的数据
值传递机制:
如果参数是基本数据类型,此时实参赋给形参的是实参真实存储的数据值
。
如果参数是引用数据类型,此时实参赋给形参的是实参存储数据的地址值
。
构造器说明:
- public class Person {
- public static void main(String[] args) {
- Person person = new Person();
- }
- public Person() {
- System.out.println("我是构造器");
- }
- }
- 复制代码
运行结果:
this说明:
this可以用来修饰、调用:属性、方法、构造器
在类的方法中,我们可以使用"this.属性"
或"this.方法"
的方式,调用当前对象属性或方法。
在类的构造器中,可以显式的使用"this(形参列表)"方式,调用本类中指定的其他构造器
构造器中不能通过"this(形参列表)"方式调用自己
规定:"this(形参列表)"必须声明在当前构造器的首行
构造器内部,最多只能声明一个"this(形参列表)",用来调用其他的构造器
写个代码验证一下:
- public class Person {
- public static void main(String[] args) {
- Person person = new Person("cabbae", 20);
- }
- private String name;
- private Integer age;
- public Person(String name, Integer age) {
- this(name);
- this.name = name;
- this.age = age;
- }
- public Person(String name) {
- System.out.println("我的名字是:" + name);
- }
- }
- 复制代码
运行结果: