Java之类和对象

文章目录

  • 1.面向对象
  • [2. 类的定义和使用](#2. 类的定义和使用)
    • [2.1 类](#2.1 类)
    • [2.2 类的定义](#2.2 类的定义)
  • 2.3例题
  • [3. 类的实例化](#3. 类的实例化)
  • 4.this引用
  • [5. 对象的构造和初始化](#5. 对象的构造和初始化)
    • [5.1 构造方法](#5.1 构造方法)
      • [5.1.1 什么是构造方法](#5.1.1 什么是构造方法)
      • [5.1.2 构造方法的特性](#5.1.2 构造方法的特性)
    • [5.2 初始化](#5.2 初始化)
      • [5.2.1 默认初始化](#5.2.1 默认初始化)
      • [5.2.2 就地初始化](#5.2.2 就地初始化)

1.面向对象

1.1 什么是面向对象?

Java面向对象的概念是指在计算机层程序中,模拟现实世界中的概念,借助对象的描述在计算机中用类似的实体模拟现实世界中的实体。在面向对象的世界里,一切皆为对象,面向对象主要依靠对象之间的交互来完成一件事。

1.2面向对象与面向过程

例如,将大象放进冰箱需要几步?

总共有两个对象,分别为大象和冰箱。

需要三步,打开冰箱门,将大象放进冰箱,关上冰箱门,我们并不需要知道是如何将大象放进冰箱的。

面向对象的方法来处理问题,就不需要关注将大象放进冰箱的过程,是通过对象之间的交互来完成的

2. 类的定义和使用

面向对象关注的是对象,是现实生活中的实体,例如一名学生,他有名字,学号,性别,班级,年龄,生日,籍贯等属性,这些属性是对这个学生的描述。

2.1 类

类就是对一个对象进行描述的,例如上面的学生的例子。

2.2 类的定义

在Java中是这样定义类的

要用到class 关键字,class是定义类的关键字。

java 复制代码
class ClassName{
	field;//成员变量
	method;//成员方法
}

例如:

java 复制代码
class Student {
    public int id;//学号
    public String name;//姓名
    public String sex;//性别
    public String birthday;//生日
    public String birthplace;//籍贯

    //学习
    public void study(){
        System.out.println("正在学习");
    }
    
    //吃饭
    public void eat(){
        System.out.println("正在吃饭");
    }
    
    //睡觉
    public void sleep(){
        System.out.println("正在睡觉");
    }
}

注意

  1. 类名建议采用大驼峰方式
  2. 刚学习如何定义类,成员变量前统一使用public关键字
  3. 成员方法前不使用static关键字

2.3例题

定义一个狗类,当然是我最喜欢的仔仔啦!嘻嘻

仔仔的属性有名字,性别,年龄,颜色......,成员方法有睡觉,吃饭,加启动(竖中指)bushi,狗叫......

让我们来一起实现下

java 复制代码
public class Dog {
    public String name;
    public String sex;
    public int age;
    public String color;
    
    public void sleep(){
        System.out.println(name + "在睡觉");
    }
    
    public void eat(){
        System.out.println(name + "在吃红烧肉");
    }
    
    public void bark(){
        System.out.println(name + "在狗叫");
    }
}

注意

  1. 建议一个Java文件只定义一个类
  2. main方法所在的类一般要使用public修饰
  3. public 修饰的类必须和文件名相同
    例如,一个Java文件中定义了许多类,被public修饰的类一定要与文件名相同

不相同时就会出错

  1. 改类名的时候需要通过开发工具改,不要直接在代码中改

3. 类的实例化

用类类型创建对象的过程,就是类的实例化

就像我定义了狗这个类,我想实例化仔仔这个对象。在Java中使用new关键字来实例化对象。用 . 来访问对象的成员变量和成员方法。

java 复制代码
public class Main {
    public static void main(String[] args) {
        Dog dog1 = new Dog();
        dog1.name = "仔仔";
        dog1.color = "屎色";

        dog1.eat();
        dog1.bark();

        Dog dog2 = new Dog();
        dog2.name = "小白";
        dog2.color = "白色";

        dog2.sleep();
        dog2.eat();
    }
}

仔仔在吃红烧肉,嘻嘻

每人限领一个!!!

一个类中可以创建多个实例。

画JVM布局分布图,加深理解

4.this引用

让我们来看下列代码,一起了解为什么要使用this关键字

java 复制代码
public class Date {
    public int year;
    public int month;
    public int day;

    public void setDate(int y,int m,int d){
        year = y;
        month = m;
        day = d;
    }

    public void printDate(){
        System.out.println(year + "-" + month + "-" + day);
    }
}
java 复制代码
public static void main(String[] args) {
        Date date1 = new Date();
        Date date2 = new Date();
        Date date3 = new Date();

        date1.setDate(2014, 5, 4);
        date2.setDate(2024, 6, 2);
        date3.setDate(2021, 3, 4);

        date1.printDate();
        date2.printDate();
        date3.printDate();
    }

当我们在编写setDate方法时,形参与成员变量相同,如下代码所示

java 复制代码
public void setDate(int y,int m,int d){
        year = year;
        month = month;
        day = day;
    }

那到底是谁给谁赋值呢?

我们在main函数中创建了三个对象,当三个对象同时调用setDate和printDate方法时,两个方法是如何知道打印的是哪个数据?

this关键字:this引用指向当前对象(成员方法运行时调用该成员方法的对象),在成员方法中所有成员变量的操作,都是通过该引用去访问。(谁调用当前的方法,谁就是this)

所以Date类可以这样写

java 复制代码
public class Date {
    public int year;
    public int month;
    public int day;

    public void setDate(int y,int m,int d){
        this.year = year;
        this.month = month;
        this.day = day;
    }

    public void printDate(){
        System.out.println(this.year + "-" + this.month + "-" + this.day);
    }
}

注意

  1. this只能在成员方法中使用
  2. this在成员方法中只能引用当前对象
  3. 其实在成员方法的参数中,第一个参数就是this,但是被隐藏了

    在成员方法执行的时候,编译器会将调用成员方法对象的引用传递给成员方法,用this来接收。

5. 对象的构造和初始化

5.1 构造方法

5.1.1 什么是构造方法

构造方法是一个特殊的成员方法,名字必须与类名相同,在创建对象时,由编译器自动调用,并且在整个对象的生命周期内只调用一次,构造方法是对成员变量进行初始化的作用。

一定要记住啊,这个真的很重要!好多题都会考,一起来看下如何定义构造方法

java 复制代码
class Dog {
    public String name;
    public String sex;
    public int age;
    public String color;

    //无参数的构造方法
    public Dog(){

    }

    //四个参数的构造方法
    public Dog(String name,String sex,int age,String color){
        this.name = name;
        this.sex = sex;
        this.age = age;
        this.color = color;
    }

    public void show(){
        System.out.println("姓名:" + name + "性别:" + sex + "年龄:" + age + "颜色:" + color);
    }

	public static void main(String[] args) {
        Dog dog = new Dog();
        dog.show();
    }
}

5.1.2 构造方法的特性

  1. 没有返回值
  2. 构造方法的名字必须与类名相同
  3. 在创建对象时,编译器会自动调用构造方法,构造方法只执行一次(创建对象时没有传递参数,就是调用无参数的构造方法;如果传递了参数,根据参数来决定调用的到底是哪个构造方法)
  4. 构造方法可以重载,例如上述代码中,无参数的构造方法和带有四个参数的构造方法实现了重载
  5. 当用户没有写构造方法时,编译器会自动提供一个无参数的构造方法(但是,当用户自己定义了构造方法时,编译器就不会提供了)

由于编译器自动提供无参数的构造方法,并没有报错

当用户提供了构造方法,编译器将不会提供

  1. 可以使用快捷键来生成构造方法

Alt + Insert

  1. 在构造方法中,可以用this来调用其他构造方法
  2. this的调用不能成环

5.2 初始化

当我们在main方法中定义一个变量而没有初始化时,会报错

而我们在定义类的时候,没有给成员变量进行初始化,并没有报错,这是因为在一个类的成员变量中,没有初始化前,java会对每个成员变量赋一个默认值。

5.2.1 默认初始化

数据类型 默认值
byte 0
short 0
int 0
long 0
float 0.0f
double 0.0
char '\u0000'
boolean false
reference null

5.2.2 就地初始化

就地初始化就是在声明成员变量时,直接初始化

相关推荐
Java牛马3 小时前
SpringBoot Starter 依赖相关总结
java·spring·springboot·starter·自动装配·依赖
丰锋ff3 小时前
基于 Qt 的智能门禁系统(二)
开发语言·qt
吴声子夜歌3 小时前
Java面试——Spring Cloud原理及应用(二)
java·spring cloud·面试
fpcc3 小时前
跟我学C++中级篇——编译期的条件选择
开发语言·c++
SomeB1oody4 小时前
【RustyML入门】6.3. 并行归约
开发语言·后端·机器学习·rust·教程
东小西4 小时前
【SAA实战】第 1 篇:ReactAgent 入门——先撸个"会调工具的助手"跑起来
java·人工智能·spring
mqiqe5 小时前
AgentScope Java 2.0 协议集成全景解析:A2A、AG-UI、Agent Protocol 三大开放协议实战指南
java·开发语言·ui
lzhdim5 小时前
12、JavaScript常见的内存泄露问题 - JavaScript学习系列文章
开发语言·前端·javascript·学习·ecmascript
脉动数据行情5 小时前
Java 实现台股 TWSE/TPEx 行情采集(个股 + K 线)
java·开发语言·twse·tpex·台股
爱学习的小邓同学5 小时前
Golang --- (1)第一个Golang程序
开发语言·后端·golang