菜鸟教程学习记录——Java的对象和类

什么是类?

类是一种用于创建对象的蓝图或模板。它是一种用户自定义的数据类型,用于定义对象的属性(字段)和行为(方法)。类是一种抽象的概念,描述了对象的共同特征和行为。它定义了对象的结构和行为的集合,并可以用于创建多个具有相同结构和行为的对象。

什么是对象?

对象是类的一个实例或具体化的实体。它是类的具体实现,具有自己的状态和行为。对象可以被创建、使用和销毁。在Java中,使用关键字"new"来创建一个对象,并通过调用类的构造方法来初始化对象的状态。对象可以访问类中定义的字段和方法,并可以执行它们所定义的操作。

那么简单来说类可以看成是创建Java对象的模板

那么类中包含什么呢?

变量、方法、构造器、内部类、匿名类、访问修饰符、其他成员变量等:

  1. 字段(Fields):字段是类中的变量,用于存储对象的状态。它们描述了对象的特征或属性。字段可以是基本数据类型(如整数、字符、布尔值等)或其他类的对象。字段可以是私有的(private),只能在类内部访问,也可以是公共的(public),允许在类的外部进行访问。

  2. 方法(Methods):方法是类中的函数,用于定义对象的行为和操作。方法包含一系列语句和算法,用于执行特定的任务。通过调用方法,可以对对象进行操作、访问字段或返回特定的结果。方法可以具有参数(接受输入)和返回值(输出结果)。

  3. 构造方法(Constructors):构造方法是一种特殊的方法,用于创建和初始化对象。它在使用关键字"new"创建对象时自动调用。构造方法具有与类同名的方法名,并且没有返回类型。通过构造方法,可以传递参数来初始化对象的状态。

  4. 内部类(Inner Classes):内部类是定义在其他类内部的类。它们可以访问外部类的字段和方法,并且可以用于实现更复杂的逻辑和关系。内部类可以分为静态内部类(static inner class)和非静态内部类(non-static inner class)两种类型。

  5. 匿名类(Anonymous Classes):匿名类是一种没有显式定义名称的内部类,通常用于在使用时定义和实现接口或抽象类的匿名实例。匿名类的作用域通常局限于创建它的方法或代码块中。

  6. 访问修饰符(Access Modifiers):访问修饰符用于控制类中字段和方法的可见性和访问权限。常用的修饰符包括公共的(public)、私有的(private)、受保护的(protected)和默认的(默认不指定修饰符)。

  7. 其他成员(Members):除了上述内容外,类还可以包含其他成员,如静态字段(被类的所有实例共享的字段)、静态方法、常量、静态代码块(在类加载时执行的代码块)、枚举等。

PS:这些只是类中可能包含的一些常见成员。具体类中包含哪些内容取决于需求和设计。类用于封装数据和行为,提供了代码的组织和结构,以实现代码的重用和灵活性。

类中的变量有哪几种类型呢?

1.成员变量(Member Variables)也称(实例变量Instance Variables),每个类对象都会拥有自己的一组实例变量,在对象被创建的同时初始化,每个对象都有自己的一份副本。实例变量可以具有不同的访问控制修饰符public公共的、private私有的、protected受保护的、default默认的,控制对其的访问权限。

2.静态变量(Static Variables)也称(类变量Class Variables),静态变量与类相关联,而不是与类的实例对象相关联。它们在类加载时被初始化,并且所有该类的对象共享同一份静态变量。静态变量通常使用static关键字进行声明也有说法称之为“全局变量”,实际上只是实现了类似于全局变量的功能。

3.局部变量(Local Variables):局部变量是在方法、构造函数或者代码块中声明的变量,他们只作用在声明它们的方法、构造函数或代码块的作用域中。局部变量不会自动初始化,必须在使用前才会进行显示初始化

这些不同类型的变量在类中的作用和使用方式有何不同呢?

  • 实例变量用于表示对象的状态和属性

  • 静态变量用于表示类级别的属性或共享数据

  • 局部变量用于临时存储和处理数据。

  • 参数变量(Parameters):方法定义时声明的变量,作为调用该方法时传递给方法的值,参数变量的作用只限于方法内部。(PS:2023年7月11日补充)

根据具体的需求选择适当的变量类型来存储和操作数据会大大提升我们的开发效率。

下面通过一个具体的学习例子,来帮助我们理解实例变量、静态变量、局部变量的作用和使用方式的不同:

public class VariableExample {
    // 实例变量
    private String instanceVariable = "这是实例变量";
    
    // 静态变量
    private static int staticVariable = 10;
​
    public void exampleMethod() {
    // 局部变量
    String localVariable = "这是局部变量";
​
    System.out.println(instanceVariable); // 访问实例变量
    System.out.println(staticVariable); // 访问静态变量
    System.out.println(localVariable); // 访问局部变量
}
​
public static void main(String[] args) {
    VariableExample obj = new VariableExample();
    obj.exampleMethod();
    }
}

在上述示例中,我们定义了一个名为 VariableExample 的类。该类包含一个实例变量 instanceVariable,一个静态变量 staticVariable,以及一个方法 exampleMethod,其中定义了一个局部变量 localVariable

  • 实例变量:instanceVariable 是一个实例变量,它属于类的每个对象实例。每次创建 VariableExample 类的新对象时,都会为 instanceVariable 分配一个新的副本。在 exampleMethod 方法中,我们通过实例对象访问实例变量。

  • 静态变量:staticVariable 是一个静态变量,它与类相关联,而不是与类的实例相关联。它在类加载时被初始化,并且所有 VariableExample 类的对象共享同一份 staticVariable。我们可以直接通过类名访问静态变量。

  • 局部变量:localVariable 是在 exampleMethod 方法中定义的局部变量。它只在方法的作用域内可见,即在方法内部有效。局部变量必须在使用之前显式初始化。

  • 参数变量:在变量或者方法那一章节里面详写,这里就不过多演示。

通过运行上述代码,你将会看到以下输出

 学习总结:

通过上面这个例子的学习,它清晰地展示了实例变量、静态变量和局部变量的作用和使用方式的不同。

  • 实例变量与类的实例对象相关联,每个对象都有自己的一份副本。

  • 静态变量与类相关联,被类的所有对象共享。

  • 局部变量只在方法的作用域内有效,只在方法的执行期间存在。

理解这些变量的不同之处对于编写清晰、可维护的代码非常重要。在实际开发中,根据变量的使用场景和需求,选择适当的变量类型来存储和操作数据。

反思:那么如何区分类变量和实例变量呢?

构造方法

每个类都有构造方法。如果没有显式地为类定义构造方法,Java 编译器将会为该类提供一个默认构造方法。IDEA或者Eclipse都会自动创建,但是如果你写了一个构造器,那么编译器它就不会自动帮你生成了无参构造方法了。在创建一个对象的时候,至少要调用一个构造方法。构造方法的名称必须与类同名,一个类可以有多个构造方法,有参和无参,若是自己手写了一个有参构造器,建议再手写多一个无参构造器!

下面是一个构造方法示例:

public class Puppy{
    public Puppy(){
    }
 
    public Puppy(String name){
        // 这个构造器仅有一个参数:name
    }
}

在Java中创建对象需要几个步骤呢?

对象是根据类创建的。在Java中,使用关键字 new 来创建一个新的对象。创建对象需要以下三步:

  1. 声明对象的引用变量:首先,需要声明一个对象的引用变量,以便引用对象。引用变量的类型必须与要创建的对象类型相匹配。

  2. 分配内存空间:使用关键字 new 来分配内存空间,创建对象。new 关键字后面跟着要创建的对象类型以及对应的构造函数(可选)。

  3. 初始化对象:如果对象有构造函数,将会在创建对象时调用构造函数,对对象进行初始化。构造函数用于设置对象的初始状态和执行必要的初始化操作。

下面是一个简单的学习实例,演示了如何创建一个名为 Person 的对象:
public class Person {
    private String name;  // 声明私有的实例变量 name,用于存储姓名
    private int age;  // 声明私有的实例变量 age,用于存储年龄
​
    public Person(String name, int age) {
        this.name = name;  // 将构造函数的 name 参数赋值给实例变量 name
        this.age = age;  // 将构造函数的 age 参数赋值给实例变量 age
    }
​
    public void displayInfo() {
        System.out.println("姓名:" + name);  // 显示姓名
        System.out.println("年龄:" + age);  // 显示年龄
    }
​
    public static void main(String[] args) {
        // 创建对象的步骤
        Person person = new Person("张三", 25);  // 创建一个名为 person 的 Person 对象,传入姓名和年龄参数
        person.displayInfo();  // 调用 displayInfo 方法显示对象的信息
    }
}

访问实例变量和方法

通过已创建的对象来访问成员变量和成员方法,(步骤4)如下所示:

在上述示例中,我们首先声明了一个名为 Person 的类。然后,在 main 方法中,我们通过执行以下步骤来创建一个 Person 对象:

  1. 步骤1:声明对象的引用变量 person,它的类型是 Person 类。

  2. 步骤2:使用 new 关键字创建 Person 对象,分配内存空间。

  3. 步骤3:调用 Person 类的构造函数,通过构造函数对对象进行初始化。在这个例子中,构造函数接受两个参数:姓名和年龄。

  4. 步骤4:使用对象 person 调用 displayInfo 方法,显示对象的信息。

运行上述代码,将会输出以下内容:

 通过以上示例,我们可以清晰地了解在Java中创建对象所需的步骤,并且了解到对象的引用变量可以用于访问对象的方法和成员变量。


在Java中,源文件的声明规则如下:

  1. 源文件名与公共类名保持一致:Java源文件的名称应与其中的公共类名称完全一致,包括大小写。例如,如果公共类名是 MyClass,则源文件名应为 MyClass.java

  2. 单个源文件只能有一个公共类:每个源文件中只能包含一个公共类,且该类的名称必须与源文件名相同。除了公共类之外,源文件可以包含多个非公共类。

  3. 源文件可以不包含公共类:如果源文件中没有公共类,那么源文件的名称可以与其中的任何一个非公共类名称匹配。

  4. 包名与目录结构对应:如果源文件包含在包中,那么源文件的第一行应该是 package 声明,用于指定包名。包名应与源文件的物理目录结构相对应。

  5. import 语句用于引入其他类:如果源文件中使用了其他包或类,那么可以使用 import 语句来引入这些类。import 语句应该在 package 声明之后、类定义之前。

以下是一个示例,演示了Java源文件的声明规则:
package com.example.mypackage;  // 声明包名,对应目录结构
​
import java.util.List;  // 引入 java.util.List 类
​
public class MyClass {  // 公共类名与源文件名相同
    // 类的定义...
}
​
class MyOtherClass {  // 非公共类,可以与源文件名不同
    // 类的定义...
}

PS:遵循源文件声明规则是很重要的,以确保代码的可读性和可维护性。按照约定和规范来组织和命名源文件,有助于其他开发人员理解和维护代码。虽然现在大部分的编译器都会自动帮忙导包,但是有的时候会出现同命名的情况,这种时刻就要考验你自己的基础是否扎实了

结尾语:记录于2023年7月10日21点37分,以上仅为个人在菜鸟教程Java的学习过程中遇到的问题,还有记录的个人想法,有错误欢迎指出,感谢!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Stevedash

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值