Java :类和对象(一)

📚 目录

前言:

  Java是一门纯面向对象的语言在面向对象的世界里,⼀切皆为对象。面向对象是解决问题的⼀种思想,主要依靠对象之间的交互完成⼀件事情。

  学习Java这么久还是对类和对象的理解都不是特别深刻的,今天带你走进这个抽象的概念,加强对类和对象这个概念的理解和印象。

1. 什么是类和对象?

  我们传统过程中洗衣服的时候,注重的是洗衣服的过程,而我们现代洗衣机我们只需要将衣服洗衣液倒入洗衣机过段时间我们就能够得到我们的洗干净的衣服。'

  而我们的Java就像我们的洗衣机,只注重得到洗干净的衣服,不必关心洗衣服的过程,通过对象的交互来进行完成操作。

注意:面向对象和面向过程不是一门语言,是解决问题的方法,没有那个好坏之分,都有其专门的应用场景。

  就拿我们C语言来举例,C语言比较注重细节的过程,而我们的Java不需要只要知道怎么用就行了。
[🔙 返回目录](#🔙 返回目录)

1.1简单认识类

  类是一个抽象的概念。

  类:对一个实体(对象)来进行描述的。,主要描述该实体(对象)具有哪些属性(外观尺寸等),哪些功能(用来做什么),描述完成后计算机就可以识别了。

例如:

  品牌的洗衣机就相当于类的名字。

  属性:型号、尺寸、颜色等。

  功能:烘干、定时。
[🔙 返回目录](#🔙 返回目录)


1.2简单认识对象

  对象:简单来说就是我们看到的事物,就相当于我们想要制作一个月饼,我们就能够将类看作一个模具,我们只需要将面团往上面一扣,我们就能够得到一个月饼的形状。

  也就相当于我们洗衣机(模具)洗完的衣服,得到的就是我们的对象。
[🔙 返回目录](#🔙 返回目录)


2. 类的定义和使用

[🔙 返回目录](#🔙 返回目录)

2.1类的定义

类的定义格式:我们定义类的时候需要使用Class关键字(采用大驼峰)。

java 复制代码
class ClassName{  
	field;  //字段或者是成员变量     
	method; //成员方法     
}

例如:

java 复制代码
class Dog {
    public int age;
    public String name;
    public String color;
    
    public void walk () {
        //动作
    }
    public  void habit() {
        //习惯
    }
    // ......
}

  采用Java语言将狗的类在计算机中定义完成,经过javac编译后生成 .class文件,在JVM的基础上就能够采用计算机识别了。
[🔙 返回目录](#🔙 返回目录)


2.2类的实例化

  实例化:定义了一个类,相当于在计算机中定义了一种新的类型(就相当于用模具变成对象)

例如:我们想要在计算机中创建一个女朋友。

java 复制代码
public class MyGrilFrind {
    public String name;
    public int age;
    public int big;
    public double kg;
		//...
    public void arr(int day) {
        //....
    }
    public void arr1() {
        //...
    }
    //....

}

  用我们定义的对象进行变现:

java 复制代码
 MyGrilFrind mygirlfrienf = new MyGrilFrind();//没有女朋友就在计算机中new一个。

访问当中的成员用点号来操作 ( . )

例如:

java 复制代码
public class Test {


    public static void main(String[] args) {
        MyGrilFrind mygirlfrienf = new MyGrilFrind();
        mygirlfrienf.name = "翠花";
        System.out.println(mygirlfrienf.name);
    }

}

注意:

  new关键字用于创建对象的实例化(分配内存)
  点号可以访问和操作成员变量。
  同时可以创建多个实列。

[🔙 返回目录](#🔙 返回目录)


3. 对象的构造和初始化

3.1this关键字

  为什么要用this这个关键字?

示例:

java 复制代码
public class Date {

    int year;
    int month;
    int day;

    //打印年份

    public void swap(int year,int month,int day) {
        year = year;
        month = month;
        day = day;
    }

}

实例化:

java 复制代码
public class Test {


    public static void main(String[] args) {
        Date date = new Date();
        date.swap(2006, 3, 15);
        System.out.println(date.year + "/" + date.month + "/" + date.day);
    }

}

  为什么全都是默认初始值呢?为什么没有交换?

原因:局部变量优先,就相当于自己给自己赋值,而不是给Data这个类中的year,month,day赋值。

  加上this效果:

java 复制代码
public class Date {

    int year;
    int month;
    int day;

    //打印年份

    public void swap(int year,int month,int day) {
        this.year = year;
        this.month = month;
        this.day = day;
    }

}

  this这个关键字就告诉我们这个year是我们用类创建的对象中的year,而不是局部变量的。

this特性:

  对应类类型引用,即哪个对象调⽤就是哪个对象的引用类型。

  在"成员方法"中,this只能引用当前对象,不能再引用其他对象。

  this是"成员方法"第⼀个隐藏的参数,编译器会自动传递,在成员方法执行时,编译器会负责将调用成员方法对象的引用传递给该成员方法,this负责来接收。
[🔙 返回目录](#🔙 返回目录)


3.2初始化

  初始化又分默认初始化和就地初始化和构造初始化。

  我们创建完类的时候没有进行初始化,编译器会自动帮我们进行初始化。

各个类型初始化值:

就地初始化:

java 复制代码
public class MyGrilFrind {
    public String name = "小美";
    public int age = 18;
    public double kg = 48;

    public void arr(int day) {
        //....
    }
    public void arr1() {
        //...
    }
    //....

}

  在进行写类的时候就初始化完了。

构造初始化:

  什么是构造初始化?
**  构造方法:构造方法是一种特殊成员方法(构造器)
注意事项:
  名字必须与类名字相同。
  没有返回值。
  创建对象时候自动调用并且只调用一次。**

java 复制代码
public class Test {


    public static void main(String[] args) {
        Apple apple = new Apple();

    }
}
java 复制代码
public class Apple {
    String name;

    public Apple() {
        System.out.println("构造方法被调用");
    }
}

  构造方法支持重载。

java 复制代码
public class Apple {
    String name = "apple";

    public Apple() {
        System.out.println("构造方法被调用");
    }
    public Apple(String name) {
        System.out.println(this.name);
    }
}

  当我们写了构造方法的时候并有参数的情况下:

java 复制代码
public class Apple {
    String name;

    public Apple(String name) {
        this.name = name;
    }
}

  这时候就会出现报错,为什么???

java 复制代码
public class Apple {
    String name;//编译器会默认生成一份没有参数的构造类型。
}

  为什么这种情况下不会报错?
**  原因:用户没有定义构造方法的时候编译器会默认给你生成一份构造方法(隐形我们看不见)默认生成的构造方法是没有参数的。**
**  快速构建构造方法的快捷键:鼠标右键(或者:Ctrl+insert)+Generate+Constructor**

java 复制代码
public class Dog {
    String name;
    int age;
    String color;
    
    public Dog() {
        
    }

    public Dog(String name, int age, String color) {
        this.name = name;
        this.age = age;
        this.color = color;
    }

    public Dog(int age) {
        this.age = age;
    }

    public Dog(String name) {
        this.name = name;
    }
}
java 复制代码
public class Test {

    public static void main(String[] args) {
        Dog dog = new Dog("旺财",8,"yellow");
    }
}

  当我们想要使用各种初始化的时候可以自己写也可以用快捷键来进行编写。
[🔙 返回目录](#🔙 返回目录)


相关推荐
ywl4708120876 分钟前
jwt生产token,简单版helloworld
java·数据库·spring
未若君雅裁11 分钟前
生产问题排查与性能瓶颈定位:日志、监控、链路追踪、压测与Arthas
java·web安全
器灵科技19 分钟前
AI视频工具实测:Seedance/可灵/HappyHorse谁最能打?
java·运维·数据库·人工智能·github
南部余额30 分钟前
RabbitMQ 进阶:延迟队列完全指南
java·分布式·spring·rabbitmq
phltxy32 分钟前
Spring AI Agents 智能体模式实战
java·人工智能·spring
码云骑士40 分钟前
13-列表append的底层真相(上)-listobject源码中的预分配策略
开发语言·python
摇滚侠42 分钟前
MyBatis 入门到项目实战 特殊 SQL 的执行 34-37
java·sql·mybatis
phltxy1 小时前
Spring AI 可观测性与 Zipkin 实战
java·人工智能·spring
兰令水1 小时前
leecodecode【面试150】【2026.6.13打卡-java版本】
java·算法·leetcode
.道阻且长.1 小时前
C++ string 操作指南:接口解析
java·c语言·开发语言·c++