(JAVA) 类与对象(基础)

本文深入介绍了面向对象编程的基础概念,包括类的定义、对象的创建、成员变量与方法、访问修饰符、可变参数、方法重载、构造方法、静态成员以及代码块。通过实例解析了如何在Java中定义类、创建对象并进行方法调用,帮助初学者掌握面向对象编程的核心要素。
摘要由CSDN通过智能技术生成

(JAVA) 类与对象(基础)

本章节开始了面向对象的程序设计方法。

🐧一、类

  1. 一般,类是由成员变量和成员方法封装而成的。

  2. 示例:

public class Cat {
    String name;
    public int age;
    double weight;

    void eat() {
        System.out.println(name + " is eating");
    }
    void play() {
        System.out.println(name + " is playing");
    }
}

使用关键字class来定义(声明)cat类。

cat是用户自定义的一种新数据类型,

nameageweight都是cat类的属性

eat()play()cat类的方法

  1. 类修饰符

    修饰符含义
    public声明一个公开的类,可以被任意对象访问
    省略表明只有在相同包(同一目录)中的对象才能使用的类
    • 一个public修饰的类需要放在一个与类名相同的.java文件中。

    • 一个.java文件里可以有多个省略修饰符的类。

    • 当只有省略修饰符的类时,文件名可不与类名一致。每一个类都会加载出一个.class后缀的文件。

🦉二、对象

  1. 使用类来创建对象。对象是类的实例化。

  2. 示例:

Cat myCat = new Cat();
myCat.name = "梅茜"
myCat.eat();

这里打一个比方:将定义Cat类比作设计一个Cat的图纸。当你完成了图纸的设计,你也许会在图纸上详细的描述它会怎么吃,会怎么跑,应该有一个名字等等。但是这时它依旧只是一个图纸,并不能正在的跑。只有当你创建出它,即new Cat()实例化了一个对象,才能正在的让它跑起来(执行相应的方法)。
这就是我们想调用某个类的某个方法的时候,需要先实例化一个该对象的比喻的解释。

可以把对象理解为一种新型的变量

myCat是使用Cat类创建的对象

它保留着Cat类中初始化的数据,同时也可以修改自身的数据。

  1. 使用: 对象名.对象成员

🦆三、成员变量

  1. 成员变量又称属性或者是字段。可以是基本数据类型,也可以是引用类型。

  2. String name = "小红";//引用类型
    public int age;//int型
    double weight;//double型
    
  3. 成员变量:是在类中定义的、有修饰符、当创建(new)一个对象时,是对象的一部分,存放在堆内存,如果没有被赋初始值,会自动以类型的默认值赋值。

    局部变量:是在方法中定义的,无修饰符,存放在栈内存中,不会自动赋值,必须显示赋值后才能使用。

🦔四、成员方法

  1. 成员方法,是对象成员的一部分,是类与外界进行交互的重要窗口。简称:方法。

  2. 示例:圆柱体类Cylinder

public class Cylinder {
    double radius;
    double height;
    double area() {
        return 3.14*radius*radius;
    }
    double volume() {
        return area()*height;
    }
    public void setCylinder(double radius, double height) {
        this.radius = radius;
        this.height = height;
    }
}

Cylinder类中,area()volume()都是该类的方法。一个是算圆柱体的底面积,一个是算圆柱体的体积,返回类型为double

可以发现在类定义里,某一方法可以直接使用本类的其他方法和成员变量。

setCylinder是用来给成员变量赋值的方法,调用该函数时需要传达参数,而参数double radiusdouble height是该方法的局部变量,并且与方法的成员变量重名。

this关键字表明是调用对象本身的成员。

因此this.radius是成员变量,而radius就是那个局部变量了(局部优先原则)。

  1. 成员方法的返回类型可以是基本数据类型,也可以是引用类型。

🐘五、对象成员访问修饰符

访问控制修饰符

  1. 修饰符同类子类同包不同包
    public(共访问控制符)yesyesyesyes
    protected(保护访问控制符)yesyesyesno
    省略(省略访问控制符)yesyesnono
    private(私有访问控制符)yesnonono

    根据你所定义方法的作用范围来选择以上四种修饰符

    同类:在定义该对象成员的类中,该类的其他方法可以访问该成员。
    子类:继承该类的子类中的方法可以访问该对象成员。
    同包:相同目录下其他文件中的方法可以访问该对象成员。
    不同包:不同目录下的文件中的方法可以访问该对象成员。

  2. 使用:
    成员变量:[修饰符] 数据类型 成员变量名;
    成员方法:[修饰符] 返回值的数据类型 方法名( ){}

🐄六、可变参数

  1. 在定义方法时,如果某一种类型参数可能多个,就可能用到可变参数

  2. 示例:

public class Test {
    public static void main(String[] args)   {
        Test test = new Test();
        test.party(3,"小明","小红","小刚");
    }
    public void party(int n,String...name) {
        System.out.print("欢迎~");
        for (int i = 0; i < name.length; i++) {
            System.out.print(name[i] + " ");
        }
        System.out.println("参加第"+n+"届分享派对!!");
    }
}

在这里插入图片描述

  1. 格式:

    返回值类型 方法名(固定参数列表,数据类型…可变参数名) {}

  2. 细节
    *可变参数,传入的参数可以是0个或者多个。
    *实际上就是数组
    *如果方法中有多个参数,可变参数必须位于最后一项
    *只能有一个可变参数,(当然可以有多个数组参数)。

🐿️七、方法重载

方法重载是实现多态的方法之一。

  1. 在同一个类中,有多个相同方法名,不同形参列表的方法,就是方法的重载。

  2. 示例:

public class test {
    public static void main(String[] args)   {
        until until = new until();
        int x = 105;
        char x2 = '风';
        until.printf(x);
        until.printf(x2);
        until.printf();
    }
}
class until {
    void printf(int x) {
        System.out.println(x);
    }
    void printf(double x) {
        System.out.println(x);
    }
    void printf(char x) {
        System.out.println(x);
    }
    void printf() {
        System.out.println("null");
    }
}

在这里插入图片描述

上述示例中我们也行可以发现其实System.out.println()中的println()也用到了方法重载。

  1. 注意:对于方法重载
    方法名必须相同,形参列表必须不同,返回类型无要求

🦬八、构造方法

  1. 在前面成员方法示例中的Cylinder类有一个setCylinder()方法用来给该类的成员变量赋值,如果能够在创建对象的时候就完成初始化,程序会更加优化。java提供了一个特殊的成员方法——构造方法。

  2. 示例:

public class Test {
    public static void main(String[] args)   {
        Cylinder c1 = new Cylinder();
        Cylinder c2 = new Cylinder(1.3);
        Cylinder c3 = new Cylinder(1.2, 10);
    }
}
class Cylinder {
    double radius;
    double height;
    Cylinder() {
    }
    public Cylinder(double radius) {
        this.radius = radius;
    }
    public Cylinder(double radius, double height) {
        this.radius = radius;
        this.height = height;
    }
}

可以发现没有public Cylicder(double height){}的构造方法,这是因为和方法重载类似,需要有不同的参数列表,即当两个构造方法的参数列表都为double型时,会出现重定义错误。

  1. 构造方法的注意:

    • 方法名要与类名一样
    • 无返回值。是因为加了返回值就变成普通方法了。
    • 一般不能显示的调用,而是通过创建(new)一个对象的同时由系统自动调用,
    • 也有public省略protectprivate等修饰符
  2. 默认构造方法。

    在其他的类中,我们其实并没有定义构造方法,但是在创建对象的时候,编译器会自动为该类生成一个默认的构造方法,对于Cat类,它的默认构造方法就是:Cat(){}。如果是public Cat类,会生成public Cat(){}的默认构造方法。

    一旦用户自定义了构造方法,系统就不会提供默认构造方法。 需要自己定义一个无参的构造方法。

  3. 当你在初始化化对象的时候需要一个默认值,而不是初始值。可以在该无参构造方法里来调用有参构造方法

public Cylinder() {
    this(1,1);
}

this(1,1)中有两个参数,都为整型数据,系统会自动匹配到第三个构造方法public Cylinder(double radius, double height),毕竟int可以自动类型转换为double

注意:在某一构造方法中调用另一构造方法,必须用this()语句来调用,且必须为该构造方法的第一条语句。

🐖九、静态成员

static所修饰的对象成员称为静态成员。

静态变量

  1. static修饰的成员变量,叫做静态变量、静态属性或类变量。

  2. 示例:

public class test {
    public static void main(String[] args)   {
        Dog.cName = "犬";//对于静态变量,可以不用创建一个对象就可以直接访问
        Dog d1 = new Dog("旺柴");
        Dog d2 = new Dog("富贵");
        System.out.println(d1.name+"是"+d1.cName);
        System.out.println(d2.name+"是"+d2.cName);
    }
}
class Dog {
    static String cName;
    String name;
    int age;
    public Dog(String name) {
        this.name = name;
    }
}

在这里插入图片描述

  1. *对于类的所有对象,静态变量是他们公共的区域。
    *可以不用创建(new)一个对象就可以访问。

  2. 使用:*类名.静态变量名 (推荐)
    *对象名.静态变量名

静态方法

  1. static修饰的成员方法,叫做静态方法或类方法。

  2. 示例:

public class test {
    public static void main(String[] args)   {
        double radius = 2;
        System.out.println("半径为"+radius+"的圆的面积为"+
                math_.areaCircle(radius));
    }
}
class math_ {
    static double pai = 3.1416926;
    static double areaCircle(double radius) {
        return pai*radius*radius;
    }
}

在这里插入图片描述

  1. *静态方法属于该类的所有对象。因此不能在静态方法里直接使用属于某个对象的成员。
    *静态方法中也不能使用和对象有关的关键字,如thissuper

示例:

class try_ {
    static int a;
    int b;
    static void way1() {
        System.out.println(a);
        way1();
//不能直接使用对象成员
//        System.out.println(b);
//        way2();
//如果需要使用可以通过创建对象的方法简介访问
        try_ t = new try_();
        System.out.println(t.b);
        t.way2();   
    }
 //普通方法无限制,可见上文 四、成员方法
    void way2() {
        System.out.println(a);
        System.out.println(b);
        way2();
        way1();
    }
}
  1. 对于一些方法,加上static变成静态方法,也许就是为了不创建对象,就能使用。

    当然也有两种调用方式:类名.静态方法名(); 或 对象名.静态方法名();

  2. 细心的小伙伴可以发现,在2.的示例中,test类也有一个静态方法,即main()方法。其实main()方法是由虚拟机调用的,因此需要的访问权限是public,并且不需要创建对象,因此用static修饰。

🐄十、代码块

  1. 代码块又称初始化块,类似于方法

    但是没有方法名、返回值、参数,只有方法体

  2. 语法:

    //[]中的是修饰符
    [static/]{
        代码
    };//';'也可以省略
    
  3. 不显示的使用,而是在加载类或创建对象时隐式调用

    作用:

    相同于构造器的补充机制,用于初始化操作。

    如:当多个构造器中都有重复的语句,可以整合到代码块中。

  4. 普通代码块,即无修饰符的代码块

    每创建一个对象时,普通代码块就会被调用一次

  5. 静态代码块,即有static所修饰的代码块

    在加载类时执行一次,且只会执行一次

  6. 类加载的时候:

    创建对象时(new);

    创建子类时,父类也会被加载;

    使用静态成员时。

  7. 刚创建一个对象时,对初始化的调用顺序

    a. 静态代码块 和 静态属性初始化(按定义顺序,调用先后)

    b. 普通代码块 和 普通属性初始(按定义顺序,调用先后)

    c. 构造方法

  8. 演示:

    4 5 :
    在这里插入图片描述

    7a:

在这里插入图片描述

在这里插入图片描述

待续~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值