Java学习笔记-类的基本概念

Java学习笔记-类的基本概念

1.类和对象的关系

提取特征 --> 将属性行为放在一起构成类 --> 创造对象(将类实例化)

类 == 函数容器 + 自定义数据类型

类和对象的区别联系:

  1. 类是抽象的,概念的,代表一类事务,是自定义的数据类型。
  2. 对象是具体的,实际的,代表一个具体事务,是实例。
  3. 类是对象的模板,对象是类的一个个体,对应一个实例。

例如,人类,是一个类,但是某一个具体的人,就是一个对象。人类 == 类,我 == 对象, 眼睛 == 属性,看 == 方法。

2.属性/成员变量/字段

1)基本介绍:成员变量 = 属性 = field(字段).成员变量用来表示属性。

2)属性是类的组成部分,一般为基本数据类型,也可以为引用数据类型(对象,数组)。

如果不赋值,有默认值,规则同数组。

定义语法同变量。

访问修饰符可以控制属性的访问范围:public,protected,默认,private。

3.对象创建、属性访问
  • 对象创建
      1. 先声明在创建 Cat cat;//声明 cat = new Cat;//创建
      2. 直接创建 Cat cat = new Cat();
  • 属性访问
    • 对象名.属性名 cat.name;

Cat cat = new Cat();分三部分

①声明一个引用变量 Cat cat; //声明变量只会分配存放位置的地址空间

②创建对象new Cat()

③连接对象和引用 = Cat cat = new Cat();//地址空间指向了实际的内容

对象存在于堆上,cat 是一个引用变量,保存存取对象的方法,代表取得特定对象的位表示法。

4.内存分配机制
  1. 栈:存放基本数据类型(局部变量)
  2. 堆:存放对象(Cat cat,数组)
  3. 方法区:常量池(存放常量),类加载信息

Java对象创建流程分析:

Person p  = new Person();
p.name = "jack";
p.age = 10;

1)先加载Person类的信息(属性和方法,只加载一次

2)在堆中分配空间,进行默认初始化

3)把地址赋给p,p指向对象

4)进行指定初始化,name,age

5.方法
  1. 成员方法:在类中定义成员方法,来完成对象的行为举动。类所描述的是对象知道什么与执行什么。

  2. 方法定义:

访问修饰符 返回数据类型 方法名(形参列表...{ //方法体
    语句;
    return 返回值;
}
public int getSum(int num1, int num2){
    int res = num1 + num2;
    return res;
}

1)形参列表:表示成员方法输入,getSum(int num1, int num2)

2)返回数据类型:表示成员方法输出,void表示没有返回值,可以不用return或者只需要return;

3)方法主体:表示为了实现某一功能代码块

4)如果方法声明了非void的返回类型,就一定要返回与声明类型一致或兼容的值

5)一个方法最多只能有一个返回值,但返回类型可以为任意类型,包括基本类型和引用类型

  1. 成员方法的传参机制:

基本类型是通过值传递的,传递的是值(值拷贝),通过拷贝传递,形参的改变不影响实参。

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

4.调用机制:

Alt

好处:提高了代码复用性,可以封装细节供其他用户调用。

5.方法递归调用

  • 递归就是自己调用自己,每次调用时传入不同的变量。
  • 规则:
    • 执行一个方法时,会创造一个新的受保护的独立空间(栈空间)
    • 方法的局部变量是独立的,不会相互影响
    • 如果方法中使用的是引用类型的变量,会共享该引用类型的数据
    • 递归必须要向推出递归的条件逼近,否则无限递归会StackOverflowError,栈溢出
    • 当方法执行完毕或者遇到return,会返回,遵循谁调用就将结果返回给谁
6.方法重载(OverLoad)
  • 概念:Java中允许同一个类中有多个同名方法出现,但要求形参列表不一致。
    • 方法名:必须相同
    • 形参列表:必须不同(形参类型、个数、顺序,至少要有一样不同,参数名无要求)
    • 返回类型:无要求
  • 好处:减轻了记名起名的麻烦。
void show(int a, char b, double c){}构成重载的
    void show(int a, char y ,double z){}	//不是,形参类型、顺序、个数是相同,改变的只有参数名 
    void show(int a, double c, char b){}	//是,形参类型、个数、顺序都不同
	void show(double c){}	//是,形参类型、个数、顺序都不同
	double show(int a, char b, double c){}	//不是,形参无改变,改变返回形式无影响
  • 可变参数:Java允许同类中多个同名同功能但参数个数不同的方法,封装成一个方法,就通过可变参数实现。

    • 基本语法: 访问修饰符 返回类型 方法名(数据类型… 形参名){}
    public void f1(int... nums){
        System.out.println("长度" + nums.length)}
    public void f2(String str, double... nums){
        
    }
    1)可变参数的实参为0个或任意多个
    2)可变参数的实参可以为数组
    3)可变参数的本质是数组
    4)可变参数可以和普通类型的参数一起放在形参列表,但可变参苏要放在最后
    5)一个形参列表中只能出现一个可变参数
    
7.作用域
  • 变量:
    • 成员变量(属性):
      • 作用域为整个类体,可以不赋初值,有默认值。
      • 可以加修饰符。被本类或其他类通过对象调用使用。
      • 存在于对象所属的堆空间上,存放于对象中
    • 局部变量:
      • 定义在成员方法中的变量,必须赋初值,没有默认值。
      • 作用域为定义的代码块中。不可以加修饰符。只能在本类对应方法使用
      • 存在于栈上相对应的堆栈
  • 属性和局部变量可以重名,访问遵循就近原则。相同作用域中,局部变量不能重名。
8.构造器/构造方法
  • 概念:构造方法又叫构造器,是类的一种特殊方法,作用是完成对新形象的初始化

  • 特点:

    • 方法名和类名相同
    • 没有返回值
    • 创建对象时系统会自动调用该类的构造器完成初始化
  • 基本语法:
        [修饰符] 方法名(形参列表){
        方法体;
    	}	//修饰符可以默认也可以public、protected、private
    		
    
    Person p1 = new Person("jack"18);	//new Person() 创造对象过程中是要调用构造函数,在初始化时执行
    class Person(){
        
        public Person(String name, int age){
            
        }
        Person(){ //无参构造器显式定义
            
        }
    }
    
    1. 构造器可以重载
    2. 构造器名要与类名相同
    3. 构造器没有返回值
    4. 构造器是完成对象的初始化,并不是创建对象
    5. 创造对象时,自动调用构造器
    6. 没有定义构造器,系统会默认生成无参构造器
    7. 定义了构造器后,默认的构造器会被覆盖,如果要使用默认的午餐构造器,要显式定义
  • 对象创造流程分析:

    Person p = new Person("小小",20);
    class Person{
        int age = 90;
        String name;
        Person(String n, int a){
            name = n;
            age = a;
        }
    }
    
    1.加载Person类的信息,只加载一次
    2.在堆中分配空间
    3.对象初始化
        3.1默认初始化,age = 0,name = null
        3.2显式初始化,age = 90,name = null
        3.3构造器初始化,age = 90,name = "小小"
    4.把对象在堆中的地址返回给p
    
9.this关键字
  • Java虚拟机给每个对象分配this代表当前对象。
    • 哪个对象调用,this就代表哪个对象
    • 用于区分当前类的属性和局部变量
class Person{
 
 	int age;
    String name;		
 /*     
    Person(String n, int a){	//传入的形参代表类中的属性,但n和a属于局部变量,而不是属性,于是提出this
        name = n;
        age = a;
    }
  */
    //等价于上边
    Person(String name, int age){ 	//this.name表示当前对象的属性name
        this.name = name;
        this.age = age;
    }
}

访问成员方法:this.方法名(参数列表)
访问构造器语法:this(参数列表),只能在构造器中使用,必须放在第一条,即在一个构造器中调用另一个
  • 19
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值