Java面向对象编程(类与对象)

目录

类与对象

1.概念

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

3.注意事项和细节说明

4.类和对象的内存分配机制

5.创建对象

 6.成员方法

7.方法的调用机制原理

8.方法递归调用

9.方法重载(OverLoad)

10.可变参数

11.作用域

12.构造器

13.this 关键字


类与对象

1.概念

1) 类是抽象的,概念的,代表一类事物,比如人类,猫类.., 即它是数据类型.
2) 对象是具体的,实际的,代表一个具体事物, 即 是实例.
3) 类是对象的模板,对象是类的一个个体,对应一个实例

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

1) 从概念或叫法上看: 成员变量 = 属性 = field(字段)
2) 属性是类的一个组成部分,一般是基本数据类型,也可是引用类型(对象,数组)

3.注意事项和细节说明

1) 属性的定义语法同变量,示例:访问修饰符 属性类型 属性名; 这里老师简单的介绍访问修饰符: 控制属性的访问范围 有四种访问修饰符 public, proctected, 默认, private  
2) 属性的定义类型可以为任意类型,包含基本类型或引用类型 
3) 属性如果不赋值,有默认值,规则和数组一致。

4.类和对象的内存分配机制

Java 内存的结构分析
1) 栈: 一般存放基本数据类型(局部变量) 
2) 堆: 存放对象(Cat cat , 数组等) 
3) 方法区:常量池(常量,比如字符串), 类加载信息 

5.创建对象

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

 6.成员方法

成员方法的定义:

1) 形参列表:表示成员方法输入
2) 返回数据类型:表示成员方法输出, void 表示没有返回值 
3) 方法主体:表示为了实现某一功能代码块 
4) return 语句不是必须的。

访问修饰符 返回数据类型 方法名(形参列表..) {//方法体 
     语句; return 返回值; 
}

7.方法的调用机制原理

1.当程序执行到方法时,就会开辟一个独立的空间(栈空间)
2.当方法执行完毕,或者执行到return语句时,就会返回,
3.返回到调用方法的地方
4.返回后,继续执行方法后面的代码
5.当main方法(栈)执行完毕,整个程序退出

8.方法递归调用

递归就是方法自己调用自己,每次调用时传入不同的变量。
1.执行一个方法时,就创建一个新的受保护的独立空间(栈空间)
2.方法的局部变量是独立的,不会相互影响,比如n变量
3.如果方法中使用的是引用类型变量(比如数组,对象),就会共享该引用类型的数据。
4.递归必须向退出递归的条件逼近,否则就是无限递归,出现(StackOverflowError)
5.当一个方法执行完毕,或者遇到return,就会返回,遵守谁调用,就将结果返回给谁,同时当方法执行完毕或者返回时,该方法也就执行完毕。
案例:汉诺塔
public class HanoiTower {
    public static void main(String[] args){
        Tower t1 = new Tower();
        t1.move(3,'A','B','C');
    }
}
class Tower{
    //num 表示要移动的圆盘的个数,a,b,c,表示a,b,c底座
    public void move(int num ,char a,char b,char c){
        if(num == 1){
            System.out.println(a + "-->" + c);
        } else{
            //如果有多个圆盘,可以划分为(上面部分)和(最下面圆盘)两部分
            //(1)移动上面部分到 b 借助 c
            move(num - 1,a,c,b);
            //(2)把最底圆盘移到 c
            System.out.println(a + "-->" + c);
            //(3)把 b盘所有盘全放到 c ,借助 a
            move(num - 1,b,a,c);
        }
    }
}

9.方法重载(OverLoad)

(java 中允许同一个类中,多个同名方法的存在,但要求 形参列表 不一致!)
1)方法名:必须相同
2)形参列表:必须不同(形参类型或个数或顺序,至少有一样不同,参数名无要求)
3)返回类型:无要求
class OMyCalculator{
    public double calculate(int n1, int n2){
        System.out.println("calculate(int n1, int n2)被调用");
        return n1 + n2;
    }
    public double calculate(int n1, double n2){
        System.out.println("calculate(int n1, double n2)被调用");
        return n1 + n2;
    }
    public double calculate(double n1, int n2){
        System.out.println("calculate(double n1, int n2)被调用");
        return n1 + n2;
    }
    public double calculate(int n1, int n2,int n3){
        System.out.println("calculate(int n1, int n2)被调用");
        return n1 + n2 + n3;
    }

10.可变参数

概念

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

基本语法
访问修饰符 返回类型 方法名(数据类型... 形参名) {
}
public int sum(int...nums){
        System.out.println("这个可变参数长度为:" + nums.length);
        int sum = 0;
        for(int i = 0;i < nums.length;i++){
            sum += nums[i];
        }
        return res;
    }

注意事项

1)可变参数的实参可以为0个或任意多个。
2)可变参数的实参可以为数组。
3)可变参数的本质就是数组.
4)可变参数可以和普通类型的参数一起放在形参列表,但必须保证可变参数在最后5)一个形参列表中只能出现一个可变参数


11.作用域

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


12.构造器

1) 构造器的修饰符可以默认, 也可以是 public protected private
2) 构造器没有返回值
3) 方法名 和类名字必须一样
4) 参数列表 和 成员方法一样的规则
5) 构造器的调用, 由系统完成

基本语法:

[修饰符] 方法名(形参列表){ 
    方法体; 
}
class ConsPerson{
    String name;
    int age;
    //构造器(没有返回值,不能写 void 关键字,构造器的名称需和类名相同)
    //构造器是特殊的方法
    public ConsPerson(String pName,int pAge){
        System.out.println("构造器被调用~~~属性已被初始化");
        name = pName;
        age = pAge;
    }
    public ConsPerson(String pName){//构造器重载
        name = pName;
    }
    public ConsPerson(){}//默认的无参构造器被覆盖,如果还想用就需要在类中写上
}

注意事项

1.一个类可以定义多个不同的构造器,即构造器重载
比如:我们可以再给Person类定义一个构造器,用来创建对象的时候,只指定人名.不需要指定年龄
2.构造器名和类名要相同3.构造器没有返回值
4.构造器是完成对象的初始化,并不是创建对象
5.在创建对象时,系统自动的调用该类的构造方法
6.如果程序员没有定义构造器,系统会自动给类生成一个默认无参构造器(也叫默认构造器),比如 Dog 00,使用javap指令反编译看看
7.一旦定义了自己的构造器,默认的构造器就覆盖了,就不能再使用默认的无参构造器

13.this 关键字

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


注意事项和使用细节:

1) this 关键字可以用来访问本类的属性、方法、构造器 
2) this 用于区分当前类的属性和局部变量 
3) 访问成员方法的语法:this.方法名(参数列表);
4) 访问构造器语法:this(参数列表); 注意只能在构造器中使用(即只能在构造器中访问另外一个构造器, 必须放在第一 条语句) 
5) this 不能在类定义的外部使用,只能在类定义的方法中使用。

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值