Java基础—类和对象、封装、构造方法

本文探讨了类和对象的概念,介绍了面向过程与面向对象的区别,以及类的使用、对象内存图分析、封装性、private关键字、this关键字和构造方法等内容。重点讲解了如何定义标准类并结合实例解析了面向对象三大特征的实际应用。
摘要由CSDN通过智能技术生成

一、类和对象

1.类
是一组相关属性和行为的集合,可以看成是一类事物的模板,使用事物的属性特征和行为特征来描述该类事物。(就是对现实世界事物的一种模拟)
属性:就是该事物的状态信息
行为:就是该事物能够做什么。

2.对象
对象:是一类事物的具体体现。对象是类的一个实例,具有该类事物的属性和行为。

3.类和对象之间的关系
类是抽象的,对象是具体的;类是一个模板,对象是类的一个实例。

二、面向过程与面向对象

1.面向过程

当需要实现一个功能的时候,每一个步骤都要具体写出来,详细处理每一个细节。

2.面向对象

当需要实现一个功能的时候,不用关系具体的步骤是如何实现的,而是去找具有该功能的API。

【面向对象语言包括三大基本特征:封装、继承和多态。】

3.两者的区别

面向过程:强调实现的步骤

面向对象:强调通过调用对象的行为来实现功能,不需要自己来实现

面向对象是将复杂的问题尽量简单化,面向过程相当于执行者,而面向对象相当于指挥者。

4.实例分析

//现有一数组
int[] array = {1, 2, 3}
//要求打印格式:[1, 2, 3]

//使用面向过程,每一个步骤都要具体实现
System.out.print("[");
for (int i = 0; i < array.length; i++){
	if(i == array.length - 1){  // 如果是最后一个元素
            System.out.println(array[i] + "]");
        }else {
            System.out.print(array[i] + ", ");
        }
}

//使用面向对象:找具有该功能的API,不需要自己实现具体的步骤
#Arrays.toString()方法,可以直接把数组变成想要的格式的字符串
System.out.println(Arrays.toString(array));

三、类的使用

类不能直接使用,需要根据类创建一个对象,然后进行使用,具体使用流程如下:

1.导包
  指出需要使用的类,在什么位置,格式为:
  import 包名称.类名称
  当一个类和当前类属于同一个包时,可以省略导包语句。

2.根据类创建对象
  类名称 对象名 = new 类名称();
  eg.Student stu = new Student();

3.使用创建的对象
  使用成员变量时:对象名.成员变量名
  使用成员方法时:对象名.成员方法名(参数)

4.注意事项
  类同数组一样,也属于引用数据类型,所以成员变量没有进行赋值时,会有一个默认值,规则和数组一样。

如何定义一个类?

类是用来模拟现实事物的,包括两个组成部分:属性和行为。其中属性指“是什么”,行为指“能做什么”。

在定义Java类的时候,也就有两个部分:成员变量和成员方法。

注意事项:
	1.成员变量是直接【定义在类当中,方法外边】。
	  变量写在方法里边,是局部变量,而不是成员变量。
	  
	2.成员方法不能写static关键字。static关键字,代表该方法是静态方法。

四、对象的内存图分析

方法区内存中先有信息,然后变量和方法的执行在栈内存中进行,new出来的东西都在堆当中。
1.方法区(Method Area)

存放的是.class相关信息。

2.栈(Stack)

存放的是方法中的局部变量,方法的运行是在栈当中。
main方法或者成员方法想要执行,需要进栈/压栈,执行完毕,会出栈/弹栈。

3.堆(Heap)

new出来的东西,都是在堆内存中,堆内存里面的东西都有一个地址值,用十六进制表示。
对于成员变量,默认值就是保存在堆内存中。
对于成员方法,堆内存中保存的其实是地址值。该地址值指向方法区中的成员方法。

4.具体分析

//修改成员变量中的内容
首先根据【对象名】在【栈】中找到保存的对应的地址值
然后根据【栈】中的地址值找到【堆】中的成员变量
最后就可以进行修改了

//使用成员方法
首先根据【对象名】找到【栈】中保存的地址值
然后根据【栈】中的地址值找到【堆】中成员方法保存的地址值
再根据【堆】中成员方法保存的地址值找到【方法区】中成员方法对应的地址值
最后就可以使用对象的成员方法了

5.两个对象使用同一个方法

//两个对象之间是相互独立
//因为都是新建的对象,所以两个对象之间没有任何联系
Student stu1 = new Student();
Student stu2 = new Student();

//两个对象之间产生联系
Student stu3 = new Student();
Student stu4 = stu3;	//将stu3中保存的对象地址值赋值给stu4

五、对象类型作为方法的参数或者返回值

当一个对象作为方法的参数时,实际上传递进去的是对象的地址值。
当一个对象类型作为方法的返回值时,返回值其实也是对象的地址值。

六、局部变量和成员变量的区别

1.定义的位置不一样【重点】
局部变量:在方法的内部
成员变量:类当中,方法外部

2.作用范围不一样【重点】
局部变量:只有方法当中才可以使用,出了方法就不能再用
成员变量:整个类全都可以通用。

3.默认值不一样【重点】
局部变量:没有默认值,如果想要使用,必须手动进行赋值
成员变量:如果没有赋值,会有默认值,规则和数组一样

4,内存的位置不一样【了解】
局部变量:位于栈内存
成员变量:位于堆内存

5.生命周期不一样【了解】
局部变量:随着方法进栈而诞生,随着方法出栈而消失
成员变量:随着对象创建而诞生,随着对象垃圾回收而消失

七、面向对象三大特征之封装性

封装就是将具体信息隐藏起来,对于外界不可见。

方法其实就是一种封装,关键字private等也是一种封装。

八、private关键字

private关键字可以【提高代码的安全性】。如果没有private,就无法阻止不合理的数值被设置进来,所以可以用private关键字将需要保护的成员变量进行修饰。

一旦使用了private关键字修饰了成员变量,那么在【本类当中】仍然可以随【意访问】;但是,超【出本类范围】,就【不能直接访问】了。

【间接访问】private成员变量,就是定义一对儿Getter和Setter方法。

【必须叫setXxx或者是getXxx命名规则】。

对于getter来说,不能有参数,返回值类型和成员变量对应。

对于setter来说,不能有返回值,参数类型和成员变量对应。

注意事项:
对于基本数据类型当中的【Boolean值】,getter方法一定要写成isXxx的形式,而setXxx规则不变。

private boolean male;

public boolean isMale(){return male;}

public void setMale(boolean b){male = b;}

九、this关键字

当方法的局部变量和类的成员变量重名的时候。根据【就近原则】,优先使用局部变量。

如果需要访问本类当中的成员变量,需要使用this关键字:

//this关键字可以解决重名的问题
//this指向的是调用方法的对象
this.成员变量名

十、构造方法

构造方法是专门用来创建对象的方法,之前通过关键字new来创建对象时,其实就是在调用构造方法。

构造方法的定义格式:

public 类名称(参数类型 参数名称){
	方法体
}

注意事项:

1.构造方法的名称必须和所在的类名称完全一样,就连大小写也要一样。

2.构造方法不可以写返回值类型。

3.构造方法不能return一个具体的返回值

4.如果没有编写任何构造方法,那么编译器将会默认有一个无参构造方法
public Student(){}

5.一旦编写了至少一个构造方法,那么编译器将不再使用默认的无参构造方法。

6.构造方法也是可以进行重载的。
重载:方法名称一样,参数列表不一样。

十一、new关键字

new关键字其实就是在调用构造方法。

构造方法是可以【重载】的,即方法名称一样,参数列表不一样,这样可以在创建对象的时候更加方便,因为可以直接用过参数的形式设置进来,【省去了多次调用SetXxx方法】。

Student stu = new Student();
//通过new关键字加上空格来实现构造方法的调用,new后面的类名称其实就是构造方法的名称。

Student stu2 = new Student("张三", 20);
//重载形式,通过全参构造方法,直接将数据通过参数形式设置进来,省去了多次调用SetXxx方法

十二、如何定义一个标准类

一个标准类通常包含四个组成部分:

1.所有的成员变量都用private关键字修饰

2.为每一个成员变量编写一对儿Getter/Setter方法

3.编写一个无参构造方法

4.编写一个全参构造方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值