Java学习笔记-(一)入门-008面向对象与封装

本文深入讲解面向对象编程的核心概念,包括类与对象的区别、对象的内存管理、成员变量与局部变量的特点,以及封装、继承、多态等面向对象的三大特性。同时,介绍了构造方法、静态变量和方法的应用,以及匿名对象的使用场景。

一、概述

面向过程: 当需要实现一个功能的时候,每一个具体的步骤都要亲力亲为,详细处理每一个细节。

面向对象: 当需要实现一个功能的时候,不关心具体的步骤,而是找一个已经具有该功能的人,来帮我做事儿。

面向对象三大特征: 即封装、继承和多态

public class Demo01PrintArray {

    public static void main(String[] args) {
        int[] array = { 10, 20, 30, 40, 50, 60 };

        // 要求打印格式为:[10, 20, 30, 40, 50]
        // 使用面向过程,每一个步骤细节都要亲力亲为。
        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] + ", ");
            }
        }
        System.out.println("==============");

        // 使用面向对象
        // 找一个JDK给我们提供好的Arrays类,
        // 其中有一个toString方法,直接就能把数组变成想要的格式的字符串
        System.out.println(Arrays.toString(array));
    }

}

二、类和对象

2.1 类

类 : 是一组相关属性和行为的集合。可以看成是一类事物的模板,使用事物的属性特征和行为特征来描述该类事物。

现实中,描述一类事物:

属性 :就是该事物的状态信息。

行为 :就是该事物能够做什么。

2.2 对象

对象 : 是一类事物的具体体现。对象是类的一个实例,必然具备该类事物的属性和行为。

  • 类是对一类事物的描述,是 抽象的。
  • 对象是一类事物的实例,是 具体的。
  • 类是对象的模板,对象是类的实体 。

2.3 类的定义

  • 格式
public class ClassName {
  //成员变量
  //成员方法
}
  • 定义类 : 就是定义类的成员,包括成员变量和成员方法。
  • 成员变量 : 和以前定义变量几乎是一样的。只不过位置发生了改变。在类中,方法外。
  • 成员方法 : 和以前定义方法几乎是一样的。只不过把static去掉,static的作用在面向对象后面课程中再详细讲解。
public class Student {
    //成员变量  
   	String name;//姓名  
    int age;//年龄
    //成员方法
   	//学习的方法
   	publicvoid study() {
		System.out.println("好好学习,天天向上");
    }
  	//吃饭的方法
  	publicvoid eat() {
    	System.out.println("学习饿了要吃饭");
  	}
}

2.4 使用对象

① 导包

import 包名.类名

对于和当前类属于同一个包的情况,可以省略导包语句不写。

② 创建

类名 对象名 = new 类名();

③ 使用

对象名.成员变量名
对象名.成员方法名(参数)

2.5 默认值

若成员变量未赋值,则会有一个默认值,规则与数组相同。

数据类型默认值
整数类型0
浮点类型0.0
字符类型‘\u0000’ (是不可见字符,不是空格)
布尔类型false
引用类型null

三、对象的内存图解

3.1 一个对象

成员方法在堆中保存的是地址值!方法依次入栈,并在调用完成后出栈。

在这里插入图片描述

3.2 两个对象

在这里插入图片描述

3.3 两个引用一个对象

在这里插入图片描述

3.4 对象作为方法参数

在这里插入图片描述

3.5 对象作为方法返回值

在这里插入图片描述

四、成员变量与局部变量

区别:

① 定义的位置不同

局部变量:在方法内部

成员变量:在方法外部,直接写在类中

② 作用范围不同

局部变量:只用方法中才可以使用,出了方法便不可使用

成员变量:整个类都可以使用

③ 默认值不同

局部变量:无默认值,只有赋值了才可使用

成员变量:如果未赋值,会有默认值

④ 内存的位置不一样

局部变量:位于栈内存

成员变量:位于堆内存

⑤ 生命周期不一样

局部变量:随着方法进栈而诞生,随着方法出栈而消失。(通常情况下生命周期更短)

成员变量:随着对象创建而诞生,随着对象被垃圾回收而消失。

五、封装性

封装就是讲一些细节信息隐藏起来,对于外界不可见。

① 方法就是一种封装

② 关键字private也是一种封装

使用private修饰变量,那么本类中可以随意访问,但是超出了本类范围之外便不可直接访问,可以使用成员方法间接访问。

  • 间接访问private成员变量,就是定义一对儿Getter/Setter方法
    • 必须叫setXxx或者是getXxx命名规则。
    • 对于Getter来说,不能有参数,返回值类型和成员变量对应;
    • 对于Setter来说,不能有返回值,参数类型和成员变量对应。

注意: 对于基本类型当中的boolean值,Getter方法一定要设置成isXxx的形式,而setXxx规则不变。

六、this

  • 当方法的局部变量和类的成员变量重名的时候,根据“就近原则”,优先使用局部变量。如果需要访问本类当中的成员变量,需要使用格式:this.成员变量名
  • 谁调用的方法,谁就是this。

七、构造方法

7.1 格式

public 类名称(参数类型 参数名称){
    方法体
}
1. 构造方法必须和类名称一致。
2. 构造方法不要写返回值类型,连void都不写。
3. 构造方法不能return一个具体的返回值。
4. 如果未编写构造方法,那么编译器会默认使用一个空的构造方法(无参数,方法体为空)。 public 类名(){}
5. 如果编写了至少一个构造方法,那么编译器将不会生成空构造方法。若使用 new 类名() 来创建对象会报错。
6. 构造方法可以重载

7.2 标准的类

一个标准的类(也叫Java Bean)应该具有以下几个部分:

1.所有成员变量都要使用private关键字修饰
2.为每一个成员变量编写一对Getter/Setter方法
3.一个无参数的构造方法
4.一个全参数的构造方法
  • 使用 alt + insert 快捷键可以生成Getter/Setter方法和构造方法。

八、static

一旦使用了static关键字,那么这样的内容不再属于对象自己,而是属于所在类,所以凡是本类的对象,共享同一份。

8.1 修饰成员变量

可以用对象名来调用,也可以直接通过类名来调用,推荐使用类名来调用。

典型用法:用于自动生成学号。

public class Student {

    private int id; // 学号
    private String name; // 姓名
    private int age; // 年龄
    static String room; // 所在教室
    private static int idCounter = 0; // 学号计数器,每当new了一个新对象的时候,计数器++

    public Student() {
        this.id = ++idCounter;
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
        this.id = ++idCounter;
    }
}

8.2 修饰成员方法

  • 可以用对象名来调用,也可以直接通过类名来调用,推荐使用类名来调用。
  • 对于本类中的静态方法,访问时可以省略类名。

① 静态方法只能静态变量和静态方法,不能访问非静态变量和静态方法(因为在内存当中先有的静态内容,后有的非静态内容)。而普通方法可以访问静态也可以访问非静态。

② 静态方法中不能用this关键字。

8.3 static的内存图解

在这里插入图片描述

8.4 静态代码块

public class 类名称{
	static{
		...
	}
}

1.当第一次使用本类时,静态代码块执行唯一的一次。

2.静态代码块比非静态代码块优先执行,所以它先于构造方法执行。

典型用法:用来一次性地对静态成员变量进行赋值。

九、匿名对象

匿名对象就是只有右边的对象,没有左边的名字和赋值运算符:

new 类名().方法名();//调用
new 类名().变量名;//调用

注意: 匿名对象只能使用唯一的一次,下次再用不得不再创建一个新对象,如果确定一个对象只要使用一次时,就可以使用匿名对象。

匿名对象可以作为方法的参数和返回值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值