JavaSE_06_面向对象基础

本文介绍了面向对象的基础概念,包括类与对象的关系,Java中类的书写,对象的创建,以及类的元素如变量、方法和构造方法的解析。示例展示了如何定义和使用Java类,包括静态和非静态元素的区别,方法重载以及构造方法的使用。文章还强调了构造方法在初始化对象时的作用。

《面向对象基础》

目录

  • 类与对象基础概念(精通)
  • Java类书写(熟练)
  • 类元素解析(熟练)
  • 构造方法(熟练)

一、类与对象基础概念

面向对象(Object Oriented)是软件开发方法,一种编程范式。其概念和应用已超越了程序设计软件开发,是一种对现实世界理解和抽象。其中是一个抽象概念,而对象是一个具体概念。

类(class)是对象(object)的模板,而对象(object)是类的一个实例(instance)。

生活示例(万物皆对象)

  • 示例一

请添加图片描述

  • 示例二

请添加图片描述

二、Java类书写

案例一

  1. 行为特征分析

请添加图片描述

  1. 类书写
package com.hpr.test;

public class Cat {
    //变量
    String name;
    int age;
    String color;
    double weight;

    //方法
    public void eat() {
        System.out.println("猫咪正在吃饭...");
    }

    public void sleep() {
        System.out.println("猫咪正在睡觉...");
    }
    
    public void speak(){
        System.out.println("猫咪正在喵喵喵...");
    }
}
  1. 对象创建测试
package com.hpr.test;

public class Test {
    public static void main(String[] args) {
        Cat cat = new Cat();
        //属性调用
        System.out.println(cat.name);
        //方法调用
        cat.speak();
    }
}

执行结果

请添加图片描述

三、类元素解析

类主要组成元素

  • 变量:全局变量(类变量/静态变量、实例变量/非静态变量)、局部变量;
  • 方法:静态方法/类方法、非静态方法/实例方法、构造方法;
  • 代码块:代码块、静态代码块。

案例二

  • Dog类
package com.hpr.test;

public class Dog {
    //全局变量-非静态变量
    int age;
    String food;
    //全局变量-静态变量
    static String type;

    //非静态方法(实例方法)
    public void eat(String food) {
        System.out.println("狗子正在吃:" + food);
        //this代指当前对象
        System.out.println("狗子正在吃:" + this.food);
    }

    //静态方法(类方法)
    public static void speak() {
        //System.out.println(this.food);    //此处报错,this不能用于静态内容中
        System.out.println("一只" + type + "正在汪汪汪...");
    }

    //方法重载(overload)
    public int add(int a, int b) {
        return a + b;
    }

    public double add(double a, double b) {
        return a + b;
    }

    public String add(String a, String b) {
        return a + b;
    }
    
    //可变参数
    public int add(int... item) {
        int sum = 0;
        for (int x : item) {
            sum += x;
        }
        return sum;
    }
}
  • 测试类
package com.hpr.test;

public class Test {
    public static void main(String[] args) {
		...
        Dog dog = new Dog();
        System.out.println("-----------静态元素调用-----------");
        Dog.type = "萨摩耶";
        Dog.speak();

        System.out.println("-----------非静态元素调用-----------");
        dog.food = "骨头";
        dog.eat("狗粮");

        System.out.println("-----------重载方法调用-----------");
        System.out.println(dog.add(3, 5));
        System.out.println(dog.add(1.2, 3.4));
        System.out.println(dog.add("Hello ", "World!"));
        
        System.out.println("-----------可变参数-----------");
        int sum = dog.add(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
        System.out.println(sum);
    }
}

执行结果

请添加图片描述

名词解析

  • 全局变量(类直属的变量)

    全局变量在声明后若没有赋值,将会默认一个初始化值(如上述案例中 cat.name 打印结果为 null),其规则如下(与数组一致)。

    数据类型默认初始化值
    整型(byte/short/int/long )false
    小数型(float/double)0
    布尔型(boolean)0.0
    字符型(char)‘\u0000’,即一个空格
    类类型(class)null
  • 局部变量(定义在方法中的变量)

    局部变量使用之前必须初始化,否则编译不通过(代码报红线)。

    int a;		//声明变量
    a = 0;		//初始化值
    int b = 1;	//变量声明同时赋值
    
  • 静态/非静态

    static修饰的元素(变量、方法、代码块)称之为静态元素,与非静态元素有以下区别:

    • 静态变量/方法可通过类名直接调用;
    • 非静态变量/方法必须创建对象后使用对象调用;
    • 静态内容无法调用非静态内容。
  • this关键字

    this代指当前对象,属对象创建过程产物,不能用于静态内容;同时当局部变量与全局变量冲突时,可通过this关键字调用全局变量。

  • 方法

    方法是封装固定逻辑的代码块,可重复调用,方法书写三要素:

    • 参数传入:需要什么传什么;
    • 逻辑处理:要处理的逻辑;
    • 结果返回:需要什么返回什么(无需返回使用void)。
  • 形参/实参

    • 形参(形式参数):方法定义时书写的参数;
    • 实参(实际参数):方法调用时传入的参数;
  • 方法重载(overload)

    同一个类中,存在方法名相同,但参数不同的多个方法,该类情况称之为方法重载(如数组Arrays工具类sort排序方法就使用了重载)。

请添加图片描述

  • 可变参数

    jdk1.5的产物,不确定参数数量,最终将其封装为一个数组。

四、构造方法

构造方法又称之为构造函数,方法名与类名一致,且无返回值,主要用做初始化对象前的数据准备工作(传入值——>赋给全局变量——>全局使用)。

案例三

生成构造:鼠标右键——>Generate...——>Constructor——>选择字段——>点击OK完成。

  • Panda类
package com.hpr.test;

public class Panda {
    String name;
    int age;
    String food;

    //无参构造
    public Panda() {
    }

    //带参构造
    public Panda(String name, int age, String food) {
        this.name = name;
        this.age = age;
        this.food = food;
    }

    public void introduce() {
        System.out.println(age + "岁的熊猫宝宝" + name + "喜欢吃" + food);
    }
}
  • 测试类
package com.hpr.test;

public class Test {
    public static void main(String[] args) {
        System.out.println("-----------无参构造调用-----------");
        Panda panda1 = new Panda();
        panda1.name = "团团";
        panda1.age = 2;
        panda1.food = "竹叶";
        panda1.introduce();
        System.out.println("-----------带参构造调用-----------");
        Panda panda2 = new Panda("圆圆", 3, "竹笋");
        panda2.introduce();
    }
}

执行结果

请添加图片描述

构造特点

  • 当没有自定义构造时,系统会默认提供一个无参构造,当书写自定义构造后,默认无参构造将消失;
  • 代码简洁,一行代码进行多变量赋值。

构造互调

构造之中是可以调用其它构造的,但必须放在该构造方法第一行,例如:

public class Panda {
	...
    public Panda() {
    	this("阿宝", 10, "面条");
    }
    
    public Panda(String name, int age, String food) {
        this.name = name;
        this.age = age;
        this.food = food;
    }
    ...
}

总结

重点

  1. 类与对象概念;
  2. 类书写及对象创建使用;
  3. 类元素概念及使用;
  4. 构造方法书写及使用。

难点

  1. 类元素概念及使用;
  2. 构造方法互调调用。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值