JavaSE高级——面向对象基础(二)

成员变量

定义位置:在类中,代码块和方法之外。

定义语法:[修饰符] 数据类型 变量名;

--> 注意:成员变量绝对不允许使用static关键字修饰。

操作成员变量语法:对象.成员变量名

注意:在成员方法中,我们可以直接通过“成员变量名”来操作当前类的成员变量。

成员方法

定义位置:在类中,代码块和方法之外。

定义语法:[修饰符] 返回值类型 方法名(形参列表) {

// 方法体

return [返回值];

}

--> 注意:成员方法绝对不允许使用static关键字修饰。

调用成员方法语法:对象.成员方法名(实参列表);

注意:在成员方法中,我们可以直接通过“成员方法名(实参列表)”来调用当前类的成员方法。

创建对象语法:类名 对象名 = new 类名(实参列表);

成员变量的默认值

注意:成员变量的默认值和数组元素默认值规则一模一样。

整数型(byte、short、int和long)的默认值为0

浮点型(float和double)的默认值为0.0

布尔型(boolean)的默认值为false

字符型(char)的默认值为'\u0000',代表一个空格

引用数据类型的默认值为null

成员变量的赋值

a)默认初始化

给成员变量开辟存储空间之后,就会给该变量做默认初始化

b)显示初始化

显示初始化之后,创建出来对象的成员变量值都是一模一样。

c)指定初始化

对象创建完毕后,我们可以对成员变量做指定初始化,这样每个对象的成员变量值都可以不一样。

执行顺序:先默认初始化,然后在显示初始化,最后再指定初始化

创建对象的过程

总结:a)创建对象的时候,此处只为“成员变量”开辟了存储空间,成员方法无需开辟存储空间。

b)调用成员方法的时候,会在栈内存中开辟一个栈帧,方法调用结束后自动弹栈。

c)生活中,每个对象都是独一无二的,编程中,new出来的对象也是独一无二的,因为new出来的每个对象地址值都不一样。

成员变量和局部变量

局部变量的定义:定义在代码块或方法中的变量,我们称之为局部变量。

成员变量的定义:定义在类中,代码块和方法之外的变量,并且没有使用static修饰,我们称之为成员变量。

定义位置区别

局部变量:定义在代码块或方法体中

成员变量:在类中,代码块和方法之外。

存储位置区别

局部变量:存储在栈内存中(基本数据类型,存储的是“数据值”;引用数据类型,存储的是“地址值”)。

成员变量:存储在堆内存中。

默认值的区别

局部变量:没有默认值,因此只声明未赋值的局部变量,只能做赋值操作,不能做取值操作。

成员变量:有默认值,默认值规则和数组元素默认值规则一模一样。

生命周期区别

局部变量:声明变量的时候就“出生”,直到当前作用域执行结束就“死亡”;

成员变量:随着对象的创建而“出生”,随着对象的销毁而“死亡”。

修饰符的区别

局部变量:不能被public、protected、private、static修饰,只能被final修饰

成员变量:可以被public、protected、private、static、final等修饰符修饰;

问题:当成员变量和局部变量同名的时候,如果区分???

答案:当成员变量和局部变量同名的时候,那么默认采用“就近原则”,也就是随离得近,就使用谁。

成员变量:使用this关键字来操作

局部变量:直接通过变量名来操作

 

通过new关键字创建出来的对象,我们可以分为两大类:

a)有名字的对象。--> Student stu = new Student();

b)匿名对象。 --> new Student();

匿名对象的作用???

a)当对象只需要使用一次时,那么建议使用匿名对象。

new Student().study();

b)当对象只作为方法的实参时,那么建议使用匿名对象。

method(new Student());

 

1.基本数据类型的传递

总结:基本数据类型的传递属于“数据值”传递。

2.引**用数据类型的传递**

总结:引用数据类型的传递属于“地址值”传递。

3.在java语言中数据传递

总结:java语言数据的传递都是“值”传递,所谓“值”传递就是传递变量在内存中存储的数据,

基本数据类型在内存中存的是“数据值”,引用数据类型在内存中存储的是“地址值”。

 

构造方法,又称之为“构造器”或“构造函数”。

1.构造方法的引入

Student stu = new Student();

Scanner input = new Scanner(System.in);

 

2.构造方法的语法:

[修饰符] 类名(形参列表) {

// 方法体

}

注意事项:

a)构造方法中没有“返回值类型”,也就意味着方法体中无需返回任何数据。

b)在构造方法中,方法名必须和“类名”保持一致,也就是构造方法名采用“大驼峰”命名。

c)在方法体中,我们不能返回任何数据,因为构造方法中没有定义“返回值类型”。

d)构造方法是一个特殊方法,只能通过new关键字来调用。

 

3.对象创建的过程

例如:“new Student();”代码的执行过程

第一步:通过new关键字,在堆内存中开辟一块存储空间,并且对成员变量实现默认初始化。

第二步:默认初始化完后后,在执行显示初始化。

第三步:接下来,就执行构造方法,从而实现对成员变量做指定初始化。

--> 请问:执行构造方法之前,对象肯定已经创建成功啦。

问题:对象创建完全是由构造方法实现的吗?

答案:new关键字负责创建对象,构造方法用于给成员变量做指定初始化操作。

创建对象的时候,new和构造方法缺一不可,必须配合一起使用。

 

4.构造方法的作用

a)创建对象的时候,new和构造方法缺一不可,必须配合一起使用。

b)我们通过构造方法,从而实现对成员变量做指定初始化的操作(重要)。

 

5.无参构造方法

作用:可以在无参构造方法中,我们对数组类型的成员变量开辟指定大小的存储空间。

注意:如果一个类中没有显示的提供构造方法,那么源文件编译的时候“编译器”会默认提供一个无参构造方法。

 

6.有参构造方法

注意:a)如果类中显示的提供了构造方法,那么编译的时候就不会默认提供一个无参构造方法啦。

b)建议,每个类中都需要有一个无参构造方法,避免在继承体系下找不到父类的无参构造方法。

c)当成员变量和局部变量同名的时候,那么我们使用this关键字来区分。

 

7.构造方法的重载

调用:根据实参列表来选择调用合适的构造方法。

 

成员方法和构造方法

a)定义语法区别

成员方法:[修饰符] 返回值类型 方法名(形参列表) {

// 方法体

return [返回值];

}

注意:成员方法不能使用static关键字修饰。

构造方法:[修饰符] 类名(形参列表) {

// 方法体

}

 

b)调用方式区别

成员方法:必须通过“对象”来调用。

构造方法:应该通过“new”关键字来调用。

 

c)调用时期区别

成员方法:对象创建完毕后,我们在调用成员方法。

构造方法:在创建对象的时候,我们配合new关键字来调用构造方法。

 

d)调用次数区别

成员方法:任意多次。

构造方法:每调用一次,那么就会创建一个对象。

 

补充:

在构造方法中,我们可以直接调用当前类的成员方法(有意义)。

在成员方法中,我们不能直接调用当前类的构造方法(没意义)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值