【笔记总结】韩顺平循序渐进学Java零基础-第七章 面向对象编程(基础部分)

第7章 面向对象编程(基础部分)

1. 类与对象

1.1 类与对象的关系与区别

  • 类是抽象的,概念的,代表一类事物,比如动物类,人类等,即它是数据类型;
  • 对象是具体的,实际的,代表一个具体事物,即 是实例;
  • 类是对象的模板,对象是类的一个个体,对应一个实例。

1.2 对象在内存中存在形式

在这里插入图片描述

1.3 属性/成员变量/字段

成员变量=属性=field(字段)

class Car{
	String name; // 属性,成员变量,字段 field
	double price;
	String color;
	String[] master;
}

属性如果不赋值,有默认值,规则和数组一致,具体说: int 0, short 0, byte 0, long 0, float 0.0, double 0.0, char \u0000, boolean false, String null

1.4 如何创建对象

  1. 先声明再创建
Cat cat; // 声明对象 cat
cat=new Cat();// 创建
  1. 直接创建
Cat cat= new Cat();

1.5 类和对象的内存分配机制

  • Java内存的结构分析

    1. 栈:一般存放基本数据类型(局部变量);
    2. 堆:存放对象(Cat cat, 数组等)
    3. 方法区:常量池(常量,比如字符串),类加载信息;
    4. 示意区 [Cat(name, age, price)]
  • Java创建对象的流程简单分析

    1. 先加载Person类信息(属性和方法信息,只会加载一次)
    2. 在堆中分配空间,进行默认初始化(看规则)
    3. 把地址赋给p, p就指向对象
    4. 进行指定初始化;
    Person p=new Person();
    p.name="jack";
    p.age=10
    

2. 成员方法

2.1 方法的调用机制原理

在这里插入图片描述

2.2 成员方法的好处

  1. 提高代码的复用性;
  2. 可以将实现的细节封装起来,然后供其他用户来调用即可;
public double f1(){
	double d1=1.1*3;
	return d1
}

3. 成员方法传参机制

3.1 基本数据类型的传参机制

基本数据类型,传递的是值(值拷贝),形参的任何改变不影响实参。

3.2 引用数据类型的传参机制

引用类型传递的是地址(传递也是值,但是值是地址),可以通过形参影响实参。

例1:接收数组,修改数组
package com.hspedu.classes;

/**
 * @version 1.0
 * @auther oneline
 */
public class MethodParameter02 {
    public static void main(String[] args) {
        B b=new B();
        int[] a={1,2,3};
        b.test100(a);
        for (int i = 0; i < a.length; i++) {
            System.out.println(a[i]+"\t");
        }
        System.out.println();
    }
}
class B{
    public void test100(int[] arr){
        arr[0]=200; // 修改元素
        // 遍历数组
        System.out.println("test100");
        for (int i=0;i<arr.length;i++){
            System.out.println(arr[i]+"\t");
        }
        System.out.println();
    }
}

输出:

test100
200	
2	
3	

200	
2	
3	
例2:接收对象,修改该对象的属性
package com.hspedu.classes;

/**
 * @version 1.0
 * @auther oneline
 */
public class MethodParameter03 {
    public static void main(String[] args) {
        Person p=new Person();
        p.name="jack";
        p.age=10;
        B2 b=new B2();
        b.test200(p);
        System.out.println("main的p.age="+p.age);

    }
}
class Person{
    String name;
    int age;
}
class B2{
    public void test200(Person p){
        p.age=10000;
    }
}

输出:

main的p.age=10000

如果test200中内容变成:

class B2{
    public void test200(Person p){
        p=null;
    }
}

age依然输出10
在这里插入图片描述

3.3 成员方法返回类型是引用类型应用实例

4. 方法递归调用

递归就是方法自己调用自己;执行一个方法时,就创建一个新的受保护的独立空间(栈空间)。

5. 方法重载

java中允许同一个类中,多个同名方法的存在,但要求形参列表不一致;

public int calculate(int n1, int n2){}
public double calculate(double n1, int n2){}
public int calculate(int n1, int n2, int n3){}
  • 注意细节
    • 方法名:必须相同;
    • 形参列表:必须不同(形参类型或个数或顺序,至少有一样不同,参数名无要求);
    • 返回类型:无要求;

6. 可变参数

java允许将同一个类中多个同名同功能但参数个数不同的方法,封装成一个方法。就可以通过可变参数实现。

//1. int... 表示接收的是可变参数,类型是int,即可以接收多个int;
//2. 使用可变参数时,可以当作数组来使用,即nums可以当作数组;
//3. 遍历nums求和即可;
public int sum(int... nums){
	int res=0;
	for(int i=0;i<nums.length;i++){
		res+=nums[i];
	}
}
  • 注意细节
    • 可变参数的实参可以为0或者任意多个;
    • 可变参数的实参可以为数组;
    • 可变参数的本质就是数字;
    • 可变参数可以和普通类型的参数一起放在形参列表,但必须保证可变参数在最后;
    • 一个形参列表中只能出现一个可变参数;

7. 作用域

7.1 属性和局部变量

  1. 属性和局部变量可以重名,访问时遵循就近原则;
  2. 在同一个作用域中,比如在同一个成员方法中,两个局部变量,不能重名。
  3. 属性生命周期较长,伴随着对象的创建而创建,伴随着对象的销毁而销毁。局部变量,生命周期较短。
  4. 全局变量:可以被本类使用,或其他类使用(通过对象调用)
    局部变量:只能在本类中对应的方法中使用;
  5. 全局变量/属性:可以加修饰符;
    局部变量:不可以加修饰符;

8. this关键字

8.1 什么是this

java虚拟机会给每个对象分配this, 代表当前对象。

  • 注意事项和使用细节
    • this 关键字可以用来访问本类的属性、方法、构造器;
    • this用于区分当前类的属性和局部变量;
    • 访问成员方法的语法: this.方法名(参数列表);
    • this不能在类定义的外部使用,只能在类定义的方法中使用。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值